├── 00. 강의 소개 └── Python 데이터 분석과 이미지 처리 - 강의 소개.pdf ├── 01. 행렬의 필요성 └── Python 데이터 분석과 이미지 처리 - 행렬의 필요성.pdf ├── 02. 다양한 파이썬 개발 환경 소개 └── Python 데이터 분석과 이미지 처리 - 다양한 개발 환경 소개.pdf ├── 03. Numpy의 기본 사용법 ├── Numpy의 기본 사용법.ipynb └── Python 데이터 분석과 이미지 처리 - Numpy의 기본 사용법.pdf ├── 04. Numpy의 연산과 함수 ├── Numpy의 연산과 함수.ipynb └── Python 데이터 분석과 이미지 처리 - Numpy의 연산과 함수.pdf ├── 05. Numpy의 활용 ├── Numpy의 활용.ipynb └── Python 데이터 분석과 이미지 처리 - Numpy의 활용.pdf ├── 06. OpenCV 소개 및 기본 사용법 ├── OpenCV 소개 및 기본 사용법.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV 소개 및 기본 사용법.pdf ├── 07. OpenCV 이미지 연산 ├── OpenCV 이미지 연산.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV 이미지 연산.pdf ├── 08. OpenCV 이미지 변형 ├── OpenCV 이미지 변형.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV 이미지 변형.pdf ├── 09. OpenCV 이미지 합치기 ├── OpenCV 이미지 합치기.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV 이미지 합치기.pdf ├── 10. OpenCV 임계점 처리하기 ├── OpenCV 임계점 처리하기.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV 임계점 처리하기.pdf ├── 11. OpenCV Tracker ├── OpenCV Tracker.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV Tracker.pdf ├── 12. OpenCV 도형 그리기 ├── OpenCV 도형 그리기.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV 도형 그리기.pdf ├── 13. OpenCV Contours ├── OpenCV Contours.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV Contours.pdf ├── 14. OpenCV Contours 처리 ├── OpenCV Contours 처리.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV Contours 처리.pdf ├── 15. OpenCV Filtering ├── OpenCV Filtering.ipynb └── Python 데이터 분석과 이미지 처리 - OpenCV Filtering.pdf ├── 16. KNN Algorithm ├── KNN Algorithm.ipynb └── Python 데이터 분석과 이미지 처리 - KNN Algorithm.pdf ├── 17. KNN 숫자 인식 예제 ├── KNN 숫자 인식 예제.ipynb └── Python 데이터 분석과 이미지 처리 - KNN 숫자 인식 예제.pdf ├── 18. 중급 Captcha Hacking 1 - Problem Define └── 중급 Captcha Hacking (SCTF 2017 예선) ① Problem Define.pdf ├── 19. 중급 Captcha Hacking 2 - 데이터 수집과 분석 └── 중급 Captcha Hacking (SCTF 2017 예선) ② 데이터 수집과 분석.pdf ├── 20. 중급 Captcha Hacking 3 - 데이터 정제 └── 중급 Captcha Hacking (SCTF 2017 예선) ③ 데이터 정제.pdf ├── 21. 중급 Captcha Hacking 4 - KNN 모델 학습 └── 중급 Captcha Hacking (SCTF 2017 예선) ④ 데이터 정제.pdf ├── 22. 중급 Captcha Hacking 5 - 해킹 자동화 └── 중급 Captcha Hacking (SCTF 2017 예선) ⑤ 해킹 자동화.pdf ├── 23. Pandas의 기본 사용법 ├── Pandas의 기본 사용법.ipynb └── Python 데이터 분석과 이미지 처리 - Pandas의 기본 사용법.pdf ├── 24. Pandas의 연산과 함수 ├── Pandas의 연산과 함수.ipynb └── Python 데이터 분석과 이미지 처리 - Pandas의 연산과 함수.pdf ├── 25. Pandas의 활용 ├── Pandas의 활용.ipynb └── Python 데이터 분석과 이미지 처리 - Pandas의 활용.pdf ├── 26. Matplotlib 라이브러리의 기초 ├── Matplotlib 라이브러리의 기초.ipynb └── Python 데이터 분석과 이미지 처리 - Matplotlib 라이브러리의 기초.pdf ├── 27. Matploblib 라이브러리 다루기 ├── Matplotlib 라이브러리의 다루기.ipynb └── Python 데이터 분석과 이미지 처리 - Matplotlib 라이브러리 다루기.pdf ├── 28. 웹 크롤링 ├── Python 데이터 분석과 이미지 처리 - 웹 크롤링.pdf └── 웹 크롤링.ipynb ├── 29. 네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링 ├── 네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링.ipynb └── 네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링.pdf ├── 30. 네이버 영화 리뷰 데이터 분석 ② 데이터 시각화 ├── 네이버 영화 리뷰 데이터 분석 ② 데이터 시각화.ipynb └── 네이버 영화 리뷰 데이터 분석 ② 데이터 시각화.pdf ├── README.md ├── fonts └── NanumBarunGothic.ttf └── images ├── cat.jpg ├── digit_image.png ├── digits.png ├── dog.jpg ├── gray_image.jpg ├── hand_writing_image.jpg ├── image_1.jpg ├── image_2.png └── test ├── test0.png ├── test1.png ├── test2.png ├── test3.png ├── test4.png ├── test5.png ├── test6.png ├── test7.png ├── test8.png └── test9.png /00. 강의 소개/Python 데이터 분석과 이미지 처리 - 강의 소개.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/00. 강의 소개/Python 데이터 분석과 이미지 처리 - 강의 소개.pdf -------------------------------------------------------------------------------- /01. 행렬의 필요성/Python 데이터 분석과 이미지 처리 - 행렬의 필요성.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/01. 행렬의 필요성/Python 데이터 분석과 이미지 처리 - 행렬의 필요성.pdf -------------------------------------------------------------------------------- /02. 다양한 파이썬 개발 환경 소개/Python 데이터 분석과 이미지 처리 - 다양한 개발 환경 소개.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/02. 다양한 파이썬 개발 환경 소개/Python 데이터 분석과 이미지 처리 - 다양한 개발 환경 소개.pdf -------------------------------------------------------------------------------- /03. Numpy의 기본 사용법/Numpy의 기본 사용법.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Numpy의 기본 사용법", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "XK5zqqXSD5Vd", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## Numpy의 기본 사용법\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/04.%20Numpy%EC%9D%98%20%EC%97%B0%EC%82%B0%EA%B3%BC%20%ED%95%A8%EC%88%98/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20Numpy%EC%9D%98%20%EC%97%B0%EC%82%B0%EA%B3%BC%20%ED%95%A8%EC%88%98.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "hqGi-UyhFFBM", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "Python의 Numpy 라이브러리는 List와 **상호 변환이 가능**합니다." 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "metadata": { 51 | "id": "G5AmgwzoENVh", 52 | "colab_type": "code", 53 | "colab": { 54 | "base_uri": "https://localhost:8080/", 55 | "height": 70 56 | }, 57 | "outputId": "3de972b6-6dd8-4bf0-d559-5d800fdee864" 58 | }, 59 | "source": [ 60 | "import numpy as np\n", 61 | "\n", 62 | "array = np.array([1, 2, 3])\n", 63 | "print(array.size) # 배열의 크기\n", 64 | "print(array.dtype) # 배열 원소의 타입\n", 65 | "print(array[2]) # 인덱스 2의 원소" 66 | ], 67 | "execution_count": 18, 68 | "outputs": [ 69 | { 70 | "output_type": "stream", 71 | "text": [ 72 | "3\n", 73 | "int64\n", 74 | "3\n" 75 | ], 76 | "name": "stdout" 77 | } 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": { 83 | "id": "bzE_pyEHEUXU", 84 | "colab_type": "text" 85 | }, 86 | "source": [ 87 | "Python의 Numpy 라이브러리는 **다양한 형태의 배열**을 초기화 할 수 있습니다." 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "metadata": { 93 | "id": "MO-eC8rzEPKK", 94 | "colab_type": "code", 95 | "colab": { 96 | "base_uri": "https://localhost:8080/", 97 | "height": 263 98 | }, 99 | "outputId": "f3581290-5dfc-4995-b850-78579cfce320" 100 | }, 101 | "source": [ 102 | "import numpy as np\n", 103 | "\n", 104 | "# 0부터 3까지의 배열 만들기\n", 105 | "array1 = np.arange(4)\n", 106 | "print(array1)\n", 107 | "\n", 108 | "# 0으로 초기화\n", 109 | "array2 = np.zeros((4, 4), dtype=float)\n", 110 | "print(array2)\n", 111 | "\n", 112 | "# 1로 초기화\n", 113 | "array3 = np.ones((3, 3), dtype=str)\n", 114 | "print(array3)\n", 115 | "\n", 116 | "# 0부터 9까지 랜덤하게 초기화 된 배열 만들기\n", 117 | "array4 = np.random.randint(0, 10, (3, 3))\n", 118 | "print(array4)\n", 119 | "\n", 120 | "# 평균이 0이고 표준편차가 1인 표준 정규를 띄는 배열\n", 121 | "array5 = np.random.normal(0, 1, (3, 3))\n", 122 | "print(array5)" 123 | ], 124 | "execution_count": 19, 125 | "outputs": [ 126 | { 127 | "output_type": "stream", 128 | "text": [ 129 | "[0 1 2 3]\n", 130 | "[[0. 0. 0. 0.]\n", 131 | " [0. 0. 0. 0.]\n", 132 | " [0. 0. 0. 0.]\n", 133 | " [0. 0. 0. 0.]]\n", 134 | "[['1' '1' '1']\n", 135 | " ['1' '1' '1']\n", 136 | " ['1' '1' '1']]\n", 137 | "[[9 6 6]\n", 138 | " [6 2 1]\n", 139 | " [1 6 3]]\n", 140 | "[[-0.85995876 -2.27512351 -1.15556506]\n", 141 | " [-0.5298595 0.18397865 0.03568352]\n", 142 | " [ 0.00741686 -0.54831076 -1.38529353]]\n" 143 | ], 144 | "name": "stdout" 145 | } 146 | ] 147 | }, 148 | { 149 | "cell_type": "markdown", 150 | "metadata": { 151 | "id": "BjNuQEp7FWJ1", 152 | "colab_type": "text" 153 | }, 154 | "source": [ 155 | "Numpy는 다양한 형태로 **합치기가 가능** 있습니다." 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "metadata": { 161 | "id": "Yracqt2SEcDw", 162 | "colab_type": "code", 163 | "colab": { 164 | "base_uri": "https://localhost:8080/", 165 | "height": 52 166 | }, 167 | "outputId": "1c4c399b-e848-4c82-aa9f-f2949b09b714" 168 | }, 169 | "source": [ 170 | "import numpy as np\n", 171 | "\n", 172 | "array1 = np.array([1, 2, 3]) \n", 173 | "array2 = np.array([4, 5, 6])\n", 174 | "array3 = np.concatenate([array1, array2])\n", 175 | "\n", 176 | "print(array3.shape)\n", 177 | "print(array3)" 178 | ], 179 | "execution_count": 20, 180 | "outputs": [ 181 | { 182 | "output_type": "stream", 183 | "text": [ 184 | "(6,)\n", 185 | "[1 2 3 4 5 6]\n" 186 | ], 187 | "name": "stdout" 188 | } 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": { 194 | "id": "4pN-EeEDGHb1", 195 | "colab_type": "text" 196 | }, 197 | "source": [ 198 | "Numpy를 위 아래로 합칠 수 있습니다." 199 | ] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "metadata": { 204 | "id": "u5z29qIHGHiw", 205 | "colab_type": "code", 206 | "colab": { 207 | "base_uri": "https://localhost:8080/", 208 | "height": 87 209 | }, 210 | "outputId": "5df72b78-0439-45eb-ff74-a3b8bd233ba4" 211 | }, 212 | "source": [ 213 | "import numpy as np\n", 214 | "\n", 215 | "array1 = np.arange(4).reshape(1, 4)\n", 216 | "array2 = np.arange(8).reshape(2, 4)\n", 217 | "array3 = np.concatenate([array1, array2], axis=0)\n", 218 | "\n", 219 | "print(array3.shape)\n", 220 | "print(array3)" 221 | ], 222 | "execution_count": 21, 223 | "outputs": [ 224 | { 225 | "output_type": "stream", 226 | "text": [ 227 | "(3, 4)\n", 228 | "[[0 1 2 3]\n", 229 | " [0 1 2 3]\n", 230 | " [4 5 6 7]]\n" 231 | ], 232 | "name": "stdout" 233 | } 234 | ] 235 | }, 236 | { 237 | "cell_type": "markdown", 238 | "metadata": { 239 | "id": "0kFRNyINFzRd", 240 | "colab_type": "text" 241 | }, 242 | "source": [ 243 | "Numpy의 **형태를 변경**할 수 있습니다." 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "metadata": { 249 | "id": "I-RVSif4Feht", 250 | "colab_type": "code", 251 | "colab": { 252 | "base_uri": "https://localhost:8080/", 253 | "height": 34 254 | }, 255 | "outputId": "a1fd982a-0e01-4bdb-9603-db80b58ce367" 256 | }, 257 | "source": [ 258 | "import numpy as np\n", 259 | "\n", 260 | "array1 = np.array([1, 2, 3, 4])\n", 261 | "array2 = array1.reshape((2, 2))\n", 262 | "print(array2.shape)" 263 | ], 264 | "execution_count": 22, 265 | "outputs": [ 266 | { 267 | "output_type": "stream", 268 | "text": [ 269 | "(2, 2)\n" 270 | ], 271 | "name": "stdout" 272 | } 273 | ] 274 | }, 275 | { 276 | "cell_type": "markdown", 277 | "metadata": { 278 | "id": "ZIy_DX6bGDpd", 279 | "colab_type": "text" 280 | }, 281 | "source": [ 282 | "Numpy의 **형태를 나누기** 할 수 있습니다." 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "metadata": { 288 | "id": "yQGYnY2pF875", 289 | "colab_type": "code", 290 | "colab": { 291 | "base_uri": "https://localhost:8080/", 292 | "height": 70 293 | }, 294 | "outputId": "1c84ae7d-f899-4066-8287-f5ad35e1abc3" 295 | }, 296 | "source": [ 297 | "import numpy as np\n", 298 | "\n", 299 | "array = np.arange(8).reshape(2, 4)\n", 300 | "left, right = np.split(array, [2], axis=1)\n", 301 | "\n", 302 | "print(left.shape)\n", 303 | "print(right.shape)\n", 304 | "print(right[1][1])" 305 | ], 306 | "execution_count": 23, 307 | "outputs": [ 308 | { 309 | "output_type": "stream", 310 | "text": [ 311 | "(2, 2)\n", 312 | "(2, 2)\n", 313 | "7\n" 314 | ], 315 | "name": "stdout" 316 | } 317 | ] 318 | } 319 | ] 320 | } -------------------------------------------------------------------------------- /03. Numpy의 기본 사용법/Python 데이터 분석과 이미지 처리 - Numpy의 기본 사용법.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/03. Numpy의 기본 사용법/Python 데이터 분석과 이미지 처리 - Numpy의 기본 사용법.pdf -------------------------------------------------------------------------------- /04. Numpy의 연산과 함수/Numpy의 연산과 함수.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Numpy의 연산과 함수", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "collapsed_sections": [], 10 | "include_colab_link": true 11 | }, 12 | "kernelspec": { 13 | "name": "python3", 14 | "display_name": "Python 3" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "markdown", 20 | "metadata": { 21 | "id": "view-in-github", 22 | "colab_type": "text" 23 | }, 24 | "source": [ 25 | "\"Open" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": { 31 | "id": "jflbKZvWIewX", 32 | "colab_type": "text" 33 | }, 34 | "source": [ 35 | "## Numpy의 연산과 함수\n", 36 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/04.%20Numpy%EC%9D%98%20%EC%97%B0%EC%82%B0%EA%B3%BC%20%ED%95%A8%EC%88%98/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20Numpy%EC%9D%98%20%EC%97%B0%EC%82%B0%EA%B3%BC%20%ED%95%A8%EC%88%98.pdf)" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "id": "YMGeT2gmIqQO", 43 | "colab_type": "text" 44 | }, 45 | "source": [ 46 | "Python의 Numpy 라이브러리는 기본적인 상수 연산이 가능합니다." 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "metadata": { 52 | "id": "lB3TNlINIn33", 53 | "colab_type": "code", 54 | "colab": { 55 | "base_uri": "https://localhost:8080/", 56 | "height": 52 57 | }, 58 | "outputId": "9293f423-94d0-4f3d-f4fa-3f1a5850de8c" 59 | }, 60 | "source": [ 61 | "import numpy as np\n", 62 | "\n", 63 | "array = np.random.randint(1, 10, size=4).reshape(2, 2)\n", 64 | "result_array = array * 10\n", 65 | "print(result_array)" 66 | ], 67 | "execution_count": 1, 68 | "outputs": [ 69 | { 70 | "output_type": "stream", 71 | "text": [ 72 | "[[10 30]\n", 73 | " [40 80]]\n" 74 | ], 75 | "name": "stdout" 76 | } 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": { 82 | "id": "3gXaKkCGI5lG", 83 | "colab_type": "text" 84 | }, 85 | "source": [ 86 | "**서로 다른 형태의 Numpy 연산**이 가능합니다." 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "metadata": { 92 | "id": "CjFI4tuPI1M2", 93 | "colab_type": "code", 94 | "colab": { 95 | "base_uri": "https://localhost:8080/", 96 | "height": 52 97 | }, 98 | "outputId": "74cb0c4d-0e91-4d28-99d7-1b080dfa69be" 99 | }, 100 | "source": [ 101 | "import numpy as np\n", 102 | "\n", 103 | "array1 = np.arange(4).reshape(2, 2)\n", 104 | "array2 = np.arange(2)\n", 105 | "array3 = array1 + array2\n", 106 | "\n", 107 | "print(array3)" 108 | ], 109 | "execution_count": 2, 110 | "outputs": [ 111 | { 112 | "output_type": "stream", 113 | "text": [ 114 | "[[0 2]\n", 115 | " [2 4]]\n" 116 | ], 117 | "name": "stdout" 118 | } 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "metadata": { 124 | "id": "yoaNGmROI8Fk", 125 | "colab_type": "code", 126 | "colab": { 127 | "base_uri": "https://localhost:8080/", 128 | "height": 87 129 | }, 130 | "outputId": "d88c62ad-e4ef-49aa-b40b-fbe9a9888ba6" 131 | }, 132 | "source": [ 133 | "import numpy as np\n", 134 | "\n", 135 | "array1 = np.arange(0, 8).reshape(2, 4)\n", 136 | "array2 = np.arange(0, 8).reshape(2, 4)\n", 137 | "array3 = np.concatenate([array1, array2], axis=0)\n", 138 | "array4 = np.arange(0, 4).reshape(4, 1)\n", 139 | "\n", 140 | "print(array3 + array4)" 141 | ], 142 | "execution_count": 3, 143 | "outputs": [ 144 | { 145 | "output_type": "stream", 146 | "text": [ 147 | "[[ 0 1 2 3]\n", 148 | " [ 5 6 7 8]\n", 149 | " [ 2 3 4 5]\n", 150 | " [ 7 8 9 10]]\n" 151 | ], 152 | "name": "stdout" 153 | } 154 | ] 155 | }, 156 | { 157 | "cell_type": "markdown", 158 | "metadata": { 159 | "id": "HR-bcngHJbo3", 160 | "colab_type": "text" 161 | }, 162 | "source": [ 163 | "Numpy의 **마스킹 연산**이 가능합니다." 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "metadata": { 169 | "id": "5XWPfcCEJK17", 170 | "colab_type": "code", 171 | "colab": { 172 | "base_uri": "https://localhost:8080/", 173 | "height": 228 174 | }, 175 | "outputId": "499685e3-925b-428f-d922-63eab1ef1d82" 176 | }, 177 | "source": [ 178 | "import numpy as np\n", 179 | "\n", 180 | "# Numpy 원소의 값을 조건에 따라 바꿀 때는 다음과 같이 합니다.\n", 181 | "# 반복문을 이용할 때보다 매우 빠르게 동작합니다.\n", 182 | "# 대체로 이미지 처리(Image Processing)에서 자주 활용됩니다.\n", 183 | "array1 = np.arange(16).reshape(4, 4)\n", 184 | "print(array1)\n", 185 | "\n", 186 | "array2 = array1 < 10\n", 187 | "print(array2)\n", 188 | "\n", 189 | "array1[array2] = 100\n", 190 | "print(array1)" 191 | ], 192 | "execution_count": 4, 193 | "outputs": [ 194 | { 195 | "output_type": "stream", 196 | "text": [ 197 | "[[ 0 1 2 3]\n", 198 | " [ 4 5 6 7]\n", 199 | " [ 8 9 10 11]\n", 200 | " [12 13 14 15]]\n", 201 | "[[ True True True True]\n", 202 | " [ True True True True]\n", 203 | " [ True True False False]\n", 204 | " [False False False False]]\n", 205 | "[[100 100 100 100]\n", 206 | " [100 100 100 100]\n", 207 | " [100 100 10 11]\n", 208 | " [ 12 13 14 15]]\n" 209 | ], 210 | "name": "stdout" 211 | } 212 | ] 213 | }, 214 | { 215 | "cell_type": "markdown", 216 | "metadata": { 217 | "id": "NznH01UXJnpn", 218 | "colab_type": "text" 219 | }, 220 | "source": [ 221 | "Numpy는 **다양한 집계 함수**가 존재합니다." 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "metadata": { 227 | "id": "iPhu1aBhJR8O", 228 | "colab_type": "code", 229 | "colab": { 230 | "base_uri": "https://localhost:8080/", 231 | "height": 87 232 | }, 233 | "outputId": "59d8968e-25cd-4828-c615-098b558c1f00" 234 | }, 235 | "source": [ 236 | "import numpy as np\n", 237 | "\n", 238 | "array = np.arange(16).reshape(4, 4)\n", 239 | "\n", 240 | "print(\"최대값:\", np.max(array))\n", 241 | "print(\"최소값:\", np.min(array))\n", 242 | "print(\"합계:\", np.sum(array))\n", 243 | "print(\"평균값:\", np.mean(array))" 244 | ], 245 | "execution_count": 5, 246 | "outputs": [ 247 | { 248 | "output_type": "stream", 249 | "text": [ 250 | "최대값: 15\n", 251 | "최소값: 0\n", 252 | "합계: 120\n", 253 | "평균값: 7.5\n" 254 | ], 255 | "name": "stdout" 256 | } 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "metadata": { 262 | "id": "2AQxs__jJP-L", 263 | "colab_type": "code", 264 | "colab": { 265 | "base_uri": "https://localhost:8080/", 266 | "height": 105 267 | }, 268 | "outputId": "3446db66-a125-4f7e-c832-e1ecc181a17d" 269 | }, 270 | "source": [ 271 | "import numpy as np\n", 272 | "\n", 273 | "array = np.arange(16).reshape(4, 4)\n", 274 | "\n", 275 | "print(array)\n", 276 | "print(\"합계:\", np.sum(array, axis=0))" 277 | ], 278 | "execution_count": 6, 279 | "outputs": [ 280 | { 281 | "output_type": "stream", 282 | "text": [ 283 | "[[ 0 1 2 3]\n", 284 | " [ 4 5 6 7]\n", 285 | " [ 8 9 10 11]\n", 286 | " [12 13 14 15]]\n", 287 | "합계: [24 28 32 36]\n" 288 | ], 289 | "name": "stdout" 290 | } 291 | ] 292 | } 293 | ] 294 | } -------------------------------------------------------------------------------- /04. Numpy의 연산과 함수/Python 데이터 분석과 이미지 처리 - Numpy의 연산과 함수.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/04. Numpy의 연산과 함수/Python 데이터 분석과 이미지 처리 - Numpy의 연산과 함수.pdf -------------------------------------------------------------------------------- /05. Numpy의 활용/Numpy의 활용.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Numpy의 활용", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "mLSxrQLtL1lk", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## Numpy의 활용\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/05.%20Numpy%EC%9D%98%20%ED%99%9C%EC%9A%A9/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20Numpy%EC%9D%98%20%ED%99%9C%EC%9A%A9.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "4QwfuGHNL7qv", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "Python의 Numpy는 **저장 및 불러오기**가 가능합니다." 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "metadata": { 51 | "id": "cJ9HX7GtL6tT", 52 | "colab_type": "code", 53 | "colab": { 54 | "base_uri": "https://localhost:8080/", 55 | "height": 34 56 | }, 57 | "outputId": "4bb17042-2e41-469c-ae45-1cda452a45a4" 58 | }, 59 | "source": [ 60 | "import numpy as np\n", 61 | "\n", 62 | "# 단일 객체 저장 및 불러오기\n", 63 | "array = np.arange(0, 10)\n", 64 | "np.save('saved.npy', array)\n", 65 | "\n", 66 | "result = np.load('saved.npy')\n", 67 | "print(result)" 68 | ], 69 | "execution_count": 1, 70 | "outputs": [ 71 | { 72 | "output_type": "stream", 73 | "text": [ 74 | "[0 1 2 3 4 5 6 7 8 9]\n" 75 | ], 76 | "name": "stdout" 77 | } 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": { 83 | "id": "1Bq-T643MGXP", 84 | "colab_type": "text" 85 | }, 86 | "source": [ 87 | "여러 개의 Numpy의 객체를 하나의 파일에 저장하고 불러올 수 있습니다." 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "metadata": { 93 | "id": "nmqFl9ykMC5J", 94 | "colab_type": "code", 95 | "colab": { 96 | "base_uri": "https://localhost:8080/", 97 | "height": 52 98 | }, 99 | "outputId": "d2a60f6d-85ce-4fcf-8495-80cdaf5cb419" 100 | }, 101 | "source": [ 102 | "import numpy as np\n", 103 | "\n", 104 | "# 복수 객체 저장 및 불러오기\n", 105 | "array1 = np.arange(0, 10)\n", 106 | "array2 = np.arange(10, 20)\n", 107 | "np.savez('saved.npz', array1=array1, array2=array2)\n", 108 | "\n", 109 | "data = np.load('saved.npz')\n", 110 | "result1 = data['array1']\n", 111 | "result2 = data['array2']\n", 112 | "print(result1)\n", 113 | "print(result2)" 114 | ], 115 | "execution_count": 3, 116 | "outputs": [ 117 | { 118 | "output_type": "stream", 119 | "text": [ 120 | "[0 1 2 3 4 5 6 7 8 9]\n", 121 | "[10 11 12 13 14 15 16 17 18 19]\n" 122 | ], 123 | "name": "stdout" 124 | } 125 | ] 126 | }, 127 | { 128 | "cell_type": "markdown", 129 | "metadata": { 130 | "id": "7v2Gr9_xMaCg", 131 | "colab_type": "text" 132 | }, 133 | "source": [ 134 | "Numpy의 원소들은 특정한 기준에 따라서 **정렬**할 수 있습니다." 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "metadata": { 140 | "id": "nJ2GKQqMMPhA", 141 | "colab_type": "code", 142 | "colab": { 143 | "base_uri": "https://localhost:8080/", 144 | "height": 87 145 | }, 146 | "outputId": "5ae93570-2cc5-42de-a45d-f0f93147e69d" 147 | }, 148 | "source": [ 149 | "import numpy as np\n", 150 | "\n", 151 | "# Numpy 원소 오름차순 정렬\n", 152 | "array = np.array([5, 9, 10, 3, 1])\n", 153 | "array.sort()\n", 154 | "print(array)\n", 155 | "\n", 156 | "# Numpy 원소 내림차순 정렬\n", 157 | "array = np.array([5, 9, 10, 3, 1])\n", 158 | "array.sort()\n", 159 | "print(array[::-1])\n", 160 | "\n", 161 | "# 각 열을 기준으로 정렬\n", 162 | "array = np.array([[5, 9, 10, 3, 1], [8, 3, 4, 2, 5]])\n", 163 | "array.sort(axis=0)\n", 164 | "print(array)" 165 | ], 166 | "execution_count": 4, 167 | "outputs": [ 168 | { 169 | "output_type": "stream", 170 | "text": [ 171 | "[ 1 3 5 9 10]\n", 172 | "[10 9 5 3 1]\n", 173 | "[[ 5 3 4 2 1]\n", 174 | " [ 8 9 10 3 5]]\n" 175 | ], 176 | "name": "stdout" 177 | } 178 | ] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "metadata": { 183 | "id": "XAk0Jg_yMo44", 184 | "colab_type": "text" 185 | }, 186 | "source": [ 187 | "Numpy 관련 자주 사용되는 함수는 다음과 같습니다." 188 | ] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "metadata": { 193 | "id": "6_bsO1aEMg8k", 194 | "colab_type": "code", 195 | "colab": { 196 | "base_uri": "https://localhost:8080/", 197 | "height": 105 198 | }, 199 | "outputId": "46fc3e62-1478-40ce-acbe-a33f4f0b763c" 200 | }, 201 | "source": [ 202 | "import numpy as np\n", 203 | "\n", 204 | "# 균일한 간격으로 데이터 생성\n", 205 | "array = np.linspace(0, 10, 5)\n", 206 | "print(array)\n", 207 | "\n", 208 | "# 난수의 재연(실행마다 결과 동일)\n", 209 | "np.random.seed(7)\n", 210 | "print(np.random.randint(0, 10, (2, 3)))\n", 211 | "\n", 212 | "# Numpy 배열 객체 복사\n", 213 | "array1 = np.arange(0, 10)\n", 214 | "array2 = array1.copy()\n", 215 | "print(array2)\n", 216 | "\n", 217 | "# 중복된 원소 제거\n", 218 | "array = np.array([1, 1, 2, 3, 3, 3, 1])\n", 219 | "print(np.unique(array))" 220 | ], 221 | "execution_count": 6, 222 | "outputs": [ 223 | { 224 | "output_type": "stream", 225 | "text": [ 226 | "[ 0. 2.5 5. 7.5 10. ]\n", 227 | "[[4 9 6]\n", 228 | " [3 3 7]]\n", 229 | "[0 1 2 3 4 5 6 7 8 9]\n", 230 | "[1 2 3]\n" 231 | ], 232 | "name": "stdout" 233 | } 234 | ] 235 | } 236 | ] 237 | } -------------------------------------------------------------------------------- /05. Numpy의 활용/Python 데이터 분석과 이미지 처리 - Numpy의 활용.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/05. Numpy의 활용/Python 데이터 분석과 이미지 처리 - Numpy의 활용.pdf -------------------------------------------------------------------------------- /06. OpenCV 소개 및 기본 사용법/Python 데이터 분석과 이미지 처리 - OpenCV 소개 및 기본 사용법.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/06. OpenCV 소개 및 기본 사용법/Python 데이터 분석과 이미지 처리 - OpenCV 소개 및 기본 사용법.pdf -------------------------------------------------------------------------------- /07. OpenCV 이미지 연산/Python 데이터 분석과 이미지 처리 - OpenCV 이미지 연산.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/07. OpenCV 이미지 연산/Python 데이터 분석과 이미지 처리 - OpenCV 이미지 연산.pdf -------------------------------------------------------------------------------- /08. OpenCV 이미지 변형/Python 데이터 분석과 이미지 처리 - OpenCV 이미지 변형.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/08. OpenCV 이미지 변형/Python 데이터 분석과 이미지 처리 - OpenCV 이미지 변형.pdf -------------------------------------------------------------------------------- /09. OpenCV 이미지 합치기/Python 데이터 분석과 이미지 처리 - OpenCV 이미지 합치기.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/09. OpenCV 이미지 합치기/Python 데이터 분석과 이미지 처리 - OpenCV 이미지 합치기.pdf -------------------------------------------------------------------------------- /10. OpenCV 임계점 처리하기/Python 데이터 분석과 이미지 처리 - OpenCV 임계점 처리하기.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/10. OpenCV 임계점 처리하기/Python 데이터 분석과 이미지 처리 - OpenCV 임계점 처리하기.pdf -------------------------------------------------------------------------------- /11. OpenCV Tracker/OpenCV Tracker.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "OpenCV Tracker", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "o9DKbjierGO_", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## OpenCV Tracker\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/11.%20OpenCV%20Tracker/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20OpenCV%20Tracker.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "JOEp9Hg0rI8a", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "cv2.createTracker(track_bar, name, window_name, value, count, on_change): Tracker를 생성하는 함수\n", 46 | "\n", 47 | "- value: 초기 값\n", 48 | "- count: Max 값 (Min: 0)\n", 49 | "- on_change: 값이 변경될 때 호출되는 Callback 함수\n", 50 | "\n", 51 | "cv2.getTrackerPos(track_bar, name, window_name): Tracker로부터 값을 얻어 오는 함수" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": { 57 | "id": "6XrNbFUzr1vy", 58 | "colab_type": "text" 59 | }, 60 | "source": [ 61 | "### OpenCV Tracker 실습\n", 62 | "\n", 63 | "- *본 실습은 PyCharm등의 **개인 개발환경에서 진행**하세요.*" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "metadata": { 69 | "id": "knbs8aM7rmyD", 70 | "colab_type": "code", 71 | "colab": {} 72 | }, 73 | "source": [ 74 | "import cv2\n", 75 | "import numpy as np\n", 76 | "\n", 77 | "def change_color(x):\n", 78 | " r = cv2.getTrackbarPos(\"R\", \"Image\")\n", 79 | " g = cv2.getTrackbarPos(\"G\", \"Image\")\n", 80 | " b = cv2.getTrackbarPos(\"B\", \"Image\")\n", 81 | " image[:] = [b, g, r]\n", 82 | " cv2.imshow('Image', image)\n", 83 | " \n", 84 | "image = np.zeros((600, 400, 3), np.uint8)\n", 85 | "cv2.namedWindow(\"Image\")\n", 86 | "\n", 87 | "cv2.createTrackbar(\"R\", \"Image\", 0, 255, change_color)\n", 88 | "cv2.createTrackbar(\"G\", \"Image\", 0, 255, change_color)\n", 89 | "cv2.createTrackbar(\"B\", \"Image\", 0, 255, change_color)\n", 90 | "\n", 91 | "cv2.imshow('Image', image)\n", 92 | "cv2.waitKey(0)" 93 | ], 94 | "execution_count": 0, 95 | "outputs": [] 96 | } 97 | ] 98 | } -------------------------------------------------------------------------------- /11. OpenCV Tracker/Python 데이터 분석과 이미지 처리 - OpenCV Tracker.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/11. OpenCV Tracker/Python 데이터 분석과 이미지 처리 - OpenCV Tracker.pdf -------------------------------------------------------------------------------- /12. OpenCV 도형 그리기/OpenCV 도형 그리기.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "OpenCV 도형 그리기", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "collapsed_sections": [], 10 | "include_colab_link": true 11 | }, 12 | "kernelspec": { 13 | "name": "python3", 14 | "display_name": "Python 3" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "markdown", 20 | "metadata": { 21 | "id": "view-in-github", 22 | "colab_type": "text" 23 | }, 24 | "source": [ 25 | "\"Open" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": { 31 | "id": "LPUElEH5tnDa", 32 | "colab_type": "text" 33 | }, 34 | "source": [ 35 | "## OpenCV 도형 그리기\n", 36 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/12.%20OpenCV%20%EB%8F%84%ED%98%95%20%EA%B7%B8%EB%A6%AC%EA%B8%B0/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20OpenCV%20%EB%8F%84%ED%98%95%20%EA%B7%B8%EB%A6%AC%EA%B8%B0.pdf)" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "id": "UtmSO9nDtfVr", 43 | "colab_type": "text" 44 | }, 45 | "source": [ 46 | "cv2.line(image, start, end, color, thickness): 하나의 직선을 그리는 함수\n", 47 | "\n", 48 | "- start: 시작 좌표 (2차원)\n", 49 | "- end: 종료 좌표 (2차원)\n", 50 | "- thickness: 선의 두께" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "metadata": { 56 | "id": "0QuCX3vPt_ky", 57 | "colab_type": "code", 58 | "outputId": "2bf97614-32e5-45a7-d7b3-768121ab458e", 59 | "colab": { 60 | "base_uri": "https://localhost:8080/", 61 | "height": 269 62 | } 63 | }, 64 | "source": [ 65 | "import cv2\n", 66 | "import numpy as np\n", 67 | "import matplotlib.pyplot as plt\n", 68 | "\n", 69 | "image = np.full((512, 512, 3), 255, np.uint8)\n", 70 | "image = cv2.line(image, (0, 0), (255, 255), (255, 0, 0), 3)\n", 71 | "\n", 72 | "plt.imshow(image)\n", 73 | "plt.show()" 74 | ], 75 | "execution_count": 0, 76 | "outputs": [ 77 | { 78 | "output_type": "display_data", 79 | "data": { 80 | "image/png": "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\n1NAD3QAAAABJRU5ErkJggg==\n", 81 | "text/plain": [ 82 | "
" 83 | ] 84 | }, 85 | "metadata": { 86 | "tags": [] 87 | } 88 | } 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": { 94 | "id": "yXvAguzMutmB", 95 | "colab_type": "text" 96 | }, 97 | "source": [ 98 | "cv2.rectangle(image, start, end, color, thickness): 하나의 사각형을 그리는 함수\n", 99 | "\n", 100 | "- start: 시작 좌표 (2차원)\n", 101 | "- end: 종료 좌표 (2차원)\n", 102 | "- thickness: 선의 두께 (채우기: -1)" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "metadata": { 108 | "id": "1xOYyGAzuP3x", 109 | "colab_type": "code", 110 | "outputId": "8aae029d-8579-4d3b-e908-2f02ea2d5ee0", 111 | "colab": { 112 | "base_uri": "https://localhost:8080/", 113 | "height": 269 114 | } 115 | }, 116 | "source": [ 117 | "import cv2\n", 118 | "import numpy as np\n", 119 | "import matplotlib.pyplot as plt\n", 120 | "\n", 121 | "image = np.full((512, 512, 3), 255, np.uint8)\n", 122 | "image = cv2.rectangle(image, (20, 20), (255, 255), (255, 0, 0), 3)\n", 123 | "\n", 124 | "plt.imshow(image)\n", 125 | "plt.show()" 126 | ], 127 | "execution_count": 0, 128 | "outputs": [ 129 | { 130 | "output_type": "display_data", 131 | "data": { 132 | "image/png": "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\n", 133 | "text/plain": [ 134 | "
" 135 | ] 136 | }, 137 | "metadata": { 138 | "tags": [] 139 | } 140 | } 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": { 146 | "id": "mkMN5VY_u6Lp", 147 | "colab_type": "text" 148 | }, 149 | "source": [ 150 | "cv2.circle(image, center, radian, color, thickness): 하나의 원을 그리는 함수\n", 151 | "\n", 152 | "- center: 원의 중심 (2차원)\n", 153 | "- radian: 반지름\n", 154 | "- thickness: 선의 두께 (채우기: -1)" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "metadata": { 160 | "id": "lJtMSPN6ur_e", 161 | "colab_type": "code", 162 | "outputId": "fde7c9e5-55dc-4bff-8e5c-9598fa0c3c8c", 163 | "colab": { 164 | "base_uri": "https://localhost:8080/", 165 | "height": 269 166 | } 167 | }, 168 | "source": [ 169 | "import cv2\n", 170 | "import numpy as np\n", 171 | "import matplotlib.pyplot as plt\n", 172 | "\n", 173 | "image = np.full((512, 512, 3), 255, np.uint8)\n", 174 | "image = cv2.circle(image, (255, 255), 30, (255, 0, 0), 3)\n", 175 | "\n", 176 | "plt.imshow(image)\n", 177 | "plt.show()" 178 | ], 179 | "execution_count": 0, 180 | "outputs": [ 181 | { 182 | "output_type": "display_data", 183 | "data": { 184 | "image/png": "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\nTkSuQmCC\n", 185 | "text/plain": [ 186 | "
" 187 | ] 188 | }, 189 | "metadata": { 190 | "tags": [] 191 | } 192 | } 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": { 198 | "id": "zg5B8SVfvdIy", 199 | "colab_type": "text" 200 | }, 201 | "source": [ 202 | "cv2.polylines(image, points, is_closed, color, thickness): 하나의 다각형을 그리는 함수\n", 203 | "\n", 204 | "- points: 꼭지점들\n", 205 | "- is_closed: 닫힌 도형 여부\n", 206 | "- thickness: 선의 두께 (채우기: -1)" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "metadata": { 212 | "id": "9NUB5QmNvT9y", 213 | "colab_type": "code", 214 | "outputId": "32da97b7-89aa-4621-8847-5e5739397011", 215 | "colab": { 216 | "base_uri": "https://localhost:8080/", 217 | "height": 269 218 | } 219 | }, 220 | "source": [ 221 | "import cv2\n", 222 | "import numpy as np\n", 223 | "import matplotlib.pyplot as plt\n", 224 | "\n", 225 | "image = np.full((512, 512, 3), 255, np.uint8)\n", 226 | "points = np.array([[5, 5], [128, 258], [483, 444], [400, 150]])\n", 227 | "image = cv2.polylines(image, [points], True, (0, 0, 255), 4)\n", 228 | "\n", 229 | "plt.imshow(image)\n", 230 | "plt.show()" 231 | ], 232 | "execution_count": 0, 233 | "outputs": [ 234 | { 235 | "output_type": "display_data", 236 | "data": { 237 | "image/png": "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\n", 238 | "text/plain": [ 239 | "
" 240 | ] 241 | }, 242 | "metadata": { 243 | "tags": [] 244 | } 245 | } 246 | ] 247 | }, 248 | { 249 | "cell_type": "markdown", 250 | "metadata": { 251 | "id": "vFKnoGGFwmbt", 252 | "colab_type": "text" 253 | }, 254 | "source": [ 255 | "cv2.putText(image, text, position, font_type, font_scale, color): 하나의 텍스트를 그리는 함수\n", 256 | "\n", 257 | "- position: 텍스트가 출력될 위치\n", 258 | "- font_type: 글씨체\n", 259 | "- font_scale: 글씨 크기 가중치" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "metadata": { 265 | "id": "hzydaUpUwe8L", 266 | "colab_type": "code", 267 | "outputId": "620ff84d-170b-42b9-c713-25dfa006d023", 268 | "colab": { 269 | "base_uri": "https://localhost:8080/", 270 | "height": 269 271 | } 272 | }, 273 | "source": [ 274 | "import cv2\n", 275 | "import numpy as np\n", 276 | "import matplotlib.pyplot as plt\n", 277 | "\n", 278 | "image = np.full((512, 512, 3), 255, np.uint8)\n", 279 | "image = cv2.putText(image, 'Hello World', (0, 200), cv2.FONT_ITALIC, 2, (255, 0, 0))\n", 280 | "\n", 281 | "plt.imshow(image)\n", 282 | "plt.show()" 283 | ], 284 | "execution_count": 0, 285 | "outputs": [ 286 | { 287 | "output_type": "display_data", 288 | "data": { 289 | "image/png": "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\n", 290 | "text/plain": [ 291 | "
" 292 | ] 293 | }, 294 | "metadata": { 295 | "tags": [] 296 | } 297 | } 298 | ] 299 | } 300 | ] 301 | } -------------------------------------------------------------------------------- /12. OpenCV 도형 그리기/Python 데이터 분석과 이미지 처리 - OpenCV 도형 그리기.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/12. OpenCV 도형 그리기/Python 데이터 분석과 이미지 처리 - OpenCV 도형 그리기.pdf -------------------------------------------------------------------------------- /13. OpenCV Contours/Python 데이터 분석과 이미지 처리 - OpenCV Contours.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/13. OpenCV Contours/Python 데이터 분석과 이미지 처리 - OpenCV Contours.pdf -------------------------------------------------------------------------------- /14. OpenCV Contours 처리/Python 데이터 분석과 이미지 처리 - OpenCV Contours 처리.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/14. OpenCV Contours 처리/Python 데이터 분석과 이미지 처리 - OpenCV Contours 처리.pdf -------------------------------------------------------------------------------- /15. OpenCV Filtering/Python 데이터 분석과 이미지 처리 - OpenCV Filtering.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/15. OpenCV Filtering/Python 데이터 분석과 이미지 처리 - OpenCV Filtering.pdf -------------------------------------------------------------------------------- /16. KNN Algorithm/KNN Algorithm.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "KNN Algorithm", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "zd6X4p1HtmJo", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## KNN Algorithm\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/16.%20KNN%20Algorithm/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20KNN%20Algorithm.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "3kbmRDiPv4P_", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "K-Nearest Neighbor\n", 46 | "\n", 47 | "* KNN은 비지도학습(Unsupervised Learning)의 가장 간단한 예시입니다.\n", 48 | "* 다양한 레이블의 데이터 중에서, 자신과 가까운 데이터를 찾아 자신의 레이블을 결정하는 방식입니다." 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "metadata": { 54 | "id": "Kce7P2rKtmxe", 55 | "colab_type": "code", 56 | "colab": { 57 | "base_uri": "https://localhost:8080/", 58 | "height": 322 59 | }, 60 | "outputId": "6b728ff5-3e93-4c5a-e280-73c549427272" 61 | }, 62 | "source": [ 63 | "import cv2\n", 64 | "import numpy as np\n", 65 | "from matplotlib import pyplot as plt\n", 66 | "\n", 67 | "# 각 데이터의 위치: 25 X 2 크기에 각각 0 ~ 100\n", 68 | "trainData = np.random.randint(0, 100, (25, 2)).astype(np.float32)\n", 69 | "# 각 데이터는 0 or 1\n", 70 | "response = np.random.randint(0, 2, (25, 1)).astype(np.float32)\n", 71 | "\n", 72 | "# 값이 0인 데이터를 각각 (x, y) 위치에 빨간색으로 칠합니다.\n", 73 | "red = trainData[response.ravel() == 0]\n", 74 | "plt.scatter(red[:, 0], red[:, 1], 80, 'r', '^')\n", 75 | "# 값이 1인 데이터를 각각 (x, y) 위치에 파란색으로 칠합니다.\n", 76 | "blue = trainData[response.ravel() == 1]\n", 77 | "plt.scatter(blue[:, 0], blue[:, 1], 80, 'b', 's')\n", 78 | "\n", 79 | "# (0 ~ 100, 0 ~ 100) 위치의 데이터를 하나 생성해 칠합니다.\n", 80 | "newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)\n", 81 | "plt.scatter(newcomer[:, 0], newcomer[:, 1], 80, 'g', 'o')\n", 82 | "\n", 83 | "knn = cv2.ml.KNearest_create()\n", 84 | "knn.train(trainData, cv2.ml.ROW_SAMPLE, response)\n", 85 | "ret, results, neighbours, dist = knn.findNearest(newcomer, 3)\n", 86 | "\n", 87 | "# 가까운 3개를 찾고, 거리를 고려하여 자신을 정합니다.\n", 88 | "print(\"result : \", results)\n", 89 | "print(\"neighbours :\", neighbours)\n", 90 | "print(\"distance: \", dist)\n", 91 | "\n", 92 | "plt.show()" 93 | ], 94 | "execution_count": 9, 95 | "outputs": [ 96 | { 97 | "output_type": "stream", 98 | "text": [ 99 | "result : [[1.]]\n", 100 | "neighbours : [[1. 0. 1.]]\n", 101 | "distance: [[ 25. 97. 148.]]\n" 102 | ], 103 | "name": "stdout" 104 | }, 105 | { 106 | "output_type": "display_data", 107 | "data": { 108 | "image/png": "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\nAAAASUVORK5CYII=\n", 109 | "text/plain": [ 110 | "
" 111 | ] 112 | }, 113 | "metadata": { 114 | "tags": [] 115 | } 116 | } 117 | ] 118 | } 119 | ] 120 | } -------------------------------------------------------------------------------- /16. KNN Algorithm/Python 데이터 분석과 이미지 처리 - KNN Algorithm.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/16. KNN Algorithm/Python 데이터 분석과 이미지 처리 - KNN Algorithm.pdf -------------------------------------------------------------------------------- /17. KNN 숫자 인식 예제/Python 데이터 분석과 이미지 처리 - KNN 숫자 인식 예제.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/17. KNN 숫자 인식 예제/Python 데이터 분석과 이미지 처리 - KNN 숫자 인식 예제.pdf -------------------------------------------------------------------------------- /18. 중급 Captcha Hacking 1 - Problem Define/중급 Captcha Hacking (SCTF 2017 예선) ① Problem Define.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/18. 중급 Captcha Hacking 1 - Problem Define/중급 Captcha Hacking (SCTF 2017 예선) ① Problem Define.pdf -------------------------------------------------------------------------------- /19. 중급 Captcha Hacking 2 - 데이터 수집과 분석/중급 Captcha Hacking (SCTF 2017 예선) ② 데이터 수집과 분석.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/19. 중급 Captcha Hacking 2 - 데이터 수집과 분석/중급 Captcha Hacking (SCTF 2017 예선) ② 데이터 수집과 분석.pdf -------------------------------------------------------------------------------- /20. 중급 Captcha Hacking 3 - 데이터 정제/중급 Captcha Hacking (SCTF 2017 예선) ③ 데이터 정제.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/20. 중급 Captcha Hacking 3 - 데이터 정제/중급 Captcha Hacking (SCTF 2017 예선) ③ 데이터 정제.pdf -------------------------------------------------------------------------------- /21. 중급 Captcha Hacking 4 - KNN 모델 학습/중급 Captcha Hacking (SCTF 2017 예선) ④ 데이터 정제.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/21. 중급 Captcha Hacking 4 - KNN 모델 학습/중급 Captcha Hacking (SCTF 2017 예선) ④ 데이터 정제.pdf -------------------------------------------------------------------------------- /22. 중급 Captcha Hacking 5 - 해킹 자동화/중급 Captcha Hacking (SCTF 2017 예선) ⑤ 해킹 자동화.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/22. 중급 Captcha Hacking 5 - 해킹 자동화/중급 Captcha Hacking (SCTF 2017 예선) ⑤ 해킹 자동화.pdf -------------------------------------------------------------------------------- /23. Pandas의 기본 사용법/Python 데이터 분석과 이미지 처리 - Pandas의 기본 사용법.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/23. Pandas의 기본 사용법/Python 데이터 분석과 이미지 처리 - Pandas의 기본 사용법.pdf -------------------------------------------------------------------------------- /24. Pandas의 연산과 함수/Pandas의 연산과 함수.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Pandas의 연산과 함수", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "lsJwi6bECTdM", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## Pandas의 연산과 함수\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/24.%20Pandas%EC%9D%98%20%EC%97%B0%EC%82%B0%EA%B3%BC%20%ED%95%A8%EC%88%98/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20Pandas%EC%9D%98%20%EC%97%B0%EC%82%B0%EA%B3%BC%20%ED%95%A8%EC%88%98.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "LdSqN5QgRTNQ", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "**데이터 프레임의 Null 여부 확인**" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "metadata": { 51 | "id": "je342Q6VRTwz", 52 | "colab_type": "code", 53 | "colab": { 54 | "base_uri": "https://localhost:8080/", 55 | "height": 369 56 | }, 57 | "outputId": "1fe0931d-8342-45ca-fa55-9f067d802475" 58 | }, 59 | "source": [ 60 | "import pandas as pd\n", 61 | "import numpy as np\n", 62 | "\n", 63 | "word_dict = {\n", 64 | " 'Apple': '사과',\n", 65 | " 'Banana': '바나나',\n", 66 | " 'Carrot': '당근',\n", 67 | " 'Durian': '두리안'\n", 68 | "}\n", 69 | "\n", 70 | "frequency_dict = {\n", 71 | " 'Apple': 3,\n", 72 | " 'Banana': 5,\n", 73 | " 'Carrot': np.nan,\n", 74 | " 'Durian': 2\n", 75 | "}\n", 76 | "\n", 77 | "importance_dict = {\n", 78 | " 'Apple': 3,\n", 79 | " 'Banana': 2,\n", 80 | " 'Carrot': 1,\n", 81 | " 'Durian': 1\n", 82 | "}\n", 83 | "\n", 84 | "word = pd.Series(word_dict)\n", 85 | "frequency = pd.Series(frequency_dict)\n", 86 | "importance = pd.Series(importance_dict)\n", 87 | "\n", 88 | "summary = pd.DataFrame({\n", 89 | " 'word': word,\n", 90 | " 'frequency': frequency,\n", 91 | " 'importance': importance\n", 92 | "})\n", 93 | "\n", 94 | "print(summary)\n", 95 | "print(summary.notnull())\n", 96 | "print(summary.isnull())\n", 97 | "summary['frequency'] = summary['frequency'].fillna('데이터 없음')\n", 98 | "print(summary)" 99 | ], 100 | "execution_count": 21, 101 | "outputs": [ 102 | { 103 | "output_type": "stream", 104 | "text": [ 105 | " word frequency importance\n", 106 | "Apple 사과 3.0 3\n", 107 | "Banana 바나나 5.0 2\n", 108 | "Carrot 당근 NaN 1\n", 109 | "Durian 두리안 2.0 1\n", 110 | " word frequency importance\n", 111 | "Apple True True True\n", 112 | "Banana True True True\n", 113 | "Carrot True False True\n", 114 | "Durian True True True\n", 115 | " word frequency importance\n", 116 | "Apple False False False\n", 117 | "Banana False False False\n", 118 | "Carrot False True False\n", 119 | "Durian False False False\n", 120 | " word frequency importance\n", 121 | "Apple 사과 3 3\n", 122 | "Banana 바나나 5 2\n", 123 | "Carrot 당근 데이터 없음 1\n", 124 | "Durian 두리안 2 1\n" 125 | ], 126 | "name": "stdout" 127 | } 128 | ] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "metadata": { 133 | "id": "PAvCz0t2SQ5d", 134 | "colab_type": "text" 135 | }, 136 | "source": [ 137 | "**시리즈 자료형의 연산**" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "metadata": { 143 | "id": "t4HT0IlrRmR9", 144 | "colab_type": "code", 145 | "colab": { 146 | "base_uri": "https://localhost:8080/", 147 | "height": 105 148 | }, 149 | "outputId": "f5da67c4-2afc-4520-e7cb-302443342d8e" 150 | }, 151 | "source": [ 152 | "import pandas as pd\n", 153 | "\n", 154 | "array1 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])\n", 155 | "array2 = pd.Series([4, 5, 6], index=['B', 'C', 'D'])\n", 156 | "\n", 157 | "array = array1.add(array2, fill_value=0)\n", 158 | "print(array)" 159 | ], 160 | "execution_count": 22, 161 | "outputs": [ 162 | { 163 | "output_type": "stream", 164 | "text": [ 165 | "A 1.0\n", 166 | "B 6.0\n", 167 | "C 8.0\n", 168 | "D 6.0\n", 169 | "dtype: float64\n" 170 | ], 171 | "name": "stdout" 172 | } 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": { 178 | "id": "r27yrotGSfGt", 179 | "colab_type": "text" 180 | }, 181 | "source": [ 182 | "**데이터 프레임 자료형의 연산**\n", 183 | "\n", 184 | "![image.png](data:image/png;base64,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)" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "metadata": { 190 | "id": "2fn0IFdtSY45", 191 | "colab_type": "code", 192 | "colab": { 193 | "base_uri": "https://localhost:8080/", 194 | "height": 228 195 | }, 196 | "outputId": "07d96d69-10cd-4f3c-ed9f-84fd32d8ec1e" 197 | }, 198 | "source": [ 199 | "import pandas as pd\n", 200 | "\n", 201 | "array1 = pd.DataFrame([[1, 2], [3, 4]], index=['A', 'B'])\n", 202 | "array2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['B', 'C', 'D'])\n", 203 | "\n", 204 | "print(array1)\n", 205 | "print(array2)\n", 206 | "\n", 207 | "array = array1.add(array2, fill_value=0)\n", 208 | "print(array)" 209 | ], 210 | "execution_count": 23, 211 | "outputs": [ 212 | { 213 | "output_type": "stream", 214 | "text": [ 215 | " 0 1\n", 216 | "A 1 2\n", 217 | "B 3 4\n", 218 | " 0 1 2\n", 219 | "B 1 2 3\n", 220 | "C 4 5 6\n", 221 | "D 7 8 9\n", 222 | " 0 1 2\n", 223 | "A 1.0 2.0 NaN\n", 224 | "B 4.0 6.0 3.0\n", 225 | "C 4.0 5.0 6.0\n", 226 | "D 7.0 8.0 9.0\n" 227 | ], 228 | "name": "stdout" 229 | } 230 | ] 231 | }, 232 | { 233 | "cell_type": "markdown", 234 | "metadata": { 235 | "id": "tLmm-W_gTAgl", 236 | "colab_type": "text" 237 | }, 238 | "source": [ 239 | "**데이터 프레임 집계 함수**" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "metadata": { 245 | "id": "8q8_tbW1Sz4F", 246 | "colab_type": "code", 247 | "colab": { 248 | "base_uri": "https://localhost:8080/", 249 | "height": 193 250 | }, 251 | "outputId": "c3df75ed-8a0c-4291-f8d5-8ffff81e0a6f" 252 | }, 253 | "source": [ 254 | "import pandas as pd\n", 255 | "\n", 256 | "array1 = pd.DataFrame([[1, 2], [3, 4]], index=['A', 'B'])\n", 257 | "array2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['B', 'C', 'D'])\n", 258 | "\n", 259 | "array = array1.add(array2, fill_value=0)\n", 260 | "print(array)\n", 261 | "print(\"컬럼 1의 합:\", array[1].sum())\n", 262 | "print(array.sum())" 263 | ], 264 | "execution_count": 27, 265 | "outputs": [ 266 | { 267 | "output_type": "stream", 268 | "text": [ 269 | " 0 1 2\n", 270 | "A 1.0 2.0 NaN\n", 271 | "B 4.0 6.0 3.0\n", 272 | "C 4.0 5.0 6.0\n", 273 | "D 7.0 8.0 9.0\n", 274 | "컬럼 1의 합: 21.0\n", 275 | "0 16.0\n", 276 | "1 21.0\n", 277 | "2 18.0\n", 278 | "dtype: float64\n" 279 | ], 280 | "name": "stdout" 281 | } 282 | ] 283 | }, 284 | { 285 | "cell_type": "markdown", 286 | "metadata": { 287 | "id": "F8Kt8xD4TKB8", 288 | "colab_type": "text" 289 | }, 290 | "source": [ 291 | "**데이터 프레임 정렬 함수**" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "metadata": { 297 | "id": "gR2mxcUgTLLr", 298 | "colab_type": "code", 299 | "colab": { 300 | "base_uri": "https://localhost:8080/", 301 | "height": 193 302 | }, 303 | "outputId": "9de5408e-4d53-4028-d81f-5281e988f842" 304 | }, 305 | "source": [ 306 | "import pandas as pd\n", 307 | "import numpy as np\n", 308 | "\n", 309 | "word_dict = {\n", 310 | " 'Apple': '사과',\n", 311 | " 'Banana': '바나나',\n", 312 | " 'Carrot': '당근',\n", 313 | " 'Durian': '두리안'\n", 314 | "}\n", 315 | "\n", 316 | "frequency_dict = {\n", 317 | " 'Apple': 3,\n", 318 | " 'Banana': 5,\n", 319 | " 'Carrot': 1,\n", 320 | " 'Durian': 2\n", 321 | "}\n", 322 | "\n", 323 | "importance_dict = {\n", 324 | " 'Apple': 3,\n", 325 | " 'Banana': 2,\n", 326 | " 'Carrot': 1,\n", 327 | " 'Durian': 1\n", 328 | "}\n", 329 | "\n", 330 | "word = pd.Series(word_dict)\n", 331 | "frequency = pd.Series(frequency_dict)\n", 332 | "importance = pd.Series(importance_dict)\n", 333 | "\n", 334 | "summary = pd.DataFrame({\n", 335 | " 'word': word,\n", 336 | " 'frequency': frequency,\n", 337 | " 'importance': importance\n", 338 | "})\n", 339 | "\n", 340 | "print(summary)\n", 341 | "summary = summary.sort_values('frequency', ascending=False)\n", 342 | "print(summary)" 343 | ], 344 | "execution_count": 25, 345 | "outputs": [ 346 | { 347 | "output_type": "stream", 348 | "text": [ 349 | " word frequency importance\n", 350 | "Apple 사과 3 3\n", 351 | "Banana 바나나 5 2\n", 352 | "Carrot 당근 1 1\n", 353 | "Durian 두리안 2 1\n", 354 | " word frequency importance\n", 355 | "Banana 바나나 5 2\n", 356 | "Apple 사과 3 3\n", 357 | "Durian 두리안 2 1\n", 358 | "Carrot 당근 1 1\n" 359 | ], 360 | "name": "stdout" 361 | } 362 | ] 363 | } 364 | ] 365 | } -------------------------------------------------------------------------------- /24. Pandas의 연산과 함수/Python 데이터 분석과 이미지 처리 - Pandas의 연산과 함수.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/24. Pandas의 연산과 함수/Python 데이터 분석과 이미지 처리 - Pandas의 연산과 함수.pdf -------------------------------------------------------------------------------- /25. Pandas의 활용/Pandas의 활용.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Pandas의 활용", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "Siz51OxuV4d8", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## Pandas의 활용\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/25.%20Pandas%EC%9D%98%20%ED%99%9C%EC%9A%A9/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20Pandas%EC%9D%98%20%ED%99%9C%EC%9A%A9.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "a6yNz5AwV9xy", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "**데이터 프레임의 마스킹**" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "metadata": { 51 | "id": "JmS4kFl4V4vq", 52 | "colab_type": "code", 53 | "colab": { 54 | "base_uri": "https://localhost:8080/", 55 | "height": 175 56 | }, 57 | "outputId": "fe2f8196-7680-4319-de50-686c337009e2" 58 | }, 59 | "source": [ 60 | "import numpy as np\n", 61 | "import pandas as pd\n", 62 | "\n", 63 | "df = pd.DataFrame(np.random.randint(1, 10, (2, 2)), index=[0, 1], columns=[\"A\", \"B\"])\n", 64 | "# 데이터 프레임 출력하기\n", 65 | "print(df)\n", 66 | "# 컬럼 A의 각 원소가 5보다 작거나 같은지 출력\n", 67 | "print(df[\"A\"] <= 5)\n", 68 | "# 컬럼 A의 원소가 5보다 작고, 컬럼 B의 원소가 8보다 작은 행 추출\n", 69 | "print(df.query(\"A <= 5 and B <= 8\"))" 70 | ], 71 | "execution_count": 14, 72 | "outputs": [ 73 | { 74 | "output_type": "stream", 75 | "text": [ 76 | " A B\n", 77 | "0 4 6\n", 78 | "1 4 5\n", 79 | "0 True\n", 80 | "1 True\n", 81 | "Name: A, dtype: bool\n", 82 | " A B\n", 83 | "0 4 6\n", 84 | "1 4 5\n" 85 | ], 86 | "name": "stdout" 87 | } 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": { 93 | "id": "AzDJfh-GaFMM", 94 | "colab_type": "text" 95 | }, 96 | "source": [ 97 | "**데이터 프레임의 개별 연산 ①**" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "metadata": { 103 | "id": "F84X4ZN5aFTj", 104 | "colab_type": "code", 105 | "colab": { 106 | "base_uri": "https://localhost:8080/", 107 | "height": 175 108 | }, 109 | "outputId": "516acddf-1507-46a5-d1af-1f9da743e63b" 110 | }, 111 | "source": [ 112 | "import pandas as pd\n", 113 | "\n", 114 | "df = pd.DataFrame([[1, 2, 3, 4], [1, 2, 3, 4]], index=[0, 1], columns=[\"A\", \"B\", \"C\", \"D\"])\n", 115 | "print(df)\n", 116 | "\n", 117 | "df = df.apply(lambda x: x + 1)\n", 118 | "print(df)\n", 119 | "\n", 120 | "def addOne(x):\n", 121 | " return x + 1\n", 122 | " \n", 123 | "df = df.apply(addOne)\n", 124 | "print(df)" 125 | ], 126 | "execution_count": 23, 127 | "outputs": [ 128 | { 129 | "output_type": "stream", 130 | "text": [ 131 | " A B C D\n", 132 | "0 1 2 3 4\n", 133 | "1 1 2 3 4\n", 134 | " A B C D\n", 135 | "0 2 3 4 5\n", 136 | "1 2 3 4 5\n", 137 | " A B C D\n", 138 | "0 3 4 5 6\n", 139 | "1 3 4 5 6\n" 140 | ], 141 | "name": "stdout" 142 | } 143 | ] 144 | }, 145 | { 146 | "cell_type": "markdown", 147 | "metadata": { 148 | "id": "tUnEKp3rWISR", 149 | "colab_type": "text" 150 | }, 151 | "source": [ 152 | "**데이터 프레임의 개별 연산 ②**" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "metadata": { 158 | "id": "5rU-cJcMWHHW", 159 | "colab_type": "code", 160 | "colab": { 161 | "base_uri": "https://localhost:8080/", 162 | "height": 122 163 | }, 164 | "outputId": "51af8aa9-a719-400e-ba9c-ac9cb44d69b1" 165 | }, 166 | "source": [ 167 | "import pandas as pd\n", 168 | "\n", 169 | "df = pd.DataFrame([\n", 170 | " ['Apple', 'Apple', 'Carrot', 'Banana'],\n", 171 | " ['Durian', 'Banana', 'Apple', 'Carrot']],\n", 172 | " index=[0, 1],\n", 173 | " columns=[\"A\", \"B\", \"C\", \"D\"])\n", 174 | "\n", 175 | "print(df)\n", 176 | "df = df.replace({\"Apple\": \"Airport\"})\n", 177 | "print(df)" 178 | ], 179 | "execution_count": 24, 180 | "outputs": [ 181 | { 182 | "output_type": "stream", 183 | "text": [ 184 | " A B C D\n", 185 | "0 Apple Apple Carrot Banana\n", 186 | "1 Durian Banana Apple Carrot\n", 187 | " A B C D\n", 188 | "0 Airport Airport Carrot Banana\n", 189 | "1 Durian Banana Airport Carrot\n" 190 | ], 191 | "name": "stdout" 192 | } 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": { 198 | "id": "Si54bY9DWiCL", 199 | "colab_type": "text" 200 | }, 201 | "source": [ 202 | "**데이터 프레임의 그룹화 ①**" 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "metadata": { 208 | "id": "X_5G6gbRWabq", 209 | "colab_type": "code", 210 | "colab": { 211 | "base_uri": "https://localhost:8080/", 212 | "height": 175 213 | }, 214 | "outputId": "b0e2add1-a22b-4292-ec49-6b4c29a8eaff" 215 | }, 216 | "source": [ 217 | "import pandas as pd\n", 218 | "\n", 219 | "df = pd.DataFrame([\n", 220 | " ['Apple', 7, 'Fruit'],\n", 221 | " ['Banana', 3, 'Fruit'],\n", 222 | " ['Beef', 5, 'Meal'],\n", 223 | " ['Kimchi', 4, 'Meal']],\n", 224 | " columns=[\"Name\", \"Frequency\", \"Type\"])\n", 225 | "\n", 226 | "print(df)\n", 227 | "print(df.groupby(['Type']).sum())" 228 | ], 229 | "execution_count": 25, 230 | "outputs": [ 231 | { 232 | "output_type": "stream", 233 | "text": [ 234 | " Name Frequency Type\n", 235 | "0 Apple 7 Fruit\n", 236 | "1 Banana 3 Fruit\n", 237 | "2 Beef 5 Meal\n", 238 | "3 Kimchi 4 Meal\n", 239 | " Frequency\n", 240 | "Type \n", 241 | "Fruit 10\n", 242 | "Meal 9\n" 243 | ], 244 | "name": "stdout" 245 | } 246 | ] 247 | }, 248 | { 249 | "cell_type": "markdown", 250 | "metadata": { 251 | "id": "e05shubVXAFi", 252 | "colab_type": "text" 253 | }, 254 | "source": [ 255 | "**데이터 프레임의 그룹화 ②**" 256 | ] 257 | }, 258 | { 259 | "cell_type": "code", 260 | "metadata": { 261 | "id": "tK8xeFvFWrh5", 262 | "colab_type": "code", 263 | "colab": { 264 | "base_uri": "https://localhost:8080/", 265 | "height": 193 266 | }, 267 | "outputId": "3d2ceed8-5560-44eb-9d7b-6ab02f8cd1f6" 268 | }, 269 | "source": [ 270 | "import numpy as np\n", 271 | "import pandas as pd\n", 272 | "\n", 273 | "df = pd.DataFrame([\n", 274 | " ['Apple', 7, 5, 'Fruit'],\n", 275 | " ['Banana', 3, 6, 'Fruit'],\n", 276 | " ['Beef', 5, 2, 'Meal'],\n", 277 | " ['Kimchi', 4, 8, 'Meal']],\n", 278 | " columns=[\"Name\", \"Frequency\", \"Importance\", \"Type\"])\n", 279 | "\n", 280 | "print(df)\n", 281 | "print(df.groupby([\"Type\"]).aggregate([min, max, np.average]))" 282 | ], 283 | "execution_count": 4, 284 | "outputs": [ 285 | { 286 | "output_type": "stream", 287 | "text": [ 288 | " Name Frequency Importance Type\n", 289 | "0 Apple 7 5 Fruit\n", 290 | "1 Banana 3 6 Fruit\n", 291 | "2 Beef 5 2 Meal\n", 292 | "3 Kimchi 4 8 Meal\n", 293 | " Frequency Importance \n", 294 | " min max average min max average\n", 295 | "Type \n", 296 | "Fruit 3 7 5.0 5 6 5.5\n", 297 | "Meal 4 5 4.5 2 8 5.0\n" 298 | ], 299 | "name": "stdout" 300 | } 301 | ] 302 | }, 303 | { 304 | "cell_type": "markdown", 305 | "metadata": { 306 | "id": "KM1IGVLkXfeT", 307 | "colab_type": "text" 308 | }, 309 | "source": [ 310 | "**데이터 프레임의 그룹화 ③**" 311 | ] 312 | }, 313 | { 314 | "cell_type": "code", 315 | "metadata": { 316 | "id": "-X9CQdRtXKbi", 317 | "colab_type": "code", 318 | "colab": { 319 | "base_uri": "https://localhost:8080/", 320 | "height": 158 321 | }, 322 | "outputId": "fa20f08c-ee02-4ee9-f3e8-1aee464fe167" 323 | }, 324 | "source": [ 325 | "import pandas as pd\n", 326 | "\n", 327 | "df = pd.DataFrame([\n", 328 | " ['Apple', 7, 5, 'Fruit'],\n", 329 | " ['Banana', 3, 6, 'Fruit'],\n", 330 | " ['Beef', 5, 2, 'Meal'],\n", 331 | " ['Kimchi', 4, 8, 'Meal']],\n", 332 | " columns=[\"Name\", \"Frequency\", \"Importance\", \"Type\"])\n", 333 | "\n", 334 | "\n", 335 | "def my_filter(data):\n", 336 | " return data[\"Frequency\"].mean() >= 5\n", 337 | "\n", 338 | "\n", 339 | "print(df)\n", 340 | "df = df.groupby(\"Type\").filter(my_filter)\n", 341 | "print(df)" 342 | ], 343 | "execution_count": 9, 344 | "outputs": [ 345 | { 346 | "output_type": "stream", 347 | "text": [ 348 | " Name Frequency Importance Type\n", 349 | "0 Apple 7 5 Fruit\n", 350 | "1 Banana 3 6 Fruit\n", 351 | "2 Beef 5 2 Meal\n", 352 | "3 Kimchi 4 8 Meal\n", 353 | " Name Frequency Importance Type\n", 354 | "0 Apple 7 5 Fruit\n", 355 | "1 Banana 3 6 Fruit\n" 356 | ], 357 | "name": "stdout" 358 | } 359 | ] 360 | }, 361 | { 362 | "cell_type": "markdown", 363 | "metadata": { 364 | "id": "u7MF95UNYLXK", 365 | "colab_type": "text" 366 | }, 367 | "source": [ 368 | "**데이터 프레임의 그룹화 ④**" 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "metadata": { 374 | "id": "CoBR2GKrXv2f", 375 | "colab_type": "code", 376 | "colab": { 377 | "base_uri": "https://localhost:8080/", 378 | "height": 70 379 | }, 380 | "outputId": "d47361d0-fddf-432a-e1e6-03e1bae38987" 381 | }, 382 | "source": [ 383 | "import pandas as pd\n", 384 | "\n", 385 | "df = pd.DataFrame([\n", 386 | " ['Apple', 7, 5, 'Fruit'],\n", 387 | " ['Banana', 3, 6, 'Fruit'],\n", 388 | " ['Beef', 5, 2, 'Meal'],\n", 389 | " ['Kimchi', 4, 8, 'Meal']],\n", 390 | " columns=[\"Name\", \"Frequency\", \"Importance\", \"Type\"])\n", 391 | "\n", 392 | "df = df.groupby(\"Type\").get_group(\"Fruit\")\n", 393 | "print(df)" 394 | ], 395 | "execution_count": 12, 396 | "outputs": [ 397 | { 398 | "output_type": "stream", 399 | "text": [ 400 | " Name Frequency Importance Type\n", 401 | "0 Apple 7 5 Fruit\n", 402 | "1 Banana 3 6 Fruit\n" 403 | ], 404 | "name": "stdout" 405 | } 406 | ] 407 | }, 408 | { 409 | "cell_type": "markdown", 410 | "metadata": { 411 | "id": "js9z060RYnXG", 412 | "colab_type": "text" 413 | }, 414 | "source": [ 415 | "**데이터 프레임의 그룹화 ⑤**" 416 | ] 417 | }, 418 | { 419 | "cell_type": "code", 420 | "metadata": { 421 | "id": "1WbTCOHcYSVX", 422 | "colab_type": "code", 423 | "colab": { 424 | "base_uri": "https://localhost:8080/", 425 | "height": 105 426 | }, 427 | "outputId": "33caab62-8524-411a-83ae-91026fb62b8a" 428 | }, 429 | "source": [ 430 | "import pandas as pd\n", 431 | "\n", 432 | "df = pd.DataFrame([\n", 433 | " ['Apple', 7, 5, 'Fruit'],\n", 434 | " ['Banana', 3, 6, 'Fruit'],\n", 435 | " ['Beef', 5, 2, 'Meal'],\n", 436 | " ['Kimchi', 4, 8, 'Meal']],\n", 437 | " columns=[\"Name\", \"Frequency\", \"Importance\", \"Type\"])\n", 438 | "\n", 439 | "df[\"Gap\"] = df.groupby(\"Type\")[\"Frequency\"].apply(lambda x: x - x.mean())\n", 440 | "print(df)" 441 | ], 442 | "execution_count": 27, 443 | "outputs": [ 444 | { 445 | "output_type": "stream", 446 | "text": [ 447 | " Name Frequency Importance Type Gap\n", 448 | "0 Apple 7 5 Fruit 2.0\n", 449 | "1 Banana 3 6 Fruit -2.0\n", 450 | "2 Beef 5 2 Meal 0.5\n", 451 | "3 Kimchi 4 8 Meal -0.5\n" 452 | ], 453 | "name": "stdout" 454 | } 455 | ] 456 | }, 457 | { 458 | "cell_type": "markdown", 459 | "metadata": { 460 | "id": "kZA_fuA_ZD2r", 461 | "colab_type": "text" 462 | }, 463 | "source": [ 464 | "**데이터 프레임의 다중화**" 465 | ] 466 | }, 467 | { 468 | "cell_type": "code", 469 | "metadata": { 470 | "id": "9Rr1E0YIYwv2", 471 | "colab_type": "code", 472 | "colab": { 473 | "base_uri": "https://localhost:8080/", 474 | "height": 158 475 | }, 476 | "outputId": "47721ea9-3307-439c-8b22-7f5a893da761" 477 | }, 478 | "source": [ 479 | "import numpy as np\n", 480 | "import pandas as pd\n", 481 | "\n", 482 | "df = pd.DataFrame(\n", 483 | " np.random.randint(1, 10, (4, 4)),\n", 484 | " index=[['1차', '1차', '2차', '2차'], ['공격', '수비', '공격', '수비']],\n", 485 | " columns=['1회', '2회', '3회', '4회']\n", 486 | ")\n", 487 | "\n", 488 | "print(df)\n", 489 | "print(df[[\"1회\", \"2회\"]].loc[\"2차\"])" 490 | ], 491 | "execution_count": 28, 492 | "outputs": [ 493 | { 494 | "output_type": "stream", 495 | "text": [ 496 | " 1회 2회 3회 4회\n", 497 | "1차 공격 9 4 3 7\n", 498 | " 수비 3 5 3 9\n", 499 | "2차 공격 2 6 8 4\n", 500 | " 수비 4 1 1 5\n", 501 | " 1회 2회\n", 502 | "공격 2 6\n", 503 | "수비 4 1\n" 504 | ], 505 | "name": "stdout" 506 | } 507 | ] 508 | }, 509 | { 510 | "cell_type": "markdown", 511 | "metadata": { 512 | "id": "C2ApJAuvZWrM", 513 | "colab_type": "text" 514 | }, 515 | "source": [ 516 | "**피벗 테이블의 기초**" 517 | ] 518 | }, 519 | { 520 | "cell_type": "code", 521 | "metadata": { 522 | "id": "UHAMMdNIZL-0", 523 | "colab_type": "code", 524 | "colab": { 525 | "base_uri": "https://localhost:8080/", 526 | "height": 246 527 | }, 528 | "outputId": "3686517c-8911-4fbd-93ef-081bff3afde5" 529 | }, 530 | "source": [ 531 | "import numpy as np\n", 532 | "import pandas as pd\n", 533 | "\n", 534 | "df = pd.DataFrame([\n", 535 | " ['Apple', 7, 5, 'Fruit'],\n", 536 | " ['Banana', 3, 6, 'Fruit'],\n", 537 | " ['Coconut', 2, 6, 'Fruit'],\n", 538 | " ['Rice', 8, 2, 'Meal'],\n", 539 | " ['Beef', 5, 2, 'Meal'],\n", 540 | " ['Kimchi', 4, 8, 'Meal']],\n", 541 | " columns=[\"Name\", \"Frequency\", \"Importance\", \"Type\"])\n", 542 | "\n", 543 | "print(df)\n", 544 | "df = df.pivot_table(\n", 545 | " index=\"Importance\", columns=\"Type\", values=\"Frequency\",\n", 546 | " aggfunc=np.max\n", 547 | ")\n", 548 | "print(df)" 549 | ], 550 | "execution_count": 20, 551 | "outputs": [ 552 | { 553 | "output_type": "stream", 554 | "text": [ 555 | " Name Frequency Importance Type\n", 556 | "0 Apple 7 5 Fruit\n", 557 | "1 Banana 3 6 Fruit\n", 558 | "2 Coconut 2 6 Fruit\n", 559 | "3 Rice 8 2 Meal\n", 560 | "4 Beef 5 2 Meal\n", 561 | "5 Kimchi 4 8 Meal\n", 562 | "Type Fruit Meal\n", 563 | "Importance \n", 564 | "2 NaN 8.0\n", 565 | "5 7.0 NaN\n", 566 | "6 3.0 NaN\n", 567 | "8 NaN 4.0\n" 568 | ], 569 | "name": "stdout" 570 | } 571 | ] 572 | } 573 | ] 574 | } -------------------------------------------------------------------------------- /25. Pandas의 활용/Python 데이터 분석과 이미지 처리 - Pandas의 활용.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/25. Pandas의 활용/Python 데이터 분석과 이미지 처리 - Pandas의 활용.pdf -------------------------------------------------------------------------------- /26. Matplotlib 라이브러리의 기초/Python 데이터 분석과 이미지 처리 - Matplotlib 라이브러리의 기초.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/26. Matplotlib 라이브러리의 기초/Python 데이터 분석과 이미지 처리 - Matplotlib 라이브러리의 기초.pdf -------------------------------------------------------------------------------- /27. Matploblib 라이브러리 다루기/Python 데이터 분석과 이미지 처리 - Matplotlib 라이브러리 다루기.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/27. Matploblib 라이브러리 다루기/Python 데이터 분석과 이미지 처리 - Matplotlib 라이브러리 다루기.pdf -------------------------------------------------------------------------------- /28. 웹 크롤링/Python 데이터 분석과 이미지 처리 - 웹 크롤링.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/28. 웹 크롤링/Python 데이터 분석과 이미지 처리 - 웹 크롤링.pdf -------------------------------------------------------------------------------- /28. 웹 크롤링/웹 크롤링.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "웹 크롤링", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "oB7RjFELjJkA", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## 웹 크롤링\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/28.%20%EC%9B%B9%20%ED%81%AC%EB%A1%A4%EB%A7%81/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20%EC%9B%B9%20%ED%81%AC%EB%A1%A4%EB%A7%81.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "UgjcJAgXjUBv", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "**Web Crawler**\n", 46 | "- 웹 크롤러란 자동화된 방법으로 웹(Web)에서 다양한 정보를 수집하는 소프트웨어입니다.\n", 47 | "- 원하는 서비스에서 원하는 정보를 편하게 얻어올 수 있습니다.\n", 48 | "- 언어를 막론하고 구현할 수 있지만, 주로 Python을 이용합니다." 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": { 54 | "id": "geNJPrWcjZrP", 55 | "colab_type": "text" 56 | }, 57 | "source": [ 58 | "**특정 웹 사이트 HTML 코드 추출 ①**" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "metadata": { 64 | "id": "bi5N9w0_jJ3f", 65 | "colab_type": "code", 66 | "colab": { 67 | "base_uri": "https://localhost:8080/", 68 | "height": 1000 69 | }, 70 | "outputId": "ae04f470-b509-44c4-f1d5-7c3c77bb6765" 71 | }, 72 | "source": [ 73 | "import requests\n", 74 | "\n", 75 | "# 특정 URL에 접속하는 요청(Request) 객체를 생성합니다.\n", 76 | "request = requests.get('http://www.dowellcomputer.com/main.jsp')\n", 77 | "\n", 78 | "# 접속한 이후의 웹 사이트 소스코드를 추출합니다\n", 79 | "html = request.text.strip()\n", 80 | "\n", 81 | "print(html)" 82 | ], 83 | "execution_count": 5, 84 | "outputs": [ 85 | { 86 | "output_type": "stream", 87 | "text": [ 88 | "\r\n", 89 | " \r\n", 90 | "\r\n", 91 | "\t\r\n", 92 | "\t\t\t\r\n", 93 | "\t\t\r\n", 94 | "\t\t컴잘알\r\n", 95 | "\t\r\n", 96 | "\t\r\n", 97 | "\t\t
\r\n", 98 | "\t\t\t
\r\n", 99 | "\t\t\t\t컴잘알\r\n", 100 | "\t\t\t
\r\n", 101 | "\t\t\t
\r\n", 102 | "\t\t\t\t\r\n", 103 | "\t\t\t\t\t\t로그인\r\n", 104 | "\t\t\t\t\t\t회원가입\r\n", 105 | "\t\t\t\t\r\n", 106 | "\t\t\t\t\t공부방\r\n", 107 | "\t\t\t\t\t대화방\r\n", 108 | "\t\t\t\t\t공지사항\r\n", 109 | "\t\t\t
\r\n", 110 | "\t\t\t
\r\n", 111 | "\t\t\t

\r\n", 112 | "\t\t\t
\r\n", 113 | "\t\t\t \r\n", 114 | "\t\t\t
\r\n", 115 | "\t\t\t
\r\n", 116 | "\t\t\t \r\n", 117 | "\t\t\t
\r\n", 118 | "\t\t\t
\r\n", 119 | "\t\t\t \r\n", 120 | "\t\t\t
\r\n", 121 | "\t\t\t \r\n", 122 | "\t\t\t \r\n", 123 | "\t\t\t
\r\n", 124 | "\t\t\t
\r\n", 125 | "\t\t\t
\r\n", 126 | "\t\t\t \r\n", 127 | "\t\t\t \r\n", 128 | "\t\t\t \r\n", 129 | "\t\t\t
\r\n", 130 | "\t\t\t\r\n", 158 | "\t\t\t
\r\n", 159 | "\t\t\t
\r\n", 160 | "\t\t\t\t\r\n", 161 | "\t\t \t\r\n", 162 | "\t\t \t\t\r\n", 165 | "\t\t \t\t\t\t\t\r\n", 166 | "\t\t\t\t \r\n", 167 | "\t\t\t\t \r\n", 170 | "\t\t\t\t \r\n", 173 | "\t\t\t\t \t\t \t\t \t \t\t \t\t \r\n", 176 | "\t\t\t\t \r\n", 177 | "\t\t\t\t \r\n", 178 | "\t\t\t\t \r\n", 179 | "\t\t\t\t \t\r\n", 180 | "\t\t\t\t \t\r\n", 181 | "\t\t\t\t \t\r\n", 183 | "\t\t\t\t \r\n", 184 | "\t\t\t\t \r\n", 185 | "\t\t\t\t \t\r\n", 186 | "\t\t\t\t \t\r\n", 187 | "\t\t\t\t \t\r\n", 189 | "\t\t\t\t \r\n", 190 | "\t\t\t\t
\r\n", 163 | "\t\t \t\t\t최근 공지사항\r\n", 164 | "\t\t \t\t
\r\n", 168 | "\t\t\t\t \t아이디\r\n", 169 | "\t\t\t\t \r\n", 171 | "\t\t\t\t \t제목\r\n", 172 | "\t\t\t\t \r\n", 174 | "\t\t\t\t \t게시글 등록일\r\n", 175 | "\t\t\t\t
나동빈자바 기초 프로그래밍 강좌를 완강했습니다.2017-05-02\r\n", 182 | "\t\t\t\t
나동빈컴잘알에 오신 것을 환영합니다.2016-11-28\r\n", 188 | "\t\t\t\t
\t\t\t\r\n", 191 | "\t\t\t
\t\r\n", 192 | "\t\t\t
\r\n", 193 | "\t\t\t\t\r\n", 194 | "\t\t \t\r\n", 195 | "\t\t \t\t\r\n", 198 | "\t\t \t\t\t\t\t\r\n", 199 | "\t\t\t\t \r\n", 200 | "\t\t\t\t \r\n", 203 | "\t\t\t\t \r\n", 206 | "\t\t\t\t \t\t \t\t \t \t\t \t\t \r\n", 209 | "\t\t\t\t \r\n", 210 | "\t\t\t\t \r\n", 211 | "\t\t\t\t \r\n", 212 | "\t\t\t\t \t\r\n", 213 | "\t\t\t\t \t\r\n", 214 | "\t\t\t\t \t\r\n", 216 | "\t\t\t\t \r\n", 217 | "\t\t\t\t \r\n", 218 | "\t\t\t\t \t\r\n", 219 | "\t\t\t\t \t\r\n", 220 | "\t\t\t\t \t\r\n", 222 | "\t\t\t\t \r\n", 223 | "\t\t\t\t \r\n", 224 | "\t\t\t\t \t\r\n", 225 | "\t\t\t\t \t\r\n", 226 | "\t\t\t\t \t\r\n", 228 | "\t\t\t\t \r\n", 229 | "\t\t\t\t \r\n", 230 | "\t\t\t\t \t\r\n", 231 | "\t\t\t\t \t\r\n", 232 | "\t\t\t\t \t\r\n", 234 | "\t\t\t\t \r\n", 235 | "\t\t\t\t \r\n", 236 | "\t\t\t\t \t\r\n", 237 | "\t\t\t\t \t\r\n", 238 | "\t\t\t\t \t\r\n", 240 | "\t\t\t\t \r\n", 241 | "\t\t\t\t
\r\n", 196 | "\t\t \t\t\t최근 강의\r\n", 197 | "\t\t \t\t
\r\n", 201 | "\t\t\t\t \t선생님\r\n", 202 | "\t\t\t\t \r\n", 204 | "\t\t\t\t \t제목\r\n", 205 | "\t\t\t\t \r\n", 207 | "\t\t\t\t \t게시글 등록일\r\n", 208 | "\t\t\t\t
나동빈C언어 기초 프로그래밍 강좌 20강 - 동적 메모리의 활용 (C Programming Tutorial For Beginners 2017 #20) 2017-05-15\r\n", 215 | "\t\t\t\t
나동빈C언어 기초 프로그래밍 강좌 19강 - 동적 메모리 (C Programming Tutorial For Beginners 2017 #19) 2017-05-15\r\n", 221 | "\t\t\t\t
나동빈C언어 기초 프로그래밍 강좌 18강 - 파일 입출력 (C Programming Tutorial For Beginners 2017 #18) 2017-05-15\r\n", 227 | "\t\t\t\t
나동빈C언어 기초 프로그래밍 강좌 17강 - 구조체의 활용 ② (C Programming Tutorial For Beginners 2017 #17) 2017-05-15\r\n", 233 | "\t\t\t\t
나동빈C언어 기초 프로그래밍 강좌 16강 - 구조체의 활용 ① (C Programming Tutorial For Beginners 2017 #16) 2017-05-15\r\n", 239 | "\t\t\t\t
\r\n", 242 | "\t\t\t
\t\r\n", 243 | "\t\t
\t\r\n", 244 | "\t\r\n", 245 | "\n" 246 | ], 247 | "name": "stdout" 248 | } 249 | ] 250 | }, 251 | { 252 | "cell_type": "markdown", 253 | "metadata": { 254 | "id": "qdqode2ejhv-", 255 | "colab_type": "text" 256 | }, 257 | "source": [ 258 | "**특정 웹 사이트 HTML 코드 추출 ②**" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "metadata": { 264 | "id": "bxoTAzPwjjEv", 265 | "colab_type": "code", 266 | "colab": { 267 | "base_uri": "https://localhost:8080/", 268 | "height": 52 269 | }, 270 | "outputId": "ae14dd3d-bf20-41bd-c955-01dc27aff5d4" 271 | }, 272 | "source": [ 273 | "import requests\n", 274 | "from bs4 import BeautifulSoup\n", 275 | "\n", 276 | "# 특정 URL에 접속하는 요청(Request) 객체를 생성합니다.\n", 277 | "request = requests.get('http://www.dowellcomputer.com/main.jsp')\n", 278 | "# 접속한 이후의 웹 사이트 소스코드를 추출합니다.\n", 279 | "html = request.text\n", 280 | "# HTML 소스코드를 파이썬 BeatifulSoup 객체로 변환합니다.\n", 281 | "soup = BeautifulSoup(html, 'html.parser')\n", 282 | "\n", 283 | "# 태그를 포함하는 요소를 추출합니다.\n", 284 | "links = soup.select('td > a')\n", 285 | "\n", 286 | "# 모든 링크에 하나씩 접근합니다.\n", 287 | "for link in links:\n", 288 | " # 링크가 href 속성을 가지고 있다면\n", 289 | " if link.has_attr('href'):\n", 290 | " # href 속성의 값으로 notice라는 문자가 포함되어 있다면\n", 291 | " if link.get('href').find('notice') != -1:\n", 292 | " print(link.text)" 293 | ], 294 | "execution_count": 2, 295 | "outputs": [ 296 | { 297 | "output_type": "stream", 298 | "text": [ 299 | "자바 기초 프로그래밍 강좌를 완강했습니다.\n", 300 | "컴잘알에 오신 것을 환영합니다.\n" 301 | ], 302 | "name": "stdout" 303 | } 304 | ] 305 | } 306 | ] 307 | } -------------------------------------------------------------------------------- /29. 네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링/네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "네이버 영화 리뷰 데이터 분석 1. 영화 정보 크롤링", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "_hiyITsUk0Ze", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## 네이버 영화 리뷰 데이터 분석 1. 영화 정보 크롤링\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/29.%20%EB%84%A4%EC%9D%B4%EB%B2%84%20%EC%98%81%ED%99%94%20%EB%A6%AC%EB%B7%B0%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%E2%91%A0%20%EC%98%81%ED%99%94%20%EC%A0%95%EB%B3%B4%20%ED%81%AC%EB%A1%A4%EB%A7%81/%EB%84%A4%EC%9D%B4%EB%B2%84%20%EC%98%81%ED%99%94%20%EB%A6%AC%EB%B7%B0%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%E2%91%A0%20%EC%98%81%ED%99%94%20%EC%A0%95%EB%B3%B4%20%ED%81%AC%EB%A1%A4%EB%A7%81.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "xCYPvtsxkN6P", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "**리뷰 정보 클래스 작성하기**" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "metadata": { 51 | "id": "RWjUFzDCkPN3", 52 | "colab_type": "code", 53 | "colab": {} 54 | }, 55 | "source": [ 56 | "import urllib.request\n", 57 | "from bs4 import BeautifulSoup\n", 58 | "\n", 59 | "class Review:\n", 60 | " def __init__(self, comment, date, star, good, bad):\n", 61 | " self.comment = comment\n", 62 | " self.date = date\n", 63 | " self.star = star\n", 64 | " self.good = good\n", 65 | " self.bad = bad\n", 66 | "\n", 67 | " def show(self):\n", 68 | " print(\"내용: \" + self.comment +\n", 69 | " \"\\n날짜: \" + self.date +\n", 70 | " \"\\n별점: \" + self.star +\n", 71 | " \"\\n좋아요: \" + self.good +\n", 72 | " \"\\n싫어요: \" + self.bad)" 73 | ], 74 | "execution_count": 0, 75 | "outputs": [] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": { 80 | "id": "VpgHVILNkf4_", 81 | "colab_type": "text" 82 | }, 83 | "source": [ 84 | "**리뷰 정보 크롤링 함수**" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "metadata": { 90 | "id": "XLW9RIx9kZU8", 91 | "colab_type": "code", 92 | "colab": {} 93 | }, 94 | "source": [ 95 | "def crawl(url):\n", 96 | " soup = BeautifulSoup(urllib.request.urlopen(url).read(), \"html.parser\")\n", 97 | " review_list = []\n", 98 | " title = soup.find('h3', class_='h_movie').find('a').text\n", 99 | " div = soup.find(\"div\", class_=\"score_result\")\n", 100 | " data_list = div.select(\"ul > li\")\n", 101 | " \n", 102 | " for review in data_list:\n", 103 | " star = review.find(\"div\", class_=\"star_score\").text.strip()\n", 104 | " reply = review.find(\"div\", class_=\"score_reple\")\n", 105 | " comment = reply.find(\"p\").text\n", 106 | " date = reply.select(\"dt > em\")[1].text.strip()\n", 107 | " button = review.find(\"div\", class_=\"btn_area\")\n", 108 | " sympathy = button.select(\"strong > span\")\n", 109 | " good = sympathy[0].text\n", 110 | " bad = sympathy[1].text\n", 111 | " review_list.append(Review(comment, date, star, good, bad))\n", 112 | "\n", 113 | " return title, review_list" 114 | ], 115 | "execution_count": 0, 116 | "outputs": [] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "metadata": { 121 | "id": "p8Qqj8-ck3zA", 122 | "colab_type": "text" 123 | }, 124 | "source": [ 125 | "**리뷰 정보 크롤링 실습**" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "metadata": { 131 | "id": "HYBdejwgk5Hg", 132 | "colab_type": "code", 133 | "colab": { 134 | "base_uri": "https://localhost:8080/", 135 | "height": 474 136 | }, 137 | "outputId": "8c75bb48-88c4-4846-9667-9e9c2f046408" 138 | }, 139 | "source": [ 140 | "title, review_list = crawl(\"https://movie.naver.com/movie/bi/mi/basic.nhn?code=36944\")\n", 141 | "print('제목: ' + title)\n", 142 | "for review in review_list:\n", 143 | " review.show()" 144 | ], 145 | "execution_count": 8, 146 | "outputs": [ 147 | { 148 | "output_type": "stream", 149 | "text": [ 150 | "제목: 올드보이\n", 151 | "내용: 이 영화는 필요 이상으로 너무 잘만들었다. 인간이 만든 작품이 아니다. \n", 152 | "날짜: 2013.06.09 17:59\n", 153 | "별점: 10\n", 154 | "좋아요: 2859\n", 155 | "싫어요: 174\n", 156 | "내용: 충격적인 영화 촬영 기법, 스토리, 눈물샘을 자극시키는 사운드트랙. 대중영화 예술에 큰 기여를 한 혁명적인 영화. \n", 157 | "날짜: 2013.06.09 01:08\n", 158 | "별점: 10\n", 159 | "좋아요: 1843\n", 160 | "싫어요: 76\n", 161 | "내용: 사람은 상상력이 있어서 비겁해 지는거래... \n", 162 | "날짜: 2013.07.17 14:26\n", 163 | "별점: 10\n", 164 | "좋아요: 1642\n", 165 | "싫어요: 62\n", 166 | "내용: 10년만에 다시 본 올드보이. 역시 최고였다. \n", 167 | "날짜: 2013.07.28 01:53\n", 168 | "별점: 10\n", 169 | "좋아요: 1274\n", 170 | "싫어요: 60\n", 171 | "내용: 지금껏본 영화중 제일 재미있었다스토리 전개 하나도나무랄데 없는 작품 \n", 172 | "날짜: 2013.06.06 23:11\n", 173 | "별점: 10\n", 174 | "좋아요: 1118\n", 175 | "싫어요: 66\n" 176 | ], 177 | "name": "stdout" 178 | } 179 | ] 180 | } 181 | ] 182 | } -------------------------------------------------------------------------------- /29. 네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링/네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/29. 네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링/네이버 영화 리뷰 데이터 분석 ① 영화 정보 크롤링.pdf -------------------------------------------------------------------------------- /30. 네이버 영화 리뷰 데이터 분석 ② 데이터 시각화/네이버 영화 리뷰 데이터 분석 ② 데이터 시각화.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "네이버 영화 리뷰 데이터 분석 2. 데이터 시각화", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "5eccYF0jljXv", 31 | "colab_type": "text" 32 | }, 33 | "source": [ 34 | "## 네이버 영화 리뷰 데이터 분석 2. 데이터 시각화\n", 35 | "[강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/30.%20%EB%84%A4%EC%9D%B4%EB%B2%84%20%EC%98%81%ED%99%94%20%EB%A6%AC%EB%B7%B0%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%E2%91%A1%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%8B%9C%EA%B0%81%ED%99%94/%EB%84%A4%EC%9D%B4%EB%B2%84%20%EC%98%81%ED%99%94%20%EB%A6%AC%EB%B7%B0%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%E2%91%A1%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%8B%9C%EA%B0%81%ED%99%94.pdf)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "YXQ6ehiZl9I3", 42 | "colab_type": "text" 43 | }, 44 | "source": [ 45 | "**리뷰 정보 클래스 작성하기**" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "metadata": { 51 | "id": "23lTrMe9l9t3", 52 | "colab_type": "code", 53 | "colab": {} 54 | }, 55 | "source": [ 56 | "import urllib.request\n", 57 | "from bs4 import BeautifulSoup\n", 58 | "\n", 59 | "class Review:\n", 60 | " def __init__(self, comment, date, star, good, bad):\n", 61 | " self.comment = comment\n", 62 | " self.date = date\n", 63 | " self.star = star\n", 64 | " self.good = good\n", 65 | " self.bad = bad\n", 66 | "\n", 67 | " def show(self):\n", 68 | " print(\"내용: \" + self.comment +\n", 69 | " \"\\n날짜: \" + self.date +\n", 70 | " \"\\n별점: \" + self.star +\n", 71 | " \"\\n좋아요: \" + self.good +\n", 72 | " \"\\n싫어요: \" + self.bad)" 73 | ], 74 | "execution_count": 0, 75 | "outputs": [] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": { 80 | "id": "dyC0GtpKl_Z6", 81 | "colab_type": "text" 82 | }, 83 | "source": [ 84 | "**리뷰 정보 크롤링 함수**" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "metadata": { 90 | "id": "CBdSNYqnl_f4", 91 | "colab_type": "code", 92 | "colab": {} 93 | }, 94 | "source": [ 95 | "def crawl(url):\n", 96 | " soup = BeautifulSoup(urllib.request.urlopen(url).read(), \"html.parser\")\n", 97 | " review_list = []\n", 98 | " title = soup.find('h3', class_='h_movie').find('a').text\n", 99 | " div = soup.find(\"div\", class_=\"score_result\")\n", 100 | " data_list = div.select(\"ul > li\")\n", 101 | " \n", 102 | " for review in data_list:\n", 103 | " star = review.find(\"div\", class_=\"star_score\").text.strip()\n", 104 | " reply = review.find(\"div\", class_=\"score_reple\")\n", 105 | " comment = reply.find(\"p\").text\n", 106 | " date = reply.select(\"dt > em\")[1].text.strip()\n", 107 | " button = review.find(\"div\", class_=\"btn_area\")\n", 108 | " sympathy = button.select(\"strong > span\")\n", 109 | " good = sympathy[0].text\n", 110 | " bad = sympathy[1].text\n", 111 | " review_list.append(Review(comment, date, star, good, bad))\n", 112 | "\n", 113 | " return title, review_list" 114 | ], 115 | "execution_count": 0, 116 | "outputs": [] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "metadata": { 121 | "id": "2GiEnGholmFR", 122 | "colab_type": "text" 123 | }, 124 | "source": [ 125 | "**데이터 프레임화**" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "metadata": { 131 | "id": "HEFhfyCKljhP", 132 | "colab_type": "code", 133 | "colab": {} 134 | }, 135 | "source": [ 136 | "import pandas as pd\n", 137 | "\n", 138 | "def get_summary(review_list):\n", 139 | " star_list = []\n", 140 | " good_list = []\n", 141 | " bad_list = []\n", 142 | " \n", 143 | " for review in review_list:\n", 144 | " star_list.append(int(review.star))\n", 145 | " good_list.append(int(review.good))\n", 146 | " bad_list.append(int(review.bad))\n", 147 | " \n", 148 | " star_series = pd.Series(star_list)\n", 149 | " good_series = pd.Series(good_list)\n", 150 | " bad_series = pd.Series(bad_list)\n", 151 | " \n", 152 | " summary = pd.DataFrame({\n", 153 | " 'Star': star_series,\n", 154 | " 'Good': good_series,\n", 155 | " 'Bad': bad_series,\n", 156 | " 'Score': good_series / (good_series + bad_series)\n", 157 | " })\n", 158 | " \n", 159 | " return summary" 160 | ], 161 | "execution_count": 0, 162 | "outputs": [] 163 | }, 164 | { 165 | "cell_type": "markdown", 166 | "metadata": { 167 | "id": "0fXcSDgWmJxv", 168 | "colab_type": "text" 169 | }, 170 | "source": [ 171 | "**다수의 영화 데이터 시각화 ①**" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "metadata": { 177 | "id": "-oacbjGRlz2B", 178 | "colab_type": "code", 179 | "colab": { 180 | "base_uri": "https://localhost:8080/", 181 | "height": 633 182 | }, 183 | "outputId": "7cd7614a-25a1-4b94-cf62-252d75f08017" 184 | }, 185 | "source": [ 186 | "movie_code_list = [136900, 167657, 174321, 184859, 167391]\n", 187 | "review_lists = []\n", 188 | "\n", 189 | "for i in movie_code_list:\n", 190 | " title, review_list = crawl(\"https://movie.naver.com/movie/bi/mi/basic.nhn?code=\" + str(i))\n", 191 | " summary = get_summary(review_list)\n", 192 | " print(\"[ %s ]\" % (title))\n", 193 | " print(summary)\n", 194 | " review_lists.append((title, review_list))" 195 | ], 196 | "execution_count": 6, 197 | "outputs": [ 198 | { 199 | "output_type": "stream", 200 | "text": [ 201 | "[ 어벤져스: 엔드게임 ]\n", 202 | " Star Good Bad Score\n", 203 | "0 10 22605 632 0.972802\n", 204 | "1 10 14885 420 0.972558\n", 205 | "2 10 14503 451 0.969841\n", 206 | "3 10 12470 518 0.960117\n", 207 | "4 10 11270 409 0.964980\n", 208 | "[ 명탐정 피카츄 ]\n", 209 | " Star Good Bad Score\n", 210 | "0 10 1873 102 0.948354\n", 211 | "1 10 946 81 0.921130\n", 212 | "2 10 800 70 0.919540\n", 213 | "3 8 924 282 0.766169\n", 214 | "4 8 581 34 0.944715\n", 215 | "[ 고양이 여행 리포트 ]\n", 216 | " Star Good Bad Score\n", 217 | "0 10 55 5 0.916667\n", 218 | "1 10 34 3 0.918919\n", 219 | "2 6 38 18 0.678571\n", 220 | "3 10 21 2 0.913043\n", 221 | "4 10 23 4 0.851852\n", 222 | "[ 물의 기억 ]\n", 223 | " Star Good Bad Score\n", 224 | "0 10 28 10 0.736842\n", 225 | "1 10 26 10 0.722222\n", 226 | "2 10 23 9 0.718750\n", 227 | "3 10 14 2 0.875000\n", 228 | "4 10 18 6 0.750000\n", 229 | "[ 더 캡틴 ]\n", 230 | " Star Good Bad Score\n", 231 | "0 9 65 10 0.866667\n", 232 | "1 10 35 4 0.897436\n", 233 | "2 10 34 7 0.829268\n", 234 | "3 8 28 5 0.848485\n", 235 | "4 10 25 5 0.833333\n" 236 | ], 237 | "name": "stdout" 238 | } 239 | ] 240 | }, 241 | { 242 | "cell_type": "markdown", 243 | "metadata": { 244 | "id": "kfdLRpDMmHNy", 245 | "colab_type": "text" 246 | }, 247 | "source": [ 248 | "**다수의 영화 데이터 시각화 ②**" 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "metadata": { 254 | "id": "DjTLpd62pHTr", 255 | "colab_type": "code", 256 | "colab": { 257 | "base_uri": "https://localhost:8080/", 258 | "height": 334 259 | }, 260 | "outputId": "0cf8b1d4-3650-4406-b3a5-86e2479031b9" 261 | }, 262 | "source": [ 263 | "!apt-get update -qq\n", 264 | "!apt-get install fonts-nanum* -qq" 265 | ], 266 | "execution_count": 24, 267 | "outputs": [ 268 | { 269 | "output_type": "stream", 270 | "text": [ 271 | "Selecting previously unselected package fonts-nanum.\n", 272 | "(Reading database ... 131183 files and directories currently installed.)\n", 273 | "Preparing to unpack .../fonts-nanum_20170925-1_all.deb ...\n", 274 | "Unpacking fonts-nanum (20170925-1) ...\n", 275 | "Selecting previously unselected package fonts-nanum-eco.\n", 276 | "Preparing to unpack .../fonts-nanum-eco_1.000-6_all.deb ...\n", 277 | "Unpacking fonts-nanum-eco (1.000-6) ...\n", 278 | "Selecting previously unselected package fonts-nanum-extra.\n", 279 | "Preparing to unpack .../fonts-nanum-extra_20170925-1_all.deb ...\n", 280 | "Unpacking fonts-nanum-extra (20170925-1) ...\n", 281 | "Selecting previously unselected package fonts-nanum-coding.\n", 282 | "Preparing to unpack .../fonts-nanum-coding_2.5-1_all.deb ...\n", 283 | "Unpacking fonts-nanum-coding (2.5-1) ...\n", 284 | "Setting up fonts-nanum-extra (20170925-1) ...\n", 285 | "Setting up fonts-nanum (20170925-1) ...\n", 286 | "Setting up fonts-nanum-coding (2.5-1) ...\n", 287 | "Setting up fonts-nanum-eco (1.000-6) ...\n", 288 | "Processing triggers for fontconfig (2.12.6-0ubuntu2) ...\n" 289 | ], 290 | "name": "stdout" 291 | } 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "metadata": { 297 | "id": "nOacl1lyl53x", 298 | "colab_type": "code", 299 | "colab": { 300 | "base_uri": "https://localhost:8080/", 301 | "height": 310 302 | }, 303 | "outputId": "eafbb0fb-c09e-4249-95fa-ead513bc5d95" 304 | }, 305 | "source": [ 306 | "import matplotlib\n", 307 | "import matplotlib.pyplot as plt\n", 308 | "import matplotlib.font_manager as fm\n", 309 | "\n", 310 | "font_path = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'\n", 311 | "fontprop = fm.FontProperties(fname=font_path, size=18)\n", 312 | "\n", 313 | "def movie_compare(review_lists):\n", 314 | " count = 1\n", 315 | " x = []\n", 316 | " y = []\n", 317 | " for movie, review_list in review_lists:\n", 318 | " x.append(count)\n", 319 | " summary = get_summary(review_list)\n", 320 | " summary = summary[summary['Score'] > 0.8]\n", 321 | " y.append(summary['Star'].mean())\n", 322 | " count += 1\n", 323 | " plt.bar(x, y)\n", 324 | " plt.title('영화 별점 비교', fontproperties=fontprop)\n", 325 | " plt.xlabel('영화 번호', fontproperties=fontprop)\n", 326 | " plt.ylabel('신뢰성 별점 평균', fontproperties=fontprop)\n", 327 | " plt.show()\n", 328 | " \n", 329 | "movie_compare(review_lists)" 330 | ], 331 | "execution_count": 55, 332 | "outputs": [ 333 | { 334 | "output_type": "display_data", 335 | "data": { 336 | "image/png": "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\n", 337 | "text/plain": [ 338 | "
" 339 | ] 340 | }, 341 | "metadata": { 342 | "tags": [] 343 | } 344 | } 345 | ] 346 | } 347 | ] 348 | } -------------------------------------------------------------------------------- /30. 네이버 영화 리뷰 데이터 분석 ② 데이터 시각화/네이버 영화 리뷰 데이터 분석 ② 데이터 시각화.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/30. 네이버 영화 리뷰 데이터 분석 ② 데이터 시각화/네이버 영화 리뷰 데이터 분석 ② 데이터 시각화.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 파이썬을 활용한 데이터 분석과 이미지 처리 2 | * 파이썬을 활용한 데이터 분석과 이미지 처리 강의자료 및 소스코드를 저장하는 Repository입니다. 3 | * 현재 목차 상의 모든 영상이 유튜브에 업로드 되었습니다. (2019-10-05) 4 | 5 | ### 목차 구성 6 | * 0강: 강의 소개 [(:bookmark_tabs: 강의 자료)](/00.%20강의%20소개/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=V8Lpf3WCZ4g&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=1) 7 | * 1강: 행렬의 필요성 [(:bookmark_tabs: 강의 자료)](/01.%20행렬의%20필요성/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=hqqmIemBbvw&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=2) 8 | * 2강: 다양한 파이썬 개발 환경 소개 [(:bookmark_tabs: 강의 자료)](/02.%20다양한%20파이썬%20개발%20환경%20소개/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=YkeGZ3MGr3o&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=3) 9 | * 3강: Numpy의 기본 사용법 [(:bookmark_tabs: 강의 자료)](/03.%20Numpy의%20기본%20사용법/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=LdoJAC26MIc&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=4) 10 | * 4강: Numpy의 연산과 함수 [(:bookmark_tabs: 강의 자료)](/04.%20Numpy의%20연산과%20함수/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=k4bTgociqZ8&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=5) 11 | * 5강: Numpy의 활용 [(:bookmark_tabs: 강의 자료)](/05.%20Numpy의%20활용/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=Ohein9rZ4fk&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=6) 12 | * 6강: OpenCV 소개 및 기본 사용법 [(:bookmark_tabs: 강의 자료)](/06.%20OpenCV%20소개%20및%20기본%20사용법/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=F2FRpmh9sQo&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=7) 13 | * 7강: OpenCV 이미지 연산 [(:bookmark_tabs: 강의 자료)](/07.%20OpenCV%20이미지%20연산/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=KkQC3q3mTgo&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=8) 14 | * 8강: OpenCV 이미지 변형 [(:bookmark_tabs: 강의 자료)](/08.%20OpenCV%20이미지%20변형/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=Dov-49fwaG4&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=9) 15 | * 9강: OpenCV 이미지 합치기 [(:bookmark_tabs: 강의 자료)](/09.%20OpenCV%20이미지%20합치기/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=WWLsrX42lbU&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=10) 16 | * 10강: OpenCV 임계점 처리하기 [(:bookmark_tabs: 강의 자료)](/10.%20OpenCV%20임계점%20처리하기/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=Xqm4R1cKbFI&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=11) 17 | * 11강: OpenCV Tracker (TrackBar) [(:bookmark_tabs: 강의 자료)](/11.%20OpenCV%20Tracker/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=61dNYY1_IIE&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=12) 18 | * 12강: OpenCV 도형 그리기 [(:bookmark_tabs: 강의 자료)](/12.%20OpenCV%20도형%20그리기/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=2SwYwlVcxhA&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=13) 19 | * 13강: OpenCV Contours [(:bookmark_tabs: 강의 자료)](/13.%20OpenCV%20Contours/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=E8LPYLcIn4Q&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=14) 20 | * 14강: OpenCV Contours 처리 [(:bookmark_tabs: 강의 자료)](/14.%20OpenCV%20Contours%20처리/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=xBfq6DJQ8xs&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=15) 21 | * 15강: OpenCV Filtering [(:bookmark_tabs: 강의 자료)](/15.%20OpenCV%20Filtering/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=5V_iHjiey2o&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=16) 22 | * 16강: KNN Algorithm [(:bookmark_tabs: 강의 자료)](/16.%20KNN%20Algorithm/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=QRWNto6BsfY&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=17) 23 | * 17강: KNN 숫자 인식 예제 [(:bookmark_tabs: 강의 자료)](/17.%20KNN%20숫자%20인식%20예제/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=dsmXqJ9hkgQ&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=18) 24 | * 18강: 중급 Captcha Hacking 1 - Problem Define [(:bookmark_tabs: 강의 자료)](/18.%20중급%20Captcha%20Hacking%201%20-%20Problem%20Define/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=vKktSCf2ru0&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=19) 25 | * 19강: 중급 Captcha Hacking 2 - 데이터 수집과 분석 [(:bookmark_tabs: 강의 자료)](/19.%20중급%20Captcha%20Hacking%202%20-%20데이터%20수집과%20분석/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=2zdiZI1ndjo&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=20) 26 | * 20강: 중급 Captcha Hacking 3 - 데이터 정제 [(:bookmark_tabs: 강의 자료)](/20.%20중급%20Captcha%20Hacking%203%20-%20데이터%20정제/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=ovsK_AxqFIQ&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=21) 27 | * 21강: 중급 Captcha Hacking 4 - KNN 모델 학습 [(:bookmark_tabs: 강의 자료)](/21.%20중급%20Captcha%20Hacking%204%20-%20KNN%20모델%20학습/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=-LM6kkkNhY0&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=22) 28 | * 22강: 중급 Captcha Hacking 5 - 해킹 자동화 [(:bookmark_tabs: 강의 자료)](/22.%20중급%20Captcha%20Hacking%205%20-%20해킹%20자동화/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=3T2nShDtSME&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=23) 29 | * 23강: Pandas의 기본 사용법 [(:bookmark_tabs: 강의 자료)](/23.%20Pandas의%20기본%20사용법/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=9PF4BAFh-J8&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=24) 30 | * 24강: Pandas의 연산과 함수 [(:bookmark_tabs: 강의 자료)](/24.%20Pandas의%20연산과%20함수/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=BZIsxdEybxo&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=25) 31 | * 25강: Pandas의 활용 [(:bookmark_tabs: 강의 자료)](/25.%20Pandas의%20활용/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=5ZiP4HRFBqU&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=26) 32 | * 26강: Matplotlib 라이브러리의 기초 [(:bookmark_tabs: 강의 자료)](/26.%20Matplotlib%20라이브러리의%20기초/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=kdf2RLwec8s&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=27) 33 | * 27강: Matplotlib 라이브러리 다루기 [(:bookmark_tabs: 강의 자료)](/27.%20Matploblib%20라이브러리%20다루기/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=Ghq4oSxk0Fg&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=28) 34 | * 28강: 웹 크롤링 [(:bookmark_tabs: 강의 자료)](/28.%20웹%20크롤링/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=gKCkz0lXWR4&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=29) 35 | * 29강: 네이버 영화 리뷰 데이터 분석 1 - 영화 정보 크롤링 [(:bookmark_tabs: 강의 자료)](/29.%20네이버%20영화%20리뷰%20데이터%20분석%20①%20영화%20정보%20크롤링/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=8rgCwpA4Fms&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=30) 36 | * 30강: 네이버 영화 리뷰 데이터 분석 2 - 데이터 시각화 [(:bookmark_tabs: 강의 자료)](/30.%20네이버%20영화%20리뷰%20데이터%20분석%20②%20데이터%20시각화/) [(:link: 유튜브 강의 보러가기)](https://www.youtube.com/watch?v=L4WMGMtmXFA&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=31) 37 | 38 | ### 강의 내용 오류 정정 39 | 40 | * 강의 내용에 오류가 있는 경우, 유튜브 댓글 혹은 이슈(Issue)를 남겨 주세요. 41 | * 16강 KNN Algorithm 42 | * KNN은 학습 데이터(Training Data)의 레이블이 필요하므로 지도 학습(Supervised Learning)의 일종입니다. 43 | -------------------------------------------------------------------------------- /fonts/NanumBarunGothic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/fonts/NanumBarunGothic.ttf -------------------------------------------------------------------------------- /images/cat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/cat.jpg -------------------------------------------------------------------------------- /images/digit_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/digit_image.png -------------------------------------------------------------------------------- /images/digits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/digits.png -------------------------------------------------------------------------------- /images/dog.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/dog.jpg -------------------------------------------------------------------------------- /images/gray_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/gray_image.jpg -------------------------------------------------------------------------------- /images/hand_writing_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/hand_writing_image.jpg -------------------------------------------------------------------------------- /images/image_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/image_1.jpg -------------------------------------------------------------------------------- /images/image_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/image_2.png -------------------------------------------------------------------------------- /images/test/test0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test0.png -------------------------------------------------------------------------------- /images/test/test1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test1.png -------------------------------------------------------------------------------- /images/test/test2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test2.png -------------------------------------------------------------------------------- /images/test/test3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test3.png -------------------------------------------------------------------------------- /images/test/test4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test4.png -------------------------------------------------------------------------------- /images/test/test5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test5.png -------------------------------------------------------------------------------- /images/test/test6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test6.png -------------------------------------------------------------------------------- /images/test/test7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test7.png -------------------------------------------------------------------------------- /images/test/test8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test8.png -------------------------------------------------------------------------------- /images/test/test9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/54fdf764795e40a1b439665e1b20b89a841291aa/images/test/test9.png --------------------------------------------------------------------------------