├── .gitignore ├── 1.python기본 ├── mycampus_python101_#1_basic.ipynb ├── mycampus_python101_#2_string.ipynb ├── mycampus_python101_#3_function.ipynb ├── mycampus_python101_#4_list_comprehension.ipynb └── mycampus_python101_#5_class_intro.ipynb ├── 2.딥러닝준비 ├── mycampus_python101_#6_practice.ipynb ├── mycampus_python101_#7_count_confusion_matrix.ipynb ├── mycampus_python101_#8_dict_counter.ipynb └── mycampus_python101_#9_numpy.ipynb ├── README.md └── 마이캠퍼스_python_기초.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /1.python기본/mycampus_python101_#1_basic.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "hH4LfqPIIn9N" 8 | }, 9 | "source": [ 10 | "# 딥러닝 프로그래밍 빠르게 배우기 (마이캠퍼스)\n", 11 | "## https://pg.mycampus.io/?idx=97\n", 12 | "\n", 13 | "* 질문/문의: 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255\n", 14 | "\n", 15 | "## 이 파일의 목차 \n", 16 | "* int, float 숫자\n", 17 | "* string 문자열\n", 18 | "* list 리스트\n", 19 | "* tuple 튜플\n", 20 | "* list 인텍스, 슬라이스(slice)\n", 21 | "* range()\n", 22 | "* for 루프\n", 23 | "* 문자열 함수" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": { 29 | "colab_type": "text", 30 | "id": "0B38R2tRf5KQ" 31 | }, 32 | "source": [ 33 | "# 숫자, 계산" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 1, 39 | "metadata": { 40 | "colab": { 41 | "base_uri": "https://localhost:8080/", 42 | "height": 34 43 | }, 44 | "colab_type": "code", 45 | "id": "xY2omj5uf28j", 46 | "outputId": "7bae8ad1-fab5-4d76-b09a-32d350beae9d" 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "10 + 20" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 2, 56 | "metadata": { 57 | "colab": { 58 | "base_uri": "https://localhost:8080/", 59 | "height": 34 60 | }, 61 | "colab_type": "code", 62 | "id": "H6hzLmbKf4pL", 63 | "outputId": "f728e17b-7cfa-4683-fbe4-ef4054286cc4" 64 | }, 65 | "outputs": [], 66 | "source": [ 67 | "(2+3) * 10" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": { 74 | "colab": { 75 | "base_uri": "https://localhost:8080/", 76 | "height": 34 77 | }, 78 | "colab_type": "code", 79 | "id": "TeM_yQqJgEnS", 80 | "outputId": "8d8872b6-408a-41d7-fe7b-3a7709fe9f91" 81 | }, 82 | "outputs": [], 83 | "source": [ 84 | "# 변수: 값을 저장하는 방(메모리). 그 방의 이름\n", 85 | "a = 2\n", 86 | "b = 3\n", 87 | "c = 10\n", 88 | "c * (a+b)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 4, 94 | "metadata": { 95 | "colab": { 96 | "base_uri": "https://localhost:8080/", 97 | "height": 34 98 | }, 99 | "colab_type": "code", 100 | "id": "CYaKZERcgXCM", 101 | "outputId": "9e5ac326-7ebb-4554-906f-83413103a8d1" 102 | }, 103 | "outputs": [], 104 | "source": [ 105 | "a = 1.5 # 실수 (소수점이 있는 수)\n", 106 | "b = 3 # 정수 (소수점이 없는 수)\n", 107 | "a*b" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "metadata": { 113 | "colab_type": "text", 114 | "id": "YVSBX552fxTm" 115 | }, 116 | "source": [ 117 | "# 문자열 (텍스트) 다루기" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 5, 123 | "metadata": { 124 | "colab": { 125 | "base_uri": "https://localhost:8080/", 126 | "height": 50 127 | }, 128 | "colab_type": "code", 129 | "id": "xmQmrs7LggWT", 130 | "outputId": "331702ca-51ea-413c-a60b-47c069f3ae8b" 131 | }, 132 | "outputs": [], 133 | "source": [ 134 | "# 문자열(텍스트) 표시에 큰따옴표, 작은따옴표 모두 가능\n", 135 | "print('hello 1') # 큰따옴표\n", 136 | "print(\"hello 2\") # 작은따옴표" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 6, 142 | "metadata": { 143 | "colab": { 144 | "base_uri": "https://localhost:8080/", 145 | "height": 50 146 | }, 147 | "colab_type": "code", 148 | "id": "ajBt6h3Ee-Xj", 149 | "outputId": "81ede2d6-3466-40a1-f99c-263400479fc3" 150 | }, 151 | "outputs": [], 152 | "source": [ 153 | "# 따옴표 연속 3개 - 여러 라인의 문자열 가능함.\n", 154 | "print('''Hello \n", 155 | " World 1''')" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 7, 161 | "metadata": { 162 | "colab": { 163 | "base_uri": "https://localhost:8080/", 164 | "height": 50 165 | }, 166 | "colab_type": "code", 167 | "id": "4pjyqfwqfTaW", 168 | "outputId": "59b51aea-a00f-4799-dcb7-95fe68ee4ec4" 169 | }, 170 | "outputs": [ 171 | { 172 | "name": "stdout", 173 | "output_type": "stream", 174 | "text": [ 175 | "Hello \n", 176 | " World 2\n" 177 | ] 178 | } 179 | ], 180 | "source": [ 181 | "# 따옴표 연속 3개 - 여러 라인의 문자열 가능함.\n", 182 | "print(\"\"\"Hello \n", 183 | " World 2\"\"\")" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 8, 189 | "metadata": { 190 | "colab": { 191 | "base_uri": "https://localhost:8080/", 192 | "height": 34 193 | }, 194 | "colab_type": "code", 195 | "id": "pz_wZBdjesjx", 196 | "outputId": "ab468d78-c80b-436a-8838-f620f0d96a3d" 197 | }, 198 | "outputs": [ 199 | { 200 | "name": "stdout", 201 | "output_type": "stream", 202 | "text": [ 203 | "hello\n" 204 | ] 205 | } 206 | ], 207 | "source": [ 208 | "# 변수: 데이터를 어떤 방(메모리)에 저장하고, 그 방이름을 정함.\n", 209 | "a = 'hello'\n", 210 | "print(a) " 211 | ] 212 | }, 213 | { 214 | "cell_type": "markdown", 215 | "metadata": { 216 | "colab_type": "text", 217 | "id": "1GsP9UvzguDL" 218 | }, 219 | "source": [ 220 | "# 여러 개의 값을 저장하기 -- list (리스트)와 tuple(튜플)" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 9, 226 | "metadata": { 227 | "colab": {}, 228 | "colab_type": "code", 229 | "id": "oK2EeGsHhMCX" 230 | }, 231 | "outputs": [], 232 | "source": [ 233 | "a = [10, 20, 30] # list: []\n", 234 | "b = (10, 20, 30) # tuple: () \n" 235 | ] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "execution_count": 10, 240 | "metadata": { 241 | "colab": { 242 | "base_uri": "https://localhost:8080/", 243 | "height": 50 244 | }, 245 | "colab_type": "code", 246 | "id": "gitl_sychcZY", 247 | "outputId": "9680fa24-dede-4abf-c2c3-52291d44c1f3" 248 | }, 249 | "outputs": [ 250 | { 251 | "name": "stdout", 252 | "output_type": "stream", 253 | "text": [ 254 | "[10, 20, 30]\n", 255 | "(10, 20, 30)\n" 256 | ] 257 | } 258 | ], 259 | "source": [ 260 | "print(a)\n", 261 | "print(b)" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": 11, 267 | "metadata": { 268 | "colab": { 269 | "base_uri": "https://localhost:8080/", 270 | "height": 50 271 | }, 272 | "colab_type": "code", 273 | "id": "kp7agvSDhfUt", 274 | "outputId": "1f126476-1a99-4d19-cc6a-490033885c14" 275 | }, 276 | "outputs": [ 277 | { 278 | "name": "stdout", 279 | "output_type": "stream", 280 | "text": [ 281 | "\n", 282 | "\n" 283 | ] 284 | } 285 | ], 286 | "source": [ 287 | "print(type(a)) # 데이터의 타입을 알아보기\n", 288 | "print(type(b)) # 데이터의 타입을 알아보기" 289 | ] 290 | }, 291 | { 292 | "cell_type": "code", 293 | "execution_count": 12, 294 | "metadata": { 295 | "colab": { 296 | "base_uri": "https://localhost:8080/", 297 | "height": 50 298 | }, 299 | "colab_type": "code", 300 | "id": "nFKKp9YPiBxS", 301 | "outputId": "0f8ccc9e-d0dc-4fc9-c19c-522c5e38e435" 302 | }, 303 | "outputs": [ 304 | { 305 | "name": "stdout", 306 | "output_type": "stream", 307 | "text": [ 308 | "[10, 20, 30, 10, 20, 30]\n", 309 | "(10, 20, 30, 10, 20, 30)\n" 310 | ] 311 | } 312 | ], 313 | "source": [ 314 | "print(a*2) # 원소 개수가 2배로 \n", 315 | "print(b*2) # 원소 개수가 2배로 " 316 | ] 317 | }, 318 | { 319 | "cell_type": "markdown", 320 | "metadata": { 321 | "colab": {}, 322 | "colab_type": "code", 323 | "id": "184FHa3oiVYo" 324 | }, 325 | "source": [ 326 | "## list와 tuple 차이\n", 327 | "* tuple은 처음 생성될때의 데이터(원소, element)를 추가, 삭제할 수 없다.\n", 328 | "* list는 데이터(element)를 추가, 삭제할 수 있다." 329 | ] 330 | }, 331 | { 332 | "cell_type": "code", 333 | "execution_count": 13, 334 | "metadata": {}, 335 | "outputs": [ 336 | { 337 | "name": "stdout", 338 | "output_type": "stream", 339 | "text": [ 340 | "[10, 20, 30, 40]\n" 341 | ] 342 | } 343 | ], 344 | "source": [ 345 | "a.append(40)\n", 346 | "print(a)" 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": null, 352 | "metadata": { 353 | "colab": {}, 354 | "colab_type": "code", 355 | "id": "8ko9MWBOes6I" 356 | }, 357 | "outputs": [], 358 | "source": [] 359 | }, 360 | { 361 | "cell_type": "markdown", 362 | "metadata": { 363 | "colab_type": "text", 364 | "id": "dsW58P5nKEH6" 365 | }, 366 | "source": [ 367 | "# 데이터 생성하기\n" 368 | ] 369 | }, 370 | { 371 | "cell_type": "markdown", 372 | "metadata": { 373 | "colab_type": "text", 374 | "id": "2Z7m_w9LKxLt" 375 | }, 376 | "source": [ 377 | "## integer (정수) --> int()" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": 14, 383 | "metadata": { 384 | "colab": { 385 | "base_uri": "https://localhost:8080/", 386 | "height": 34 387 | }, 388 | "colab_type": "code", 389 | "id": "KZ2MmUNuI1tr", 390 | "outputId": "ed175abd-0b7e-4ab0-b9ec-c68613f1fb65" 391 | }, 392 | "outputs": [ 393 | { 394 | "name": "stdout", 395 | "output_type": "stream", 396 | "text": [ 397 | "A1: 77 A2: 77 A3: 0\n" 398 | ] 399 | } 400 | ], 401 | "source": [ 402 | "A1 = 77\n", 403 | "A2 = int('77')\n", 404 | "A3 = int()\n", 405 | "print('A1:', A1, 'A2:', A2, 'A3:', A3)" 406 | ] 407 | }, 408 | { 409 | "cell_type": "markdown", 410 | "metadata": { 411 | "colab_type": "text", 412 | "id": "HbuuOIT3K2gb" 413 | }, 414 | "source": [ 415 | "## real number (실수) --> float()" 416 | ] 417 | }, 418 | { 419 | "cell_type": "code", 420 | "execution_count": 15, 421 | "metadata": { 422 | "colab": { 423 | "base_uri": "https://localhost:8080/", 424 | "height": 34 425 | }, 426 | "colab_type": "code", 427 | "id": "rXrBJgdZKOyY", 428 | "outputId": "6f433d91-5238-4be8-cba3-adabded77ba6" 429 | }, 430 | "outputs": [ 431 | { 432 | "name": "stdout", 433 | "output_type": "stream", 434 | "text": [ 435 | "A1: 3.4 A2: 3.4 A3: 0.0\n" 436 | ] 437 | } 438 | ], 439 | "source": [ 440 | "A1 = 3.4\n", 441 | "A2 = float('3.4')\n", 442 | "A3 = float()\n", 443 | "print('A1:', A1, 'A2:', A2, 'A3:', A3)" 444 | ] 445 | }, 446 | { 447 | "cell_type": "markdown", 448 | "metadata": { 449 | "colab_type": "text", 450 | "id": "sVXSNe4XLF5i" 451 | }, 452 | "source": [ 453 | "## list (목록) --> list(), [ ]" 454 | ] 455 | }, 456 | { 457 | "cell_type": "code", 458 | "execution_count": 16, 459 | "metadata": { 460 | "colab": { 461 | "base_uri": "https://localhost:8080/", 462 | "height": 34 463 | }, 464 | "colab_type": "code", 465 | "id": "u62tC77eKO2Q", 466 | "outputId": "03e03309-c766-4918-ffb6-9cf13513d254" 467 | }, 468 | "outputs": [ 469 | { 470 | "name": "stdout", 471 | "output_type": "stream", 472 | "text": [ 473 | "A1: [0, 1, 2, 3] A2: [0, 1, 2, 3] A3: []\n" 474 | ] 475 | } 476 | ], 477 | "source": [ 478 | "A1 = [0,1,2,3]\n", 479 | "A2 = list(range(4))\n", 480 | "A3 = list()\n", 481 | "print('A1:', A1, 'A2:', A2, 'A3:', A3)" 482 | ] 483 | }, 484 | { 485 | "cell_type": "markdown", 486 | "metadata": {}, 487 | "source": [ 488 | "## list의 인덱스" 489 | ] 490 | }, 491 | { 492 | "cell_type": "code", 493 | "execution_count": 17, 494 | "metadata": {}, 495 | "outputs": [ 496 | { 497 | "name": "stdout", 498 | "output_type": "stream", 499 | "text": [ 500 | "0\n", 501 | "4\n", 502 | "[0, 1, 2, 3, 4, 5]\n", 503 | "5\n", 504 | "4\n" 505 | ] 506 | } 507 | ], 508 | "source": [ 509 | " a = [0, 1, 2, 3, 4]\n", 510 | " print(a[0]) # 첫번째 방은 0번방. index는 0부터.\n", 511 | " print(a[-1]) # -1은 끝 \n", 512 | " a.append(5) # element를 제일 뒤에 하나 추가. \n", 513 | " print(a)\n", 514 | " print(a[-1])\n", 515 | " print(a[-2]) # 끝에서 두번째\n" 516 | ] 517 | }, 518 | { 519 | "cell_type": "markdown", 520 | "metadata": {}, 521 | "source": [ 522 | "## list의 slice(콜론)" 523 | ] 524 | }, 525 | { 526 | "cell_type": "code", 527 | "execution_count": 18, 528 | "metadata": {}, 529 | "outputs": [ 530 | { 531 | "name": "stdout", 532 | "output_type": "stream", 533 | "text": [ 534 | "[1, 2]\n", 535 | "[0, 1, 2]\n", 536 | "[3, 4, 5]\n", 537 | "[0, 1, 2, 3, 4]\n", 538 | "[0, 1, 2, 3, 4, 5, 'hello']\n" 539 | ] 540 | } 541 | ], 542 | "source": [ 543 | "# slice – 콜론(‘:’)으로 index의 start,end를 지정함. end는 포함하지 않음\n", 544 | "print(a[1:3]) # 1번index(2번방)에서 3번index직전까지 \n", 545 | "print(a[:3]) # start를 지정하지 않으면 처음부터.\n", 546 | "print(a[3:]) # end를 지정하지 않으면 끝까지.\n", 547 | "print(a[:-1]) # 처음부터 끝 직전까지.\n", 548 | "a.append('hello')\n", 549 | "print(a)\n" 550 | ] 551 | }, 552 | { 553 | "cell_type": "markdown", 554 | "metadata": {}, 555 | "source": [ 556 | "# python 기본 함수 중 sum(), len()" 557 | ] 558 | }, 559 | { 560 | "cell_type": "code", 561 | "execution_count": 19, 562 | "metadata": {}, 563 | "outputs": [ 564 | { 565 | "name": "stdout", 566 | "output_type": "stream", 567 | "text": [ 568 | "15\n", 569 | "3\n", 570 | "5.0\n" 571 | ] 572 | } 573 | ], 574 | "source": [ 575 | "a = [4, 5, 6]\n", 576 | "print(sum(a)) # 합계 구하기 15\n", 577 | "\n", 578 | "print(len(a)) # 리스트길이(갯수) 3\n", 579 | "print(sum(a)/len(a)) # 평균값(mean) 구하기\n", 580 | "\n" 581 | ] 582 | }, 583 | { 584 | "cell_type": "markdown", 585 | "metadata": { 586 | "colab_type": "text", 587 | "id": "pDU12qbSNplm" 588 | }, 589 | "source": [ 590 | "# range() 사용법\n", 591 | "* range(숫자1) - 끝. 시작은 0.\n", 592 | "* range(숫자1, 숫자2) - 시작, 끝.\n", 593 | "* range(숫자1, 숫자2, 숫자3) - 시작, 끝, 스텝.\n", 594 | "* 주의할 점: 끝숫자는 포함하지 않는다. 끝 직전까지만. " 595 | ] 596 | }, 597 | { 598 | "cell_type": "code", 599 | "execution_count": 20, 600 | "metadata": { 601 | "colab": { 602 | "base_uri": "https://localhost:8080/", 603 | "height": 67 604 | }, 605 | "colab_type": "code", 606 | "id": "vuOO8o4RJMRS", 607 | "outputId": "8f132424-ab87-4878-fa61-293b2ff9d09c" 608 | }, 609 | "outputs": [ 610 | { 611 | "name": "stdout", 612 | "output_type": "stream", 613 | "text": [ 614 | "[0, 1, 2, 3, 4]\n", 615 | "[1, 2, 3, 4]\n", 616 | "[1, 3]\n" 617 | ] 618 | } 619 | ], 620 | "source": [ 621 | "print(list(range(5)))\n", 622 | "print(list(range(1, 5)))\n", 623 | "print(list(range(1, 5, 2)))" 624 | ] 625 | }, 626 | { 627 | "cell_type": "code", 628 | "execution_count": 21, 629 | "metadata": { 630 | "colab": { 631 | "base_uri": "https://localhost:8080/", 632 | "height": 34 633 | }, 634 | "colab_type": "code", 635 | "id": "e2qxBPK_OO8a", 636 | "outputId": "65180d35-7a0c-42fe-d7d1-e2ebae2f3236" 637 | }, 638 | "outputs": [ 639 | { 640 | "name": "stdout", 641 | "output_type": "stream", 642 | "text": [ 643 | "[1, 3, 5]\n" 644 | ] 645 | } 646 | ], 647 | "source": [ 648 | "# range(숫자1, 숫자2, 숫자3) - 시작, 끝, 스텝.\n", 649 | "# 주의할 점: 끝숫자는 포함하지 않는다. 끝 직전까지만. \n", 650 | "print(list(range(1, 6, 2)))" 651 | ] 652 | }, 653 | { 654 | "cell_type": "markdown", 655 | "metadata": { 656 | "colab": {}, 657 | "colab_type": "code", 658 | "id": "pO4QklH3f3uy" 659 | }, 660 | "source": [ 661 | "# 반복하기 == 루프, for 루프" 662 | ] 663 | }, 664 | { 665 | "cell_type": "code", 666 | "execution_count": 22, 667 | "metadata": {}, 668 | "outputs": [ 669 | { 670 | "name": "stdout", 671 | "output_type": "stream", 672 | "text": [ 673 | "0 Love\n", 674 | "1 Love\n", 675 | "2 Love\n", 676 | "3 Love\n", 677 | "4 Love\n" 678 | ] 679 | } 680 | ], 681 | "source": [ 682 | "for i in range(5): # for 루프\n", 683 | " print(i, 'Love') # for 라인 다음 라인 시작할 때 공백 2개 이상 주어야 함." 684 | ] 685 | }, 686 | { 687 | "cell_type": "markdown", 688 | "metadata": { 689 | "colab": {}, 690 | "colab_type": "code", 691 | "id": "Aj_KU226f31G" 692 | }, 693 | "source": [ 694 | "# 문자열(string) 관련 함수" 695 | ] 696 | }, 697 | { 698 | "cell_type": "code", 699 | "execution_count": 23, 700 | "metadata": {}, 701 | "outputs": [], 702 | "source": [ 703 | "s1 = 'aaa bbb ccc'\n", 704 | "s2 = 'AAA,BBB,CCC'" 705 | ] 706 | }, 707 | { 708 | "cell_type": "code", 709 | "execution_count": 24, 710 | "metadata": {}, 711 | "outputs": [ 712 | { 713 | "data": { 714 | "text/plain": [ 715 | "['aaa', 'bbb', 'ccc']" 716 | ] 717 | }, 718 | "execution_count": 24, 719 | "metadata": {}, 720 | "output_type": "execute_result" 721 | } 722 | ], 723 | "source": [ 724 | "# split() 기본적(디폴트)으로 공백으로 분리하여, 분리된 문자열들의 list를 만든다.\n", 725 | "s1.split() " 726 | ] 727 | }, 728 | { 729 | "cell_type": "code", 730 | "execution_count": 25, 731 | "metadata": {}, 732 | "outputs": [ 733 | { 734 | "data": { 735 | "text/plain": [ 736 | "['AAA,BBB,CCC']" 737 | ] 738 | }, 739 | "execution_count": 25, 740 | "metadata": {}, 741 | "output_type": "execute_result" 742 | } 743 | ], 744 | "source": [ 745 | "s2.split() # s2는 공백이 없으므로 전체가 한 개" 746 | ] 747 | }, 748 | { 749 | "cell_type": "code", 750 | "execution_count": 26, 751 | "metadata": {}, 752 | "outputs": [ 753 | { 754 | "data": { 755 | "text/plain": [ 756 | "['AAA', 'BBB', 'CCC']" 757 | ] 758 | }, 759 | "execution_count": 26, 760 | "metadata": {}, 761 | "output_type": "execute_result" 762 | } 763 | ], 764 | "source": [ 765 | "s2.split(',') # s2를 콤마로 분리" 766 | ] 767 | }, 768 | { 769 | "cell_type": "code", 770 | "execution_count": 27, 771 | "metadata": {}, 772 | "outputs": [ 773 | { 774 | "name": "stdout", 775 | "output_type": "stream", 776 | "text": [ 777 | "aaa bbb ccc vs AAA BBB CCC\n", 778 | "AAA,BBB,CCC vs aaa,bbb,ccc\n" 779 | ] 780 | } 781 | ], 782 | "source": [ 783 | "# 대소문자로 변환\n", 784 | "print(s1, 'vs', s1.upper())\n", 785 | "print(s2, 'vs', s2.lower())" 786 | ] 787 | }, 788 | { 789 | "cell_type": "code", 790 | "execution_count": 28, 791 | "metadata": {}, 792 | "outputs": [ 793 | { 794 | "data": { 795 | "text/plain": [ 796 | "True" 797 | ] 798 | }, 799 | "execution_count": 28, 800 | "metadata": {}, 801 | "output_type": "execute_result" 802 | } 803 | ], 804 | "source": [ 805 | "# 'ccc'로 끝나는가? - True/False 값\n", 806 | "s1.endswith('ccc')" 807 | ] 808 | }, 809 | { 810 | "cell_type": "code", 811 | "execution_count": 29, 812 | "metadata": {}, 813 | "outputs": [ 814 | { 815 | "data": { 816 | "text/plain": [ 817 | "False" 818 | ] 819 | }, 820 | "execution_count": 29, 821 | "metadata": {}, 822 | "output_type": "execute_result" 823 | } 824 | ], 825 | "source": [ 826 | "# 'ccc'로 시작하는가? - True/False 값\n", 827 | "s2.startswith('ccc')" 828 | ] 829 | }, 830 | { 831 | "cell_type": "code", 832 | "execution_count": null, 833 | "metadata": {}, 834 | "outputs": [], 835 | "source": [] 836 | } 837 | ], 838 | "metadata": { 839 | "colab": { 840 | "collapsed_sections": [], 841 | "name": "0.python_basic.ipynb", 842 | "provenance": [], 843 | "version": "0.3.2" 844 | }, 845 | "kernelspec": { 846 | "display_name": "Python 3", 847 | "language": "python", 848 | "name": "python3" 849 | }, 850 | "language_info": { 851 | "codemirror_mode": { 852 | "name": "ipython", 853 | "version": 3 854 | }, 855 | "file_extension": ".py", 856 | "mimetype": "text/x-python", 857 | "name": "python", 858 | "nbconvert_exporter": "python", 859 | "pygments_lexer": "ipython3", 860 | "version": "3.7.3" 861 | }, 862 | "toc": { 863 | "base_numbering": 1, 864 | "nav_menu": {}, 865 | "number_sections": true, 866 | "sideBar": true, 867 | "skip_h1_title": false, 868 | "title_cell": "Table of Contents", 869 | "title_sidebar": "Contents", 870 | "toc_cell": false, 871 | "toc_position": {}, 872 | "toc_section_display": true, 873 | "toc_window_display": false 874 | } 875 | }, 876 | "nbformat": 4, 877 | "nbformat_minor": 1 878 | } 879 | -------------------------------------------------------------------------------- /1.python기본/mycampus_python101_#2_string.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "hH4LfqPIIn9N" 8 | }, 9 | "source": [ 10 | "# 딥러닝 프로그래밍 빠르게 배우기 (마이캠퍼스)\n", 11 | "## https://pg.mycampus.io/?idx=97\n", 12 | "\n", 13 | "* 질문/문의: 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255\n", 14 | "\n", 15 | "## 이 파일의 목차 \n", 16 | "* split()\n", 17 | "* startswith()\n", 18 | "* endswith()\n", 19 | "* join()\n" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": { 25 | "colab": {}, 26 | "colab_type": "code", 27 | "id": "Aj_KU226f31G" 28 | }, 29 | "source": [ 30 | "# 문자열(string) split()" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 12, 36 | "metadata": {}, 37 | "outputs": [], 38 | "source": [ 39 | "s1 = 'aaa bbb ccc'\n", 40 | "s2 = 'AAA,BBB,CCC'" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 13, 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "data": { 50 | "text/plain": [ 51 | "['aaa', 'bbb', 'ccc']" 52 | ] 53 | }, 54 | "execution_count": 13, 55 | "metadata": {}, 56 | "output_type": "execute_result" 57 | } 58 | ], 59 | "source": [ 60 | "# split() 기본적(디폴트)으로 공백으로 분리하여, 분리된 문자열들의 list를 만든다.\n", 61 | "s1.split() " 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 14, 67 | "metadata": {}, 68 | "outputs": [ 69 | { 70 | "data": { 71 | "text/plain": [ 72 | "['AAA,BBB,CCC']" 73 | ] 74 | }, 75 | "execution_count": 14, 76 | "metadata": {}, 77 | "output_type": "execute_result" 78 | } 79 | ], 80 | "source": [ 81 | "s2.split() # s2는 공백이 없으므로 전체가 한 개" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 15, 87 | "metadata": {}, 88 | "outputs": [ 89 | { 90 | "data": { 91 | "text/plain": [ 92 | "['AAA', 'BBB', 'CCC']" 93 | ] 94 | }, 95 | "execution_count": 15, 96 | "metadata": {}, 97 | "output_type": "execute_result" 98 | } 99 | ], 100 | "source": [ 101 | "s2.split(',') # s2를 콤마로 분리" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 16, 107 | "metadata": {}, 108 | "outputs": [ 109 | { 110 | "name": "stdout", 111 | "output_type": "stream", 112 | "text": [ 113 | "aaa bbb ccc vs AAA BBB CCC\n", 114 | "AAA,BBB,CCC vs aaa,bbb,ccc\n" 115 | ] 116 | } 117 | ], 118 | "source": [ 119 | "# 대소문자로 변환\n", 120 | "print(s1, 'vs', s1.upper())\n", 121 | "print(s2, 'vs', s2.lower())" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 17, 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "data": { 131 | "text/plain": [ 132 | "True" 133 | ] 134 | }, 135 | "execution_count": 17, 136 | "metadata": {}, 137 | "output_type": "execute_result" 138 | } 139 | ], 140 | "source": [ 141 | "# 'ccc'로 끝나는가? - True/False 값\n", 142 | "s1.endswith('ccc')" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 18, 148 | "metadata": {}, 149 | "outputs": [ 150 | { 151 | "data": { 152 | "text/plain": [ 153 | "False" 154 | ] 155 | }, 156 | "execution_count": 18, 157 | "metadata": {}, 158 | "output_type": "execute_result" 159 | } 160 | ], 161 | "source": [ 162 | "# 'ccc'로 시작하는가? - True/False 값\n", 163 | "s2.startswith('ccc')" 164 | ] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "metadata": {}, 169 | "source": [ 170 | "# join()\n", 171 | "* 여러 문자열을 '-'로 연결하여 하나의 문자열로 만들기\n", 172 | "* '-'.join(list_of_string)" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 19, 178 | "metadata": {}, 179 | "outputs": [ 180 | { 181 | "name": "stdout", 182 | "output_type": "stream", 183 | "text": [ 184 | "['abc', 'def', 'ghi']\n" 185 | ] 186 | } 187 | ], 188 | "source": [ 189 | "s = 'abc,def,ghi'\n", 190 | "flds = s.split(',')\n", 191 | "print(flds)" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": 20, 197 | "metadata": {}, 198 | "outputs": [ 199 | { 200 | "name": "stdout", 201 | "output_type": "stream", 202 | "text": [ 203 | "abc-def-ghi\n" 204 | ] 205 | } 206 | ], 207 | "source": [ 208 | "s1 = '-'.join(flds)\n", 209 | "print(s1)\n" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": 21, 215 | "metadata": {}, 216 | "outputs": [ 217 | { 218 | "name": "stdout", 219 | "output_type": "stream", 220 | "text": [ 221 | "abc:def:ghi\n" 222 | ] 223 | } 224 | ], 225 | "source": [ 226 | "s1 = ':'.join(flds)\n", 227 | "print(s1)" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": 22, 233 | "metadata": {}, 234 | "outputs": [ 235 | { 236 | "name": "stdout", 237 | "output_type": "stream", 238 | "text": [ 239 | "3.12\n", 240 | "3.123\n" 241 | ] 242 | } 243 | ], 244 | "source": [ 245 | "a = 3.1234\n", 246 | "print('%.2f' % a) # 소숫점 2자리까지만 출력\n", 247 | "print('%.3f' % a) # 소숫점 3자리까지만 출력" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 23, 253 | "metadata": {}, 254 | "outputs": [ 255 | { 256 | "name": "stdout", 257 | "output_type": "stream", 258 | "text": [ 259 | "1.23, 5.33, 6.23\n" 260 | ] 261 | } 262 | ], 263 | "source": [ 264 | "# 여러 숫자를 소수점 2자리까지만 출력하게\n", 265 | "vlist = [1.234, 5.332342, 6.234324]\n", 266 | "p = ['%.2f' % v for v in vlist]\n", 267 | "s = ', '.join(p)\n", 268 | "print(s)" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "execution_count": 24, 274 | "metadata": {}, 275 | "outputs": [ 276 | { 277 | "name": "stdout", 278 | "output_type": "stream", 279 | "text": [ 280 | "1.23; 5.33; 6.23\n" 281 | ] 282 | } 283 | ], 284 | "source": [ 285 | "s = '; '.join(p)\n", 286 | "print(s)" 287 | ] 288 | }, 289 | { 290 | "cell_type": "code", 291 | "execution_count": null, 292 | "metadata": {}, 293 | "outputs": [], 294 | "source": [] 295 | } 296 | ], 297 | "metadata": { 298 | "colab": { 299 | "collapsed_sections": [], 300 | "name": "0.python_basic.ipynb", 301 | "provenance": [], 302 | "version": "0.3.2" 303 | }, 304 | "kernelspec": { 305 | "display_name": "Python 3", 306 | "language": "python", 307 | "name": "python3" 308 | }, 309 | "language_info": { 310 | "codemirror_mode": { 311 | "name": "ipython", 312 | "version": 3 313 | }, 314 | "file_extension": ".py", 315 | "mimetype": "text/x-python", 316 | "name": "python", 317 | "nbconvert_exporter": "python", 318 | "pygments_lexer": "ipython3", 319 | "version": "3.7.3" 320 | }, 321 | "toc": { 322 | "base_numbering": 1, 323 | "nav_menu": {}, 324 | "number_sections": true, 325 | "sideBar": true, 326 | "skip_h1_title": false, 327 | "title_cell": "Table of Contents", 328 | "title_sidebar": "Contents", 329 | "toc_cell": false, 330 | "toc_position": {}, 331 | "toc_section_display": true, 332 | "toc_window_display": false 333 | } 334 | }, 335 | "nbformat": 4, 336 | "nbformat_minor": 1 337 | } 338 | -------------------------------------------------------------------------------- /1.python기본/mycampus_python101_#3_function.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 딥러닝 프로그래밍 빠르게 배우기 (마이캠퍼스)\n", 8 | "## https://pg.mycampus.io/?idx=97\n", 9 | "\n", 10 | "* 질문/문의: 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": {}, 16 | "source": [ 17 | "## 이 파일의 목차 \n", 18 | "* function\n", 19 | "* lambda\n", 20 | "* unpacking" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "metadata": {}, 26 | "source": [ 27 | "# int(), float(), list(), dict() -- 클래스 객체의 기본값" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 1, 33 | "metadata": {}, 34 | "outputs": [ 35 | { 36 | "data": { 37 | "text/plain": [ 38 | "0.0" 39 | ] 40 | }, 41 | "execution_count": 1, 42 | "metadata": {}, 43 | "output_type": "execute_result" 44 | } 45 | ], 46 | "source": [ 47 | "float()" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 2, 53 | "metadata": {}, 54 | "outputs": [ 55 | { 56 | "data": { 57 | "text/plain": [ 58 | "0" 59 | ] 60 | }, 61 | "execution_count": 2, 62 | "metadata": {}, 63 | "output_type": "execute_result" 64 | } 65 | ], 66 | "source": [ 67 | "int()" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "[]" 79 | ] 80 | }, 81 | "execution_count": 3, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "list( )" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 4, 93 | "metadata": {}, 94 | "outputs": [ 95 | { 96 | "data": { 97 | "text/plain": [ 98 | "{}" 99 | ] 100 | }, 101 | "execution_count": 4, 102 | "metadata": {}, 103 | "output_type": "execute_result" 104 | } 105 | ], 106 | "source": [ 107 | "dict()" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "metadata": {}, 113 | "source": [ 114 | "# 함수 정의 \n", 115 | "* def 이용\n", 116 | "* lambda 이용" 117 | ] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "## def 이용하여 함수 정의" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 5, 129 | "metadata": {}, 130 | "outputs": [ 131 | { 132 | "name": "stdout", 133 | "output_type": "stream", 134 | "text": [ 135 | "81\n" 136 | ] 137 | } 138 | ], 139 | "source": [ 140 | "def square(x):\n", 141 | " return x*x\n", 142 | "\n", 143 | "print(square(9))" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 6, 149 | "metadata": {}, 150 | "outputs": [ 151 | { 152 | "name": "stdout", 153 | "output_type": "stream", 154 | "text": [ 155 | "[1, 4, 9, 25, 100]\n" 156 | ] 157 | } 158 | ], 159 | "source": [ 160 | "a = [1,2,3,5,10]\n", 161 | "b = list(map(square, a))\n", 162 | "print(b)" 163 | ] 164 | }, 165 | { 166 | "cell_type": "markdown", 167 | "metadata": {}, 168 | "source": [ 169 | "## lambda 로 익명 함수 정의: anonymous\n", 170 | "* inline, anonymous function ===> lambda\n" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 7, 176 | "metadata": {}, 177 | "outputs": [ 178 | { 179 | "name": "stdout", 180 | "output_type": "stream", 181 | "text": [ 182 | "square of 5 = 25\n", 183 | "square of 10 = 100\n" 184 | ] 185 | } 186 | ], 187 | "source": [ 188 | "myfunc = lambda x: x*x\n", 189 | "print('square of 5 =', myfunc(5))\n", 190 | "print('square of 10 =', myfunc(10))" 191 | ] 192 | }, 193 | { 194 | "cell_type": "markdown", 195 | "metadata": {}, 196 | "source": [ 197 | "## lambda 활용" 198 | ] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "execution_count": 8, 203 | "metadata": {}, 204 | "outputs": [ 205 | { 206 | "name": "stdout", 207 | "output_type": "stream", 208 | "text": [ 209 | "[1, 4, 9, 25, 100]\n", 210 | "[5, 10]\n" 211 | ] 212 | } 213 | ], 214 | "source": [ 215 | "# inline, anonymous function ===> lambda\n", 216 | "a = [1,2,3,5,10]\n", 217 | "b = list(map(lambda x: x*x, a))\n", 218 | "print(b)\n", 219 | "\n", 220 | "\n", 221 | "# 조건을 지정하기. 20보다 큰 것만 필터링\n", 222 | "b = list(filter(lambda y: y > 3, a))\n", 223 | "print(b)\n", 224 | "\n" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 9, 230 | "metadata": {}, 231 | "outputs": [ 232 | { 233 | "name": "stdout", 234 | "output_type": "stream", 235 | "text": [ 236 | "{}\n", 237 | "[]\n" 238 | ] 239 | } 240 | ], 241 | "source": [ 242 | "# 함수를 인자(파라미터)로 받아서 실행하기\n", 243 | "def exec_func(f): # f는 주어진 함수, 또는 클래스\n", 244 | " res = f()\n", 245 | " print(res)\n", 246 | "\n", 247 | "exec_func(dict)\n", 248 | "exec_func(list)" 249 | ] 250 | }, 251 | { 252 | "cell_type": "markdown", 253 | "metadata": {}, 254 | "source": [ 255 | "## 함수에서 여러 값을 리턴(return)하기가 가능하다. 리턴값은 tuple" 256 | ] 257 | }, 258 | { 259 | "cell_type": "code", 260 | "execution_count": 10, 261 | "metadata": {}, 262 | "outputs": [ 263 | { 264 | "name": "stdout", 265 | "output_type": "stream", 266 | "text": [ 267 | "(17, 70)\n", 268 | "a[0] 17\n", 269 | "a[1] 70\n" 270 | ] 271 | } 272 | ], 273 | "source": [ 274 | "# python 에서는 여러값을 리턴할 수 있다.\n", 275 | "# 여러값을 콤마(,)로 구분하며, 이 여러값은 하나의 튜플(tuple)이 된다.\n", 276 | "def sum_mul(x,y): # 덧셈과 곱셈을 한 번에 해주는 함수\n", 277 | " return x+y, x*y\n", 278 | "\n", 279 | "a = sum_mul(10,7)\n", 280 | "print(a)\n", 281 | "print('a[0]', a[0])\n", 282 | "print('a[1]', a[1])" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": 11, 288 | "metadata": {}, 289 | "outputs": [ 290 | { 291 | "name": "stdout", 292 | "output_type": "stream", 293 | "text": [ 294 | "17\n", 295 | "70\n" 296 | ] 297 | } 298 | ], 299 | "source": [ 300 | "s, m = sum_mul(10,7) # 리턴값을 unpacking\n", 301 | "print(s)\n", 302 | "print(m)" 303 | ] 304 | }, 305 | { 306 | "cell_type": "markdown", 307 | "metadata": {}, 308 | "source": [ 309 | "# unpacking\n", 310 | "* tuple, list 데이터를 원소(element)의 개수만큼 분리하는 것 !" 311 | ] 312 | }, 313 | { 314 | "cell_type": "code", 315 | "execution_count": 12, 316 | "metadata": {}, 317 | "outputs": [ 318 | { 319 | "name": "stdout", 320 | "output_type": "stream", 321 | "text": [ 322 | "2 1\n" 323 | ] 324 | } 325 | ], 326 | "source": [ 327 | "x, y = 1, 2 # now x is 1, y is 2\n", 328 | "x, y = y, x\n", 329 | "print (x, y)" 330 | ] 331 | }, 332 | { 333 | "cell_type": "code", 334 | "execution_count": 13, 335 | "metadata": {}, 336 | "outputs": [ 337 | { 338 | "name": "stdout", 339 | "output_type": "stream", 340 | "text": [ 341 | "x= 10 y= 20\n" 342 | ] 343 | } 344 | ], 345 | "source": [ 346 | "pos = (10, 20)\n", 347 | "# 이것이 unpacking. pos는 하나의 값(튜플). 이것이 x, y로 분리\n", 348 | "x, y = pos \n", 349 | "print('x=', x, 'y=', y)" 350 | ] 351 | }, 352 | { 353 | "cell_type": "code", 354 | "execution_count": 14, 355 | "metadata": {}, 356 | "outputs": [ 357 | { 358 | "name": "stdout", 359 | "output_type": "stream", 360 | "text": [ 361 | "x= 10 y= 20 z= 30\n" 362 | ] 363 | } 364 | ], 365 | "source": [ 366 | "pos = (10, 20,30)\n", 367 | "x, y, z = pos\n", 368 | "print('x=', x, 'y=', y, 'z=', z)" 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "execution_count": 15, 374 | "metadata": {}, 375 | "outputs": [ 376 | { 377 | "name": "stdout", 378 | "output_type": "stream", 379 | "text": [ 380 | "x= 100 y= 200 z= 300\n" 381 | ] 382 | } 383 | ], 384 | "source": [ 385 | "data = [100, 200, 300]\n", 386 | "# 이것이 unpacking. data는 하나의 값(리스트). 이것이 x, y, z로 분리\n", 387 | "x, y, z = data\n", 388 | "print('x=', x, 'y=', y, 'z=', z)" 389 | ] 390 | } 391 | ], 392 | "metadata": { 393 | "kernelspec": { 394 | "display_name": "Python 3", 395 | "language": "python", 396 | "name": "python3" 397 | }, 398 | "language_info": { 399 | "codemirror_mode": { 400 | "name": "ipython", 401 | "version": 3 402 | }, 403 | "file_extension": ".py", 404 | "mimetype": "text/x-python", 405 | "name": "python", 406 | "nbconvert_exporter": "python", 407 | "pygments_lexer": "ipython3", 408 | "version": "3.7.3" 409 | }, 410 | "toc": { 411 | "base_numbering": 1, 412 | "nav_menu": {}, 413 | "number_sections": true, 414 | "sideBar": true, 415 | "skip_h1_title": false, 416 | "title_cell": "Table of Contents", 417 | "title_sidebar": "Contents", 418 | "toc_cell": false, 419 | "toc_position": {}, 420 | "toc_section_display": true, 421 | "toc_window_display": false 422 | } 423 | }, 424 | "nbformat": 4, 425 | "nbformat_minor": 1 426 | } 427 | -------------------------------------------------------------------------------- /1.python기본/mycampus_python101_#4_list_comprehension.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 딥러닝 프로그래밍 빠르게 배우기 (마이캠퍼스)\n", 8 | "## https://pg.mycampus.io/?idx=97\n", 9 | "\n", 10 | "* 질문/문의: 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255\n", 11 | "\n", 12 | "## 목차: list comprehension - 이것을 알아야 진짜 파이썬이죠 :)\n", 13 | "* sort(), sorted()\n", 14 | "* zip()\n", 15 | "* enumerate()\n", 16 | "* list comprehension " 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": {}, 22 | "source": [ 23 | "# sort(), sorted() 차이" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 2, 29 | "metadata": {}, 30 | "outputs": [ 31 | { 32 | "name": "stdout", 33 | "output_type": "stream", 34 | "text": [ 35 | "[2, 5, 6, 9]\n" 36 | ] 37 | } 38 | ], 39 | "source": [ 40 | "a = [9,5,6,2]\n", 41 | "a.sort() # a의 내용 자체가 소팅된다.\n", 42 | "print(a)" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": 7, 48 | "metadata": {}, 49 | "outputs": [ 50 | { 51 | "name": "stdout", 52 | "output_type": "stream", 53 | "text": [ 54 | "[9, 5, 6, 2]\n" 55 | ] 56 | } 57 | ], 58 | "source": [ 59 | "b = [9,5,6,2]\n", 60 | "sorted(b)\n", 61 | "print(b) # 헐, b는 변하지 않았다. 왜 ?" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 8, 67 | "metadata": {}, 68 | "outputs": [ 69 | { 70 | "name": "stdout", 71 | "output_type": "stream", 72 | "text": [ 73 | "[2, 5, 6, 9]\n" 74 | ] 75 | } 76 | ], 77 | "source": [ 78 | "c = sorted(b)\n", 79 | "print(c)\n", 80 | "# sorted()의 결과를 변수로 저장해야지만 된다." 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": {}, 86 | "source": [ 87 | "# zip()" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 17, 93 | "metadata": {}, 94 | "outputs": [ 95 | { 96 | "data": { 97 | "text/plain": [ 98 | "[(1, 4), (2, 5), (3, 6)]" 99 | ] 100 | }, 101 | "execution_count": 17, 102 | "metadata": {}, 103 | "output_type": "execute_result" 104 | } 105 | ], 106 | "source": [ 107 | "a=[1,2,3]\n", 108 | "b=[4,5,6]\n", 109 | "list(zip(a, b))" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 18, 115 | "metadata": {}, 116 | "outputs": [ 117 | { 118 | "name": "stdout", 119 | "output_type": "stream", 120 | "text": [ 121 | "1 4\n", 122 | "2 5\n", 123 | "3 6\n" 124 | ] 125 | } 126 | ], 127 | "source": [ 128 | "for x,y in zip(a,b): \n", 129 | " print(x,y)" 130 | ] 131 | }, 132 | { 133 | "attachments": {}, 134 | "cell_type": "markdown", 135 | "metadata": {}, 136 | "source": [ 137 | "# enumerate()" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": 22, 143 | "metadata": {}, 144 | "outputs": [ 145 | { 146 | "name": "stdout", 147 | "output_type": "stream", 148 | "text": [ 149 | "4\n", 150 | "5\n", 151 | "6\n" 152 | ] 153 | } 154 | ], 155 | "source": [ 156 | "xlist = [4,5,6]\n", 157 | "for x in xlist: \n", 158 | " print(x)" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": 24, 164 | "metadata": {}, 165 | "outputs": [ 166 | { 167 | "name": "stdout", 168 | "output_type": "stream", 169 | "text": [ 170 | "[0] 4\n", 171 | "[1] 5\n", 172 | "[2] 6\n" 173 | ] 174 | } 175 | ], 176 | "source": [ 177 | "xlist = [4,5,6]\n", 178 | "i = 0\n", 179 | "for x in xlist: \n", 180 | " print('[%d]'% i, x) # 번호를 매기고 싶다\n", 181 | " i = i + 1" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": 25, 187 | "metadata": {}, 188 | "outputs": [ 189 | { 190 | "name": "stdout", 191 | "output_type": "stream", 192 | "text": [ 193 | "[00] 4\n", 194 | "[01] 5\n", 195 | "[02] 6\n" 196 | ] 197 | } 198 | ], 199 | "source": [ 200 | "xlist = [4,5,6]\n", 201 | "# 번호를 매기기를 간단하게 구현\n", 202 | "for i, x in enumerate(xlist): \n", 203 | " print('[%02d] %d' % (i, x))" 204 | ] 205 | }, 206 | { 207 | "cell_type": "markdown", 208 | "metadata": {}, 209 | "source": [ 210 | "# list comprehension\n", 211 | "* list comprehension : list 안에 for loop를 이용하여 새로운 list를 만드는 것" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": 9, 217 | "metadata": {}, 218 | "outputs": [ 219 | { 220 | "name": "stdout", 221 | "output_type": "stream", 222 | "text": [ 223 | "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]\n" 224 | ] 225 | } 226 | ], 227 | "source": [ 228 | "a = [ x*x for x in range(10)]\n", 229 | "print(a)" 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": 11, 235 | "metadata": {}, 236 | "outputs": [ 237 | { 238 | "name": "stdout", 239 | "output_type": "stream", 240 | "text": [ 241 | "[1, 81, 625, 2401, 6561]\n" 242 | ] 243 | } 244 | ], 245 | "source": [ 246 | "# 끝에 if 문을 넣어서 필터링도 가능하다\n", 247 | "b = [ x*x for x in a if x%2 == 1] # 홀수만\n", 248 | "print(b)" 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "execution_count": 12, 254 | "metadata": {}, 255 | "outputs": [ 256 | { 257 | "name": "stdout", 258 | "output_type": "stream", 259 | "text": [ 260 | "[0, 16, 256, 1296, 4096]\n" 261 | ] 262 | } 263 | ], 264 | "source": [ 265 | "c = [ x*x for x in a if x%2 == 0] # 짝수만\n", 266 | "print(c)" 267 | ] 268 | }, 269 | { 270 | "cell_type": "markdown", 271 | "metadata": {}, 272 | "source": [ 273 | "## 1차 함수 식으로 데이터를 생성해보자" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 16, 279 | "metadata": {}, 280 | "outputs": [ 281 | { 282 | "name": "stdout", 283 | "output_type": "stream", 284 | "text": [ 285 | "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]\n", 286 | "[1, 5, 9, 13, 17, 21, 25, 29, 33, 37]\n" 287 | ] 288 | } 289 | ], 290 | "source": [ 291 | "X = [i*2 for i in range(10)] \n", 292 | "Y = [x*2 + 1 for x in X]\n", 293 | "print(X)\n", 294 | "print(Y)" 295 | ] 296 | }, 297 | { 298 | "cell_type": "code", 299 | "execution_count": null, 300 | "metadata": {}, 301 | "outputs": [], 302 | "source": [] 303 | } 304 | ], 305 | "metadata": { 306 | "kernelspec": { 307 | "display_name": "Python 3", 308 | "language": "python", 309 | "name": "python3" 310 | }, 311 | "language_info": { 312 | "codemirror_mode": { 313 | "name": "ipython", 314 | "version": 3 315 | }, 316 | "file_extension": ".py", 317 | "mimetype": "text/x-python", 318 | "name": "python", 319 | "nbconvert_exporter": "python", 320 | "pygments_lexer": "ipython3", 321 | "version": "3.7.3" 322 | }, 323 | "toc": { 324 | "base_numbering": 1, 325 | "nav_menu": {}, 326 | "number_sections": true, 327 | "sideBar": true, 328 | "skip_h1_title": false, 329 | "title_cell": "Table of Contents", 330 | "title_sidebar": "Contents", 331 | "toc_cell": false, 332 | "toc_position": {}, 333 | "toc_section_display": true, 334 | "toc_window_display": false 335 | } 336 | }, 337 | "nbformat": 4, 338 | "nbformat_minor": 2 339 | } 340 | -------------------------------------------------------------------------------- /1.python기본/mycampus_python101_#5_class_intro.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 딥러닝 프로그래밍 빠르게 배우기 (마이캠퍼스)\n", 8 | "## https://pg.mycampus.io/?idx=97\n", 9 | "\n", 10 | "* 질문/문의: 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255\n", 11 | "\n", 12 | "## 클래스 개념 배우기" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "### list, int, float 도 클래스이다\n", 20 | "list(), int(), float()를 실행하면 각 클래스의 객체가 생성되는 것이다." 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 2, 26 | "metadata": {}, 27 | "outputs": [ 28 | { 29 | "name": "stdout", 30 | "output_type": "stream", 31 | "text": [ 32 | "A1: 77 A2: 77 A3: 0\n" 33 | ] 34 | } 35 | ], 36 | "source": [ 37 | "# int 클래스의 객체 만드는 방법\n", 38 | "A1 = 77\n", 39 | "A2 = int('77')\n", 40 | "A3 = int() # 빈칸 - 디폴트값 0 (zero)가 된다\n", 41 | "print('A1:', A1, 'A2:', A2, 'A3:', A3)" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 3, 47 | "metadata": {}, 48 | "outputs": [ 49 | { 50 | "name": "stdout", 51 | "output_type": "stream", 52 | "text": [ 53 | "A1: 3.4 A2: 3.4 A3: 0.0\n" 54 | ] 55 | } 56 | ], 57 | "source": [ 58 | "# float 클래스의 객체 만드는 방법\n", 59 | "A1 = 3.4\n", 60 | "A2 = float('3.4')\n", 61 | "A3 = float()\n", 62 | "print('A1:', A1, 'A2:', A2, 'A3:', A3)" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 4, 68 | "metadata": {}, 69 | "outputs": [ 70 | { 71 | "name": "stdout", 72 | "output_type": "stream", 73 | "text": [ 74 | "A1: [0, 1, 2, 3] A2: [0, 1, 2, 3] A3: []\n" 75 | ] 76 | } 77 | ], 78 | "source": [ 79 | "# list 클래스의 객체 만드는 방법\n", 80 | "A1 = [0,1,2,3]\n", 81 | "A2 = list(range(4))\n", 82 | "A3 = list()\n", 83 | "print('A1:', A1, 'A2:', A2, 'A3:', A3)" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "### 클래스(class), 객체(object) 의미\n", 91 | "* A: 이번에 새로 나온 소나타가 연비가 좋아졌대.\n", 92 | "* B: 오, 그래!\n", 93 | "* A: 근데, 우리 옆집 아저씨가 새 소나타를 주차장에서 긁었데~ 헐~\n", 94 | "\n", 95 | "여기서 '새로 나온 소나타'는 소나타 라는 차종으로 클래스(class)에 해당.\n", 96 | "\n", 97 | "'옆집 아저씨 소나타'는 소나타 라는 차종 중에 아저씨가 소유한 실제 차량으로 객체(object)에 해당.\n", 98 | "\n", 99 | "객체는 클래스의 instance(사례) 라고 한다. \n" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "### 나의 클래스 만들기" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 5, 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "name": "stdout", 116 | "output_type": "stream", 117 | "text": [ 118 | "No name\n" 119 | ] 120 | } 121 | ], 122 | "source": [ 123 | "class Car(object):\n", 124 | " def __init__(self):\n", 125 | " self.name = 'No name'\n", 126 | "\n", 127 | " def hasWing(self): # 날개가 있니?\n", 128 | " return False\n", 129 | " \n", 130 | " def maxSpeed(self):\n", 131 | " return 'Unknown'\n", 132 | " \n", 133 | " def prn(self):\n", 134 | " print(self.name)\n", 135 | " \n", 136 | "c1 = Car() # construct\n", 137 | "c1.prn()\n", 138 | "\n", 139 | "\n" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 6, 145 | "metadata": {}, 146 | "outputs": [ 147 | { 148 | "name": "stdout", 149 | "output_type": "stream", 150 | "text": [ 151 | "내 이름은 Sonata\n" 152 | ] 153 | } 154 | ], 155 | "source": [ 156 | "class Sonata(Car):\n", 157 | " def __init__(self):\n", 158 | " self.name = 'Sonata'\n", 159 | " \n", 160 | " def prn(self): # 새로 정의. overriding\n", 161 | " print('내 이름은', self.name)\n", 162 | " \n", 163 | " def maxSpeed(self):\n", 164 | " return 160 \n", 165 | "\n", 166 | "s1 = Sonata()\n", 167 | "s1.prn()" 168 | ] 169 | }, 170 | { 171 | "cell_type": "code", 172 | "execution_count": 7, 173 | "metadata": {}, 174 | "outputs": [ 175 | { 176 | "name": "stdout", 177 | "output_type": "stream", 178 | "text": [ 179 | "내 이름은 붕붕\n" 180 | ] 181 | } 182 | ], 183 | "source": [ 184 | "class Boong(Car):\n", 185 | " def __init__(self):\n", 186 | " self.name = '붕붕'\n", 187 | " \n", 188 | " def prn(self): # 새로 정의. overriding\n", 189 | " print('내 이름은', self.name)\n", 190 | " \n", 191 | " def hasWing(self):\n", 192 | " return True\n", 193 | " \n", 194 | " def maxSpeed(self):\n", 195 | " return 400 \n", 196 | "\n", 197 | "b1 = Boong()\n", 198 | "b1.prn()" 199 | ] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "execution_count": 8, 204 | "metadata": {}, 205 | "outputs": [], 206 | "source": [ 207 | "class CarInspector(object):\n", 208 | " def __init__(self):\n", 209 | " self.name = '나는 검사자'\n", 210 | " def run(self, car):\n", 211 | " # car는 Car 클래스의 객체라고 가정.\n", 212 | " # run을 부르는 측에서 Car 객체를 넣어야 함.\n", 213 | " print('%s 최대속도: %s' % (car.name, car.maxSpeed() ))\n", 214 | " if car.hasWing():\n", 215 | " print('%s 는 날개가 있네요. 헐' % car.name)\n", 216 | " else:\n", 217 | " print('%s 는 날개가 없죠. 당근' % car.name)\n", 218 | " \n", 219 | " " 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": 9, 225 | "metadata": {}, 226 | "outputs": [], 227 | "source": [ 228 | "inspector = CarInspector()\n" 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "execution_count": 10, 234 | "metadata": {}, 235 | "outputs": [ 236 | { 237 | "name": "stdout", 238 | "output_type": "stream", 239 | "text": [ 240 | "No name 최대속도: Unknown\n", 241 | "No name 는 날개가 없죠. 당근\n" 242 | ] 243 | } 244 | ], 245 | "source": [ 246 | "inspector.run(c1)" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": 11, 252 | "metadata": {}, 253 | "outputs": [ 254 | { 255 | "name": "stdout", 256 | "output_type": "stream", 257 | "text": [ 258 | "Sonata 최대속도: 160\n", 259 | "Sonata 는 날개가 없죠. 당근\n" 260 | ] 261 | } 262 | ], 263 | "source": [ 264 | "inspector.run(s1)" 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": 12, 270 | "metadata": {}, 271 | "outputs": [ 272 | { 273 | "name": "stdout", 274 | "output_type": "stream", 275 | "text": [ 276 | "붕붕 최대속도: 400\n", 277 | "붕붕 는 날개가 있네요. 헐\n" 278 | ] 279 | } 280 | ], 281 | "source": [ 282 | "inspector.run(b1)" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": null, 288 | "metadata": {}, 289 | "outputs": [], 290 | "source": [] 291 | } 292 | ], 293 | "metadata": { 294 | "kernelspec": { 295 | "display_name": "Python 3", 296 | "language": "python", 297 | "name": "python3" 298 | }, 299 | "language_info": { 300 | "codemirror_mode": { 301 | "name": "ipython", 302 | "version": 3 303 | }, 304 | "file_extension": ".py", 305 | "mimetype": "text/x-python", 306 | "name": "python", 307 | "nbconvert_exporter": "python", 308 | "pygments_lexer": "ipython3", 309 | "version": "3.7.3" 310 | }, 311 | "toc": { 312 | "base_numbering": 1, 313 | "nav_menu": {}, 314 | "number_sections": true, 315 | "sideBar": true, 316 | "skip_h1_title": false, 317 | "title_cell": "Table of Contents", 318 | "title_sidebar": "Contents", 319 | "toc_cell": false, 320 | "toc_position": {}, 321 | "toc_section_display": true, 322 | "toc_window_display": false 323 | } 324 | }, 325 | "nbformat": 4, 326 | "nbformat_minor": 2 327 | } 328 | -------------------------------------------------------------------------------- /2.딥러닝준비/mycampus_python101_#6_practice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "NZgmDHVrq_kt" 8 | }, 9 | "source": [ 10 | "# 딥러닝 프로그래밍 빠르게 배우기 (마이캠퍼스)\n", 11 | "## https://pg.mycampus.io/?idx=97\n", 12 | "\n", 13 | "* 질문/문의: 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "8ttl3UezFJzJ" 21 | }, 22 | "source": [ 23 | "## 평균, 분산, 공분산 구하기\n", 24 | "* 3**2 --> 3의 2승을 의미함 --> 즉, 9가 됨.\n", 25 | "* X의 분산: (X - X평균)**2 \n", 26 | "* X, Y 공분산: (X - X평균) * (Y - Y평균)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 2, 32 | "metadata": { 33 | "colab": { 34 | "base_uri": "https://localhost:8080/", 35 | "height": 52 36 | }, 37 | "colab_type": "code", 38 | "id": "Dp0aNM3ZHhSx", 39 | "outputId": "872a798a-28ce-491f-ad63-a85a18e62836" 40 | }, 41 | "outputs": [ 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "9\n", 47 | "25\n" 48 | ] 49 | } 50 | ], 51 | "source": [ 52 | "print(3**2)\n", 53 | "a = 5\n", 54 | "print(a**2)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 0, 60 | "metadata": { 61 | "colab": {}, 62 | "colab_type": "code", 63 | "id": "ypmyqPO7FJzK" 64 | }, 65 | "outputs": [], 66 | "source": [ 67 | "import math\n", 68 | "import matplotlib.pyplot as plt\n", 69 | "\n", 70 | "X = [100,200,300,400,500] \n", 71 | "Y = [30, 57, 76, 140, 197]" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 4, 77 | "metadata": { 78 | "colab": { 79 | "base_uri": "https://localhost:8080/", 80 | "height": 104 81 | }, 82 | "colab_type": "code", 83 | "id": "oFURLSw3FJzN", 84 | "outputId": "75ecbe4d-674d-4b5c-852c-1bec48a18f2b" 85 | }, 86 | "outputs": [ 87 | { 88 | "name": "stdout", 89 | "output_type": "stream", 90 | "text": [ 91 | "100 30\n", 92 | "200 57\n", 93 | "300 76\n", 94 | "400 140\n", 95 | "500 197\n" 96 | ] 97 | } 98 | ], 99 | "source": [ 100 | "for x, y in ???(X, Y): # zip()\n", 101 | " print(x, y)" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 6, 107 | "metadata": { 108 | "colab": { 109 | "base_uri": "https://localhost:8080/", 110 | "height": 269 111 | }, 112 | "colab_type": "code", 113 | "id": "HHuWhxNqFJzS", 114 | "outputId": "6dabf1de-94a9-4066-df61-585e4d3c82fd" 115 | }, 116 | "outputs": [ 117 | { 118 | "data": { 119 | "image/png": "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\n", 120 | "text/plain": [ 121 | "
" 122 | ] 123 | }, 124 | "metadata": { 125 | "tags": [] 126 | }, 127 | "output_type": "display_data" 128 | } 129 | ], 130 | "source": [ 131 | "fig, ax = plt.subplots()\n", 132 | "ax.plot(X, Y)\n", 133 | "ax.scatter(X, Y)\n", 134 | "plt.show()" 135 | ] 136 | }, 137 | { 138 | "cell_type": "markdown", 139 | "metadata": { 140 | "colab_type": "text", 141 | "id": "LlWPb14AFJzV" 142 | }, 143 | "source": [ 144 | "### 평균 (mean) 구하기" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 8, 150 | "metadata": { 151 | "colab": { 152 | "base_uri": "https://localhost:8080/", 153 | "height": 35 154 | }, 155 | "colab_type": "code", 156 | "id": "dXNLhsmHFJzW", 157 | "outputId": "a5090f06-44dc-411c-d529-105787d163a8" 158 | }, 159 | "outputs": [ 160 | { 161 | "name": "stdout", 162 | "output_type": "stream", 163 | "text": [ 164 | "평균 300.0 100.0\n" 165 | ] 166 | } 167 | ], 168 | "source": [ 169 | "X_mean = float(sum(X) / ???(X)) # 평균: 합계 / 개수. sum(X) / len(X)\n", 170 | "Y_mean = float(???(Y) / len(Y)) # 평균: 합계 / 개수. sum(Y) / len(Y)\n", 171 | "print('평균', X_mean, Y_mean)\n" 172 | ] 173 | }, 174 | { 175 | "cell_type": "markdown", 176 | "metadata": { 177 | "colab_type": "text", 178 | "id": "SZEsSSq_FJzZ" 179 | }, 180 | "source": [ 181 | "### 분산값 구하기" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": 11, 187 | "metadata": { 188 | "colab": { 189 | "base_uri": "https://localhost:8080/", 190 | "height": 35 191 | }, 192 | "colab_type": "code", 193 | "id": "0fQ9pmA4FJza", 194 | "outputId": "40b62755-37cc-499b-8d63-e5d8cfacaec0" 195 | }, 196 | "outputs": [ 197 | { 198 | "name": "stdout", 199 | "output_type": "stream", 200 | "text": [ 201 | "X 분산(variance) 20000.0\n" 202 | ] 203 | } 204 | ], 205 | "source": [ 206 | "# list comprehension 이용\n", 207 | "# X의 분산: (X - X평균)**2\n", 208 | "vars = [(x - ???)**2 for ? in X] # (x - X_mean)**2 for x in X\n", 209 | "X_variance = sum(vars) / ???(vars) # sum(vars) / len(vars)\n", 210 | "print('X 분산(variance)', X_variance)" 211 | ] 212 | }, 213 | { 214 | "cell_type": "markdown", 215 | "metadata": { 216 | "colab_type": "text", 217 | "id": "ZeZ3-0PWFJzc" 218 | }, 219 | "source": [ 220 | "### 공분산(covariance)구하기" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 12, 226 | "metadata": { 227 | "colab": { 228 | "base_uri": "https://localhost:8080/", 229 | "height": 35 230 | }, 231 | "colab_type": "code", 232 | "id": "vNtkaiRlFJzd", 233 | "outputId": "c331babb-f870-4b01-a5d5-42eba5d35a01" 234 | }, 235 | "outputs": [ 236 | { 237 | "name": "stdout", 238 | "output_type": "stream", 239 | "text": [ 240 | "X,Y 공분산(covariance) 8340.0\n" 241 | ] 242 | } 243 | ], 244 | "source": [ 245 | "covars = [ (x - X_mean) * (y - ???) for ?, ? in zip(X, Y)] # (x - X_mean) * (y - Y_mean) for x, y in zip(X, Y)\n", 246 | "covariance = ???(covars) / len(covars) # sum(covars) / len(covars)\n", 247 | "print('X,Y 공분산(covariance)', covariance)" 248 | ] 249 | }, 250 | { 251 | "cell_type": "markdown", 252 | "metadata": { 253 | "colab_type": "text", 254 | "id": "ebWAVqwZFJzg" 255 | }, 256 | "source": [ 257 | "### 통계적 방법으로 기울기(W), y절편(B)구하기" 258 | ] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "execution_count": 13, 263 | "metadata": { 264 | "colab": { 265 | "base_uri": "https://localhost:8080/", 266 | "height": 35 267 | }, 268 | "colab_type": "code", 269 | "id": "aR3jshzZFJzi", 270 | "outputId": "509926b8-e895-40d8-d2c0-530ea85fb724" 271 | }, 272 | "outputs": [ 273 | { 274 | "name": "stdout", 275 | "output_type": "stream", 276 | "text": [ 277 | "W 0.417\n" 278 | ] 279 | } 280 | ], 281 | "source": [ 282 | "# W = (X,Y의 covariance) / (X의 분산)\n", 283 | "W = float(covariance / X_variance)\n", 284 | "print('W', W)\n" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": 14, 290 | "metadata": { 291 | "colab": { 292 | "base_uri": "https://localhost:8080/", 293 | "height": 35 294 | }, 295 | "colab_type": "code", 296 | "id": "ItUezlzSFJzm", 297 | "outputId": "15678146-c15e-4793-d173-2fb24ee46663" 298 | }, 299 | "outputs": [ 300 | { 301 | "name": "stdout", 302 | "output_type": "stream", 303 | "text": [ 304 | "B -25.099999999999994\n" 305 | ] 306 | } 307 | ], 308 | "source": [ 309 | "# y = W * X + B 에서 W는 구함. Y는 Y의 평균, X는 X의 평균을 대입하자.\n", 310 | "# B = Y - W * X\n", 311 | "B = Y_mean - W * X_mean\n", 312 | "print('B', B)" 313 | ] 314 | }, 315 | { 316 | "cell_type": "markdown", 317 | "metadata": { 318 | "colab_type": "text", 319 | "id": "xOE3FK6dFJzp" 320 | }, 321 | "source": [ 322 | "### 통계적 방법으로 도출한 모델로 카드사용량 예측하기" 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": 16, 328 | "metadata": { 329 | "colab": { 330 | "base_uri": "https://localhost:8080/", 331 | "height": 52 332 | }, 333 | "colab_type": "code", 334 | "id": "pHSdYURXFJzp", 335 | "outputId": "c63cf994-cb10-4ea5-80d6-4f7309e73d5a" 336 | }, 337 | "outputs": [ 338 | { 339 | "name": "stdout", 340 | "output_type": "stream", 341 | "text": [ 342 | "원래의 Y [30, 57, 76, 140, 197]\n", 343 | "모델의 Y [16.6, 58.3, 100.0, 141.7, 183.4]\n" 344 | ] 345 | } 346 | ], 347 | "source": [ 348 | "Y2 = [B + W * x for x in X]\n", 349 | "print('원래의 Y', Y)\n", 350 | "print('모델의 Y', Y2)" 351 | ] 352 | }, 353 | { 354 | "cell_type": "code", 355 | "execution_count": 17, 356 | "metadata": { 357 | "colab": { 358 | "base_uri": "https://localhost:8080/", 359 | "height": 104 360 | }, 361 | "colab_type": "code", 362 | "id": "YBTTtwLFFJzs", 363 | "outputId": "e1345791-abac-44a2-96aa-d9f2a934dd33" 364 | }, 365 | "outputs": [ 366 | { 367 | "name": "stdout", 368 | "output_type": "stream", 369 | "text": [ 370 | "30 16.6\n", 371 | "57 58.3\n", 372 | "76 100.0\n", 373 | "140 141.7\n", 374 | "197 183.4\n" 375 | ] 376 | } 377 | ], 378 | "source": [ 379 | "for y, y2 in zip(Y, Y2):\n", 380 | " print(y, y2)" 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "execution_count": 20, 386 | "metadata": { 387 | "colab": { 388 | "base_uri": "https://localhost:8080/", 389 | "height": 284 390 | }, 391 | "colab_type": "code", 392 | "id": "rN_nEzH6FJzz", 393 | "outputId": "174601b1-ab6c-47d0-80cc-eb4dbbe0f90a" 394 | }, 395 | "outputs": [ 396 | { 397 | "data": { 398 | "image/png": "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\nSUVORK5CYII=\n", 399 | "text/plain": [ 400 | "
" 401 | ] 402 | }, 403 | "metadata": { 404 | "tags": [] 405 | }, 406 | "output_type": "display_data" 407 | } 408 | ], 409 | "source": [ 410 | "fig, ax = plt.subplots()\n", 411 | "ax.plot(X, Y, label='Real')\n", 412 | "ax.plot(X, Y2, label='Model')\n", 413 | "ax.scatter(X, Y, c='blue')\n", 414 | "ax.scatter(X, Y2, c='red')\n", 415 | "ax.set_xlabel('X')\n", 416 | "ax.set_ylabel('Y')\n", 417 | "plt.legend()\n", 418 | "plt.show()" 419 | ] 420 | }, 421 | { 422 | "cell_type": "code", 423 | "execution_count": 0, 424 | "metadata": { 425 | "colab": {}, 426 | "colab_type": "code", 427 | "id": "N4b9biTxJieX" 428 | }, 429 | "outputs": [], 430 | "source": [] 431 | } 432 | ], 433 | "metadata": { 434 | "accelerator": "GPU", 435 | "colab": { 436 | "collapsed_sections": [], 437 | "name": "python_practice1_var_cov.ipynb", 438 | "provenance": [], 439 | "version": "0.3.2" 440 | }, 441 | "kernelspec": { 442 | "display_name": "Python 3", 443 | "language": "python", 444 | "name": "python3" 445 | }, 446 | "language_info": { 447 | "codemirror_mode": { 448 | "name": "ipython", 449 | "version": 3 450 | }, 451 | "file_extension": ".py", 452 | "mimetype": "text/x-python", 453 | "name": "python", 454 | "nbconvert_exporter": "python", 455 | "pygments_lexer": "ipython3", 456 | "version": "3.7.3" 457 | }, 458 | "toc": { 459 | "base_numbering": 1, 460 | "nav_menu": {}, 461 | "number_sections": true, 462 | "sideBar": true, 463 | "skip_h1_title": false, 464 | "title_cell": "Table of Contents", 465 | "title_sidebar": "Contents", 466 | "toc_cell": false, 467 | "toc_position": {}, 468 | "toc_section_display": true, 469 | "toc_window_display": false 470 | } 471 | }, 472 | "nbformat": 4, 473 | "nbformat_minor": 1 474 | } 475 | -------------------------------------------------------------------------------- /2.딥러닝준비/mycampus_python101_#7_count_confusion_matrix.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 딥러닝 프로그래밍 빠르게 배우기 (마이캠퍼스)\n", 8 | "## https://pg.mycampus.io/?idx=97\n", 9 | "\n", 10 | "* 질문/문의: 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "from collections import defaultdict\n", 20 | "from collections import Counter" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 3, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "import random" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 14, 35 | "metadata": {}, 36 | "outputs": [ 37 | { 38 | "name": "stdout", 39 | "output_type": "stream", 40 | "text": [ 41 | "1\n", 42 | "0\n", 43 | "0\n", 44 | "0\n", 45 | "1\n", 46 | "1\n", 47 | "0\n", 48 | "1\n", 49 | "0\n", 50 | "0\n" 51 | ] 52 | } 53 | ], 54 | "source": [ 55 | "for i in range(10):\n", 56 | " print( random.randint(0,1) )" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 15, 62 | "metadata": {}, 63 | "outputs": [ 64 | { 65 | "name": "stdout", 66 | "output_type": "stream", 67 | "text": [ 68 | "건강\n", 69 | "건강\n", 70 | "암\n", 71 | "암\n", 72 | "암\n", 73 | "암\n", 74 | "건강\n", 75 | "암\n", 76 | "암\n", 77 | "건강\n" 78 | ] 79 | } 80 | ], 81 | "source": [ 82 | "names = ['건강', '암']\n", 83 | "for i in range(10):\n", 84 | " d = random.randint(0,1)\n", 85 | " print( names[d] )" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": {}, 91 | "source": [ 92 | "### 암진단 (예측값, 실제값) 랜덤으로 데이터 생성\n", 93 | "0은 암아님. 1은 암을 의미\n" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 6, 99 | "metadata": {}, 100 | "outputs": [ 101 | { 102 | "name": "stdout", 103 | "output_type": "stream", 104 | "text": [ 105 | "[(0, 1), (1, 0), (0, 1), (1, 0), (1, 0), (0, 1), (0, 0), (0, 0), (0, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 0), (1, 0), (1, 0), (1, 0), (0, 0), (0, 1), (1, 1)]\n" 106 | ] 107 | } 108 | ], 109 | "source": [ 110 | "data = [ ( random.randint(0,1) , random.randint(0,1) ) for i in range(20)]\n", 111 | "print(data)" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 7, 117 | "metadata": {}, 118 | "outputs": [ 119 | { 120 | "name": "stdout", 121 | "output_type": "stream", 122 | "text": [ 123 | "예측 | 실제\n", 124 | "------------\n", 125 | "건강 \t 암\n", 126 | "암 \t 건강\n", 127 | "건강 \t 암\n", 128 | "암 \t 건강\n", 129 | "암 \t 건강\n", 130 | "건강 \t 암\n", 131 | "건강 \t 건강\n", 132 | "건강 \t 건강\n", 133 | "건강 \t 암\n", 134 | "암 \t 암\n", 135 | "암 \t 암\n", 136 | "암 \t 암\n", 137 | "암 \t 암\n", 138 | "암 \t 건강\n", 139 | "암 \t 건강\n", 140 | "암 \t 건강\n", 141 | "암 \t 건강\n", 142 | "건강 \t 건강\n", 143 | "건강 \t 암\n", 144 | "암 \t 암\n" 145 | ] 146 | } 147 | ], 148 | "source": [ 149 | "data2 = [ (names[y_pred], names[y_real]) for y_pred, y_real in data]\n", 150 | "print('예측 | 실제')\n", 151 | "print('------------')\n", 152 | "for y_pred, y_real in data2:\n", 153 | " print(y_pred,'\\t',y_real)" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": 8, 159 | "metadata": {}, 160 | "outputs": [], 161 | "source": [ 162 | "cnt = Counter(data)" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 9, 168 | "metadata": {}, 169 | "outputs": [ 170 | { 171 | "name": "stdout", 172 | "output_type": "stream", 173 | "text": [ 174 | "Counter({(1, 0): 7, (0, 1): 5, (1, 1): 5, (0, 0): 3})\n" 175 | ] 176 | } 177 | ], 178 | "source": [ 179 | "print(cnt)" 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 12, 185 | "metadata": {}, 186 | "outputs": [], 187 | "source": [ 188 | "# TP, FN, TN, FP\n", 189 | "TP = cnt[(1, 1)]\n", 190 | "FN = cnt[(0, 1)]\n", 191 | "TN = cnt[(0, 0)] # TN\n", 192 | "FP = cnt[(1, 0)] # FP" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": 13, 198 | "metadata": {}, 199 | "outputs": [ 200 | { 201 | "name": "stdout", 202 | "output_type": "stream", 203 | "text": [ 204 | "\n", 205 | "TP : 5 FN : 5 TN : 3 FP : 7\n", 206 | "Recall: 0.500, Precision: 0.417, Acc: 0.400\n" 207 | ] 208 | } 209 | ], 210 | "source": [ 211 | "Acc = (TP + TN) / (TP + TN + FP + FN)\n", 212 | "try:\n", 213 | " Precision = TP / (TP + FP)\n", 214 | "except: # 학습초기에 decision by zero 발생 가능 (범죄라고 판단한 건수가 zero인 상황\n", 215 | " Precision = 0\n", 216 | "\n", 217 | "try:\n", 218 | " Recall = TP / (TP + FN)\n", 219 | "except:\n", 220 | " Recall = 0\n", 221 | "\n", 222 | "print('\\nTP :', TP, ' FN :',FN , ' TN :', TN, ' FP :', FP)\n", 223 | "print('Recall: %.3f, Precision: %.3f, Acc: %.3f' % (Recall, Precision, Acc))" 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "execution_count": null, 229 | "metadata": {}, 230 | "outputs": [], 231 | "source": [] 232 | } 233 | ], 234 | "metadata": { 235 | "kernelspec": { 236 | "display_name": "Python 3", 237 | "language": "python", 238 | "name": "python3" 239 | }, 240 | "language_info": { 241 | "codemirror_mode": { 242 | "name": "ipython", 243 | "version": 3 244 | }, 245 | "file_extension": ".py", 246 | "mimetype": "text/x-python", 247 | "name": "python", 248 | "nbconvert_exporter": "python", 249 | "pygments_lexer": "ipython3", 250 | "version": "3.7.3" 251 | }, 252 | "toc": { 253 | "base_numbering": 1, 254 | "nav_menu": {}, 255 | "number_sections": true, 256 | "sideBar": true, 257 | "skip_h1_title": false, 258 | "title_cell": "Table of Contents", 259 | "title_sidebar": "Contents", 260 | "toc_cell": false, 261 | "toc_position": {}, 262 | "toc_section_display": true, 263 | "toc_window_display": false 264 | } 265 | }, 266 | "nbformat": 4, 267 | "nbformat_minor": 1 268 | } 269 | -------------------------------------------------------------------------------- /2.딥러닝준비/mycampus_python101_#8_dict_counter.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 딥러닝 프로그래밍 빠르게 배우기 (마이캠퍼스)\n", 8 | "## https://pg.mycampus.io/?idx=97\n", 9 | "\n", 10 | "* 질문/문의: 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": {}, 16 | "source": [ 17 | "# dict, dictionary - key에 의한 index ( java의 Hash map)" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 6, 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "{'Joel': 80, 'Tim': 95}\n", 30 | "95\n", 31 | "{'Joel': 100, 'Tim': 95}\n" 32 | ] 33 | } 34 | ], 35 | "source": [ 36 | "grades = { \"Joel\" : 80, \"Tim\" : 95 } # dictionary literal\n", 37 | "print(grades)\n", 38 | "print(grades['Tim'])\n", 39 | "grades['Joel'] = 100\n", 40 | "print(grades)\n" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 7, 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "# 'Taeree' 가 없으므로 아래를 실행하면 'KeyError' 오류 발생.\n", 50 | "# print(grades['Taeree'])" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "### dict 에서 존재하지 않는 key에 대한 default값 지정하기\n", 58 | "#### get()" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 8, 64 | "metadata": {}, 65 | "outputs": [ 66 | { 67 | "name": "stdout", 68 | "output_type": "stream", 69 | "text": [ 70 | "100\n" 71 | ] 72 | }, 73 | { 74 | "data": { 75 | "text/plain": [ 76 | "2" 77 | ] 78 | }, 79 | "execution_count": 8, 80 | "metadata": {}, 81 | "output_type": "execute_result" 82 | } 83 | ], 84 | "source": [ 85 | "print(grades.get('Taeree', 100)) # get(): 없는 key값 -> 디폴트 값을 적용\n", 86 | "len(grades)" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 9, 92 | "metadata": {}, 93 | "outputs": [ 94 | { 95 | "name": "stdout", 96 | "output_type": "stream", 97 | "text": [ 98 | "dict_keys(['Joel', 'Tim'])\n", 99 | "dict_values([100, 95])\n", 100 | "dict_items([('Joel', 100), ('Tim', 95)])\n" 101 | ] 102 | } 103 | ], 104 | "source": [ 105 | "print(grades.keys())\n", 106 | "print(grades.values())\n", 107 | "print(grades.items())" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "metadata": {}, 113 | "source": [ 114 | "# Word Counter 구현 방법 4가지 !!" 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "execution_count": 10, 120 | "metadata": {}, 121 | "outputs": [ 122 | { 123 | "data": { 124 | "text/plain": [ 125 | "0" 126 | ] 127 | }, 128 | "execution_count": 10, 129 | "metadata": {}, 130 | "output_type": "execute_result" 131 | } 132 | ], 133 | "source": [ 134 | "int() # int() --> 0" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 11, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "data": { 144 | "text/plain": [ 145 | "[]" 146 | ] 147 | }, 148 | "execution_count": 11, 149 | "metadata": {}, 150 | "output_type": "execute_result" 151 | } 152 | ], 153 | "source": [ 154 | "list() #" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 12, 160 | "metadata": {}, 161 | "outputs": [ 162 | { 163 | "data": { 164 | "text/plain": [ 165 | "{}" 166 | ] 167 | }, 168 | "execution_count": 12, 169 | "metadata": {}, 170 | "output_type": "execute_result" 171 | } 172 | ], 173 | "source": [ 174 | "dict()" 175 | ] 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "metadata": {}, 180 | "source": [ 181 | "## 방법1 - python dict (if/else 이용)" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": 13, 187 | "metadata": {}, 188 | "outputs": [ 189 | { 190 | "name": "stdout", 191 | "output_type": "stream", 192 | "text": [ 193 | "aa 3\n", 194 | "a 1\n", 195 | "bbb 2\n", 196 | "c 1\n" 197 | ] 198 | } 199 | ], 200 | "source": [ 201 | "document = ['aa', 'a', 'bbb', 'bbb', 'aa', 'c', 'aa']\n", 202 | "\n", 203 | "def way1():\n", 204 | " word_counts = {}\n", 205 | "\n", 206 | " for word in document:\n", 207 | " if word not in word_counts: # 처음 나타난 단어일 때\n", 208 | " word_counts[word] = 1\n", 209 | " else:\n", 210 | " word_counts[word] += 1\n", 211 | " for k, v in word_counts.items():\n", 212 | " print(k, v)\n", 213 | "\n", 214 | "way1()\n" 215 | ] 216 | }, 217 | { 218 | "cell_type": "markdown", 219 | "metadata": {}, 220 | "source": [ 221 | "## 방법2 - python dict (try/except 이용)" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": 14, 227 | "metadata": {}, 228 | "outputs": [ 229 | { 230 | "name": "stdout", 231 | "output_type": "stream", 232 | "text": [ 233 | "aa 3\n", 234 | "a 1\n", 235 | "bbb 2\n", 236 | "c 1\n" 237 | ] 238 | } 239 | ], 240 | "source": [ 241 | "def way2():\n", 242 | " word_counts = {}\n", 243 | " for word in document:\n", 244 | " try:\n", 245 | " word_counts[word] += 1\n", 246 | " except KeyError:\n", 247 | " word_counts[word] = 1\n", 248 | " for k,v in word_counts.items():\n", 249 | " print(k, v)\n", 250 | "\n", 251 | "way2()" 252 | ] 253 | }, 254 | { 255 | "cell_type": "markdown", 256 | "metadata": {}, 257 | "source": [ 258 | "## 방법3 - python dict (get() 이용)" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 15, 264 | "metadata": {}, 265 | "outputs": [ 266 | { 267 | "name": "stdout", 268 | "output_type": "stream", 269 | "text": [ 270 | "aa 3\n", 271 | "a 1\n", 272 | "bbb 2\n", 273 | "c 1\n" 274 | ] 275 | } 276 | ], 277 | "source": [ 278 | "def way3():\n", 279 | " word_counts = {}\n", 280 | " for word in document:\n", 281 | " word_counts[word] = word_counts.get(word, 0) + 1\n", 282 | " for k,v in word_counts.items():\n", 283 | " print(k, v)\n", 284 | "\n", 285 | "way3()" 286 | ] 287 | }, 288 | { 289 | "cell_type": "markdown", 290 | "metadata": {}, 291 | "source": [ 292 | "### 방법4 - defaultdict 이용" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": 16, 298 | "metadata": {}, 299 | "outputs": [ 300 | { 301 | "name": "stdout", 302 | "output_type": "stream", 303 | "text": [ 304 | "aa 3\n", 305 | "a 1\n", 306 | "bbb 2\n", 307 | "c 1\n" 308 | ] 309 | } 310 | ], 311 | "source": [ 312 | "def way4():\n", 313 | " from collections import defaultdict\n", 314 | " word_counts = defaultdict(int) # int() --> 0\n", 315 | " for word in document:\n", 316 | " word_counts[word] += 1\n", 317 | " for k,v in word_counts.items():\n", 318 | " print(k, v)\n", 319 | "\n", 320 | "way4()" 321 | ] 322 | }, 323 | { 324 | "cell_type": "markdown", 325 | "metadata": {}, 326 | "source": [ 327 | "## 방법4 - defaultdict 이용하여 count가 아닌 목록 만들기" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": 17, 333 | "metadata": {}, 334 | "outputs": [ 335 | { 336 | "name": "stdout", 337 | "output_type": "stream", 338 | "text": [ 339 | "aa [0, 4, 6]\n", 340 | "a [1]\n", 341 | "bbb [2, 3]\n", 342 | "c [5]\n" 343 | ] 344 | } 345 | ], 346 | "source": [ 347 | "def way_list():\n", 348 | " from collections import defaultdict\n", 349 | " word_list = defaultdict(list) # list() --> [] \n", 350 | " for i, word in enumerate(document):\n", 351 | " word_list[word].append(i)\n", 352 | " \n", 353 | " for k,v in word_list.items():\n", 354 | " print(k, v)\n", 355 | "\n", 356 | "way_list()" 357 | ] 358 | }, 359 | { 360 | "cell_type": "markdown", 361 | "metadata": {}, 362 | "source": [ 363 | "### 방법5 - collections.Counter 이용" 364 | ] 365 | }, 366 | { 367 | "cell_type": "code", 368 | "execution_count": 18, 369 | "metadata": {}, 370 | "outputs": [ 371 | { 372 | "name": "stdout", 373 | "output_type": "stream", 374 | "text": [ 375 | "aa 3\n", 376 | "a 1\n", 377 | "bbb 2\n", 378 | "c 1\n", 379 | "[('aa', 3), ('bbb', 2)]\n" 380 | ] 381 | } 382 | ], 383 | "source": [ 384 | "def way5():\n", 385 | " from collections import Counter\n", 386 | " word_counts = Counter(document) \n", 387 | " for k,v in word_counts.items():\n", 388 | " print(k, v)\n", 389 | " print(word_counts.most_common(2))\n", 390 | "way5()\n" 391 | ] 392 | }, 393 | { 394 | "cell_type": "markdown", 395 | "metadata": {}, 396 | "source": [ 397 | "## class 정의 예시. 기본 클래스 dict를 상속 " 398 | ] 399 | }, 400 | { 401 | "cell_type": "code", 402 | "execution_count": 19, 403 | "metadata": {}, 404 | "outputs": [ 405 | { 406 | "name": "stdout", 407 | "output_type": "stream", 408 | "text": [ 409 | "=== prn2 (키값의 순서)\n", 410 | "a 1\n", 411 | "aaa 3\n", 412 | "bb 2\n", 413 | "=== prn3 (갯수로 소팅)\n", 414 | "[('bb', 2), ('a', 1), ('aaa', 3)]\n", 415 | "aaa 3\n", 416 | "bb 2\n", 417 | "a 1\n" 418 | ] 419 | } 420 | ], 421 | "source": [ 422 | "class mydict(dict):\n", 423 | " def __init__(self):\n", 424 | " pass\n", 425 | " \n", 426 | " def add(self, word):\n", 427 | " self[word] = self.get(word, 0) + 1\n", 428 | " \n", 429 | " def prn(self):\n", 430 | " for k,v in self.items():\n", 431 | " print(k,v)\n", 432 | " def prn2(self):\n", 433 | " print('=== prn2 (키값의 순서)')\n", 434 | " for k in sorted(self.keys()):\n", 435 | " print(k, self[k])\n", 436 | " def prn3(self):\n", 437 | " print('=== prn3 (갯수로 소팅)')\n", 438 | " print(list(self.items()))\n", 439 | " for k, v in sorted(self.items(), key=lambda x:x[1], reverse=True):\n", 440 | " print(k, v) \n", 441 | "\n", 442 | "mycount = mydict()\n", 443 | "mycount.add('bb')\n", 444 | "mycount.add('a')\n", 445 | "mycount.add('aaa')\n", 446 | "mycount.add('bb')\n", 447 | "mycount.add('aaa')\n", 448 | "mycount.add('aaa')\n", 449 | "mycount.prn2()\n", 450 | "mycount.prn3()" 451 | ] 452 | }, 453 | { 454 | "cell_type": "code", 455 | "execution_count": null, 456 | "metadata": {}, 457 | "outputs": [], 458 | "source": [] 459 | } 460 | ], 461 | "metadata": { 462 | "kernelspec": { 463 | "display_name": "Python 3", 464 | "language": "python", 465 | "name": "python3" 466 | }, 467 | "language_info": { 468 | "codemirror_mode": { 469 | "name": "ipython", 470 | "version": 3 471 | }, 472 | "file_extension": ".py", 473 | "mimetype": "text/x-python", 474 | "name": "python", 475 | "nbconvert_exporter": "python", 476 | "pygments_lexer": "ipython3", 477 | "version": "3.7.3" 478 | }, 479 | "toc": { 480 | "base_numbering": 1, 481 | "nav_menu": {}, 482 | "number_sections": true, 483 | "sideBar": true, 484 | "skip_h1_title": false, 485 | "title_cell": "Table of Contents", 486 | "title_sidebar": "Contents", 487 | "toc_cell": false, 488 | "toc_position": {}, 489 | "toc_section_display": true, 490 | "toc_window_display": false 491 | } 492 | }, 493 | "nbformat": 4, 494 | "nbformat_minor": 1 495 | } 496 | -------------------------------------------------------------------------------- /2.딥러닝준비/mycampus_python101_#9_numpy.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "hH4LfqPIIn9N" 8 | }, 9 | "source": [ 10 | "* 마이캠퍼스 한대희 , daehee@mycampus.io, 010-2101-0255\n", 11 | "* 데이터분석/인공지능을 위한 딥러닝 스쿨 --> http://bit.ly/2TXlJJ4\n", 12 | "\n", 13 | "# numpy array의 핵심 개념: shape, axis\n", 14 | "\n" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": { 21 | "colab": {}, 22 | "colab_type": "code", 23 | "id": "xmQmrs7LggWT" 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "# coding: utf-8\n", 28 | "import math\n", 29 | "import numpy as np\n", 30 | "import matplotlib.pylab as plt" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": { 36 | "colab_type": "text", 37 | "id": "jqOhj2rhCXFR" 38 | }, 39 | "source": [ 40 | "## numpy shape, reshape()" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "metadata": { 47 | "colab": {}, 48 | "colab_type": "code", 49 | "id": "FimAXuFSCXFS", 50 | "outputId": "df9f4619-3cb7-4285-a41a-032cfcf0c2ff" 51 | }, 52 | "outputs": [ 53 | { 54 | "name": "stdout", 55 | "output_type": "stream", 56 | "text": [ 57 | "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]\n", 58 | "(24,)\n" 59 | ] 60 | } 61 | ], 62 | "source": [ 63 | "A = np.array(range(24))\n", 64 | "print(A)\n", 65 | "print(A.shape)" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 3, 71 | "metadata": { 72 | "colab": {}, 73 | "colab_type": "code", 74 | "id": "fioZpRxcCXFV", 75 | "outputId": "9da5aaa1-cb12-4402-b670-b0d892894084" 76 | }, 77 | "outputs": [ 78 | { 79 | "name": "stdout", 80 | "output_type": "stream", 81 | "text": [ 82 | "[[ 0 1 2 3 4 5 6 7 8 9 10 11]\n", 83 | " [12 13 14 15 16 17 18 19 20 21 22 23]]\n", 84 | "[[ 0 1 2 3 4 5 6 7]\n", 85 | " [ 8 9 10 11 12 13 14 15]\n", 86 | " [16 17 18 19 20 21 22 23]]\n", 87 | "[[ 0 1 2 3 4 5]\n", 88 | " [ 6 7 8 9 10 11]\n", 89 | " [12 13 14 15 16 17]\n", 90 | " [18 19 20 21 22 23]]\n" 91 | ] 92 | } 93 | ], 94 | "source": [ 95 | "B = A.reshape(2, 12) # 2행 12열\n", 96 | "C = A.reshape(3, 8) # 3행 8열\n", 97 | "D = A.reshape(4, -1) # 24 = 4행 6열. 따라서 -1로 지정해도 6열이 됨. \n", 98 | "print(B)\n", 99 | "print(C)\n", 100 | "print(D)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "### reshape() 에서 -1의 의미. \"알아서 계산해줘\" 임." 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 4, 113 | "metadata": { 114 | "colab": { 115 | "base_uri": "https://localhost:8080/", 116 | "height": 197 117 | }, 118 | "colab_type": "code", 119 | "id": "QT5_1Xw1EJex", 120 | "outputId": "70cb2d64-3d2c-4480-f7ab-e222f8a440c2" 121 | }, 122 | "outputs": [ 123 | { 124 | "name": "stdout", 125 | "output_type": "stream", 126 | "text": [ 127 | "(4,)\n", 128 | "(2, 2)\n", 129 | "(4, 1)\n", 130 | "[0 1 2 3]\n", 131 | "[[0 1]\n", 132 | " [2 3]]\n", 133 | "[[0]\n", 134 | " [1]\n", 135 | " [2]\n", 136 | " [3]]\n" 137 | ] 138 | } 139 | ], 140 | "source": [ 141 | "B = np.array(range(4)) # 원소 4개 array\n", 142 | "print(B.shape)\n", 143 | "C = B.reshape(-1, 2) # 원소 4개 = ?행 x 2열. 따라 ?는 2행이 됨\n", 144 | "print(C.shape)\n", 145 | "D = B.reshape(-1, 1) # 원소 4개 = ?행 x 2열. 따라 ?는 2행이 됨\n", 146 | "print(D.shape)\n", 147 | "print(B)\n", 148 | "print(C)\n", 149 | "print(D)" 150 | ] 151 | }, 152 | { 153 | "cell_type": "markdown", 154 | "metadata": {}, 155 | "source": [ 156 | "## axis의 의미. axis 0은 행, 1은 열을 의미함" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 5, 162 | "metadata": { 163 | "colab": { 164 | "base_uri": "https://localhost:8080/", 165 | "height": 107 166 | }, 167 | "colab_type": "code", 168 | "id": "eKovspz1FE-R", 169 | "outputId": "39fab8ee-2fbb-426a-fea3-b083c50f8377" 170 | }, 171 | "outputs": [ 172 | { 173 | "name": "stdout", 174 | "output_type": "stream", 175 | "text": [ 176 | "[[0 1]\n", 177 | " [2 3]]\n", 178 | "6\n", 179 | "[2 4]\n", 180 | "[1 5]\n" 181 | ] 182 | } 183 | ], 184 | "source": [ 185 | "print(C)\n", 186 | "#np.sum(C)\n", 187 | "print(C.sum())\n", 188 | "print(C.sum(axis=0))\n", 189 | "print(C.sum(axis=1))" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 6, 195 | "metadata": { 196 | "colab": { 197 | "base_uri": "https://localhost:8080/", 198 | "height": 118 199 | }, 200 | "colab_type": "code", 201 | "id": "wLR2EzhvGPgC", 202 | "outputId": "00629c70-3e85-45b2-9d00-ceea74c26fda" 203 | }, 204 | "outputs": [ 205 | { 206 | "name": "stdout", 207 | "output_type": "stream", 208 | "text": [ 209 | "[[0 1]\n", 210 | " [2 3]]\n", 211 | "[[10 11]\n", 212 | " [12 13]]\n" 213 | ] 214 | }, 215 | { 216 | "data": { 217 | "text/plain": [ 218 | "array([[ 0, 1, 10, 11],\n", 219 | " [ 2, 3, 12, 13]])" 220 | ] 221 | }, 222 | "execution_count": 6, 223 | "metadata": {}, 224 | "output_type": "execute_result" 225 | } 226 | ], 227 | "source": [ 228 | "D = np.array(range(10, 14)).reshape(2, 2)\n", 229 | "print(C)\n", 230 | "print(D)\n", 231 | "np.concatenate( (C, D) )\n", 232 | "np.concatenate( (C, D), axis = 1 )" 233 | ] 234 | }, 235 | { 236 | "cell_type": "markdown", 237 | "metadata": { 238 | "colab_type": "text", 239 | "id": "MDCe_GlKfRUY" 240 | }, 241 | "source": [ 242 | "## numpy.\n", 243 | "### arange()\n", 244 | "### linspace() - linear space(균등 분할)" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": 7, 250 | "metadata": { 251 | "colab": { 252 | "base_uri": "https://localhost:8080/", 253 | "height": 34 254 | }, 255 | "colab_type": "code", 256 | "id": "CRt05_fUOdoK", 257 | "outputId": "9228129b-70ec-4e2c-9b94-3e2fc7add45d" 258 | }, 259 | "outputs": [ 260 | { 261 | "name": "stdout", 262 | "output_type": "stream", 263 | "text": [ 264 | "A1: [1 3 5 7 9] A2: [1. 3. 5. 7. 9.] A3: [ 1. 3.25 5.5 7.75 10. ]\n" 265 | ] 266 | } 267 | ], 268 | "source": [ 269 | "A1 = np.arange(1, 10, 2)\n", 270 | "A2 = np.linspace(1, 9, 5)\n", 271 | "A3 = np.linspace(1, 10, 5)\n", 272 | "print('A1:', A1, 'A2:', A2, 'A3:', A3)" 273 | ] 274 | }, 275 | { 276 | "cell_type": "markdown", 277 | "metadata": { 278 | "colab_type": "text", 279 | "id": "_nOgo5NPf_Kq" 280 | }, 281 | "source": [ 282 | "### linspace(start, end, num) \n", 283 | "### 주의점. step이 아니라 num. 즉 생성할 데이터의 개수\n", 284 | "![대체 텍스트](https://vrzkj25a871bpq7t1ugcgmn9-wpengine.netdna-ssl.com/wp-content/uploads/2018/10/visual-representation-of-np-linspace-0-100-5.png =400x150)" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": 8, 290 | "metadata": { 291 | "colab": { 292 | "base_uri": "https://localhost:8080/", 293 | "height": 347 294 | }, 295 | "colab_type": "code", 296 | "id": "SvYRlW90gh_F", 297 | "outputId": "93855e38-7f35-406a-d49a-c2719400992f" 298 | }, 299 | "outputs": [ 300 | { 301 | "data": { 302 | "image/png": "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\n", 303 | "text/plain": [ 304 | "
" 305 | ] 306 | }, 307 | "metadata": { 308 | "needs_background": "light" 309 | }, 310 | "output_type": "display_data" 311 | } 312 | ], 313 | "source": [ 314 | "A1 = np.linspace(0, 10, 20)\n", 315 | "A2 = np.linspace(0.1, 9.9, 50)\n", 316 | "plt.scatter(A2, A2, c='r')\n", 317 | "plt.scatter(A1, A1, c='b')\n", 318 | "plt.show()" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 9, 324 | "metadata": { 325 | "colab": { 326 | "base_uri": "https://localhost:8080/", 327 | "height": 34 328 | }, 329 | "colab_type": "code", 330 | "id": "ig4GinEYesPA", 331 | "outputId": "aa89753b-ee7c-4bc4-f80e-6503c1dc7ee4" 332 | }, 333 | "outputs": [ 334 | { 335 | "name": "stdout", 336 | "output_type": "stream", 337 | "text": [ 338 | "(100,)\n" 339 | ] 340 | } 341 | ], 342 | "source": [ 343 | "A1 = np.random.random(100)\n", 344 | "A2 = np.random.rand(100)\n", 345 | "A1.sort()\n", 346 | "A2.sort()\n", 347 | "print(A1.shape)" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 10, 353 | "metadata": { 354 | "colab": { 355 | "base_uri": "https://localhost:8080/", 356 | "height": 347 357 | }, 358 | "colab_type": "code", 359 | "id": "WmKrjTxTesPD", 360 | "outputId": "613c35e1-9f83-4aed-dd38-2a580957494f" 361 | }, 362 | "outputs": [ 363 | { 364 | "data": { 365 | "image/png": "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\n", 366 | "text/plain": [ 367 | "
" 368 | ] 369 | }, 370 | "metadata": { 371 | "needs_background": "light" 372 | }, 373 | "output_type": "display_data" 374 | } 375 | ], 376 | "source": [ 377 | "plt.plot(A1, c='b')\n", 378 | "plt.plot(A2, c='r')\n", 379 | "plt.show()" 380 | ] 381 | }, 382 | { 383 | "cell_type": "markdown", 384 | "metadata": { 385 | "colab_type": "text", 386 | "id": "5Icx0M_Rpo7L" 387 | }, 388 | "source": [ 389 | "### 정규 분포 랜덤 생성 (normal distribution)\n", 390 | "평균, 편차를 지정할 수 있다" 391 | ] 392 | }, 393 | { 394 | "cell_type": "code", 395 | "execution_count": 11, 396 | "metadata": { 397 | "colab": {}, 398 | "colab_type": "code", 399 | "id": "-OFyB_SpkUb7" 400 | }, 401 | "outputs": [], 402 | "source": [ 403 | "mu = -0.5 #평균\n", 404 | "sigma = 0.3 #편차\n", 405 | "A1 = np.random.normal(mu, sigma, 250)\n", 406 | "A1.sort()\n" 407 | ] 408 | }, 409 | { 410 | "cell_type": "code", 411 | "execution_count": 12, 412 | "metadata": { 413 | "colab": { 414 | "base_uri": "https://localhost:8080/", 415 | "height": 347 416 | }, 417 | "colab_type": "code", 418 | "id": "hQmxoRY9lXir", 419 | "outputId": "d83a77f6-ef2a-4fe3-8bba-c6c0a941e459" 420 | }, 421 | "outputs": [ 422 | { 423 | "data": { 424 | "image/png": "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\n", 425 | "text/plain": [ 426 | "
" 427 | ] 428 | }, 429 | "metadata": { 430 | "needs_background": "light" 431 | }, 432 | "output_type": "display_data" 433 | } 434 | ], 435 | "source": [ 436 | "plt.scatter(A1, A1, c='b', marker='.')\n", 437 | "plt.show()" 438 | ] 439 | }, 440 | { 441 | "cell_type": "code", 442 | "execution_count": 13, 443 | "metadata": { 444 | "colab": { 445 | "base_uri": "https://localhost:8080/", 446 | "height": 347 447 | }, 448 | "colab_type": "code", 449 | "id": "1RkFHHAtlIQU", 450 | "outputId": "4e320889-dbfd-4e60-af7d-dad149035a0b" 451 | }, 452 | "outputs": [ 453 | { 454 | "data": { 455 | "image/png": "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\n", 456 | "text/plain": [ 457 | "
" 458 | ] 459 | }, 460 | "metadata": { 461 | "needs_background": "light" 462 | }, 463 | "output_type": "display_data" 464 | } 465 | ], 466 | "source": [ 467 | "plt.plot(A1, c='b')\n", 468 | "plt.show()" 469 | ] 470 | }, 471 | { 472 | "cell_type": "code", 473 | "execution_count": null, 474 | "metadata": { 475 | "colab": {}, 476 | "colab_type": "code", 477 | "id": "Bxswvu_jlJ9k" 478 | }, 479 | "outputs": [], 480 | "source": [] 481 | } 482 | ], 483 | "metadata": { 484 | "colab": { 485 | "collapsed_sections": [], 486 | "name": "EX0.python_numpy_basic.ipynb", 487 | "provenance": [], 488 | "version": "0.3.2" 489 | }, 490 | "kernelspec": { 491 | "display_name": "Python 3", 492 | "language": "python", 493 | "name": "python3" 494 | }, 495 | "language_info": { 496 | "codemirror_mode": { 497 | "name": "ipython", 498 | "version": 3 499 | }, 500 | "file_extension": ".py", 501 | "mimetype": "text/x-python", 502 | "name": "python", 503 | "nbconvert_exporter": "python", 504 | "pygments_lexer": "ipython3", 505 | "version": "3.7.3" 506 | }, 507 | "toc": { 508 | "base_numbering": 1, 509 | "nav_menu": {}, 510 | "number_sections": true, 511 | "sideBar": true, 512 | "skip_h1_title": false, 513 | "title_cell": "Table of Contents", 514 | "title_sidebar": "Contents", 515 | "toc_cell": false, 516 | "toc_position": {}, 517 | "toc_section_display": true, 518 | "toc_window_display": false 519 | } 520 | }, 521 | "nbformat": 4, 522 | "nbformat_minor": 1 523 | } 524 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # 노코드 AI, 딥러닝 SaaS. 뉴럴스튜디오 - http://neuralworks.io 3 | 4 | ## Python 101 to start Deep Learning & Data Science 5 | 6 | ## 폴더 1.python기본: 기본적으로 알아야 파이썬 기본입니다. 7 | ## 폴더 2.딥러닝준비: 딥러닝/데이터사이언스 시작하기 전에 요 정도 예습하시면 좋습니다. 8 | 9 | ## 한대희 @ 뉴럴웍스랩, daehee@neuralworks.io, 010-2101-0255 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /마이캠퍼스_python_기초.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Neuralworks-io/python-for-deep-learning/e8eae38ba4056a73a3d8abb9d8e66317052a23c1/마이캠퍼스_python_기초.pdf --------------------------------------------------------------------------------