{
  "id": 116784,
  "title": "[HW]Namhun Kim",
  "url": "/competitions/2019-fall-pr-project/discussion/116784",
  "author_name": "Namhun Kim",
  "post_date": "2019-11-11T12:43:29.495000",
  "votes": 0,
  "comment_count": 0,
  "views": 0,
  "content": "<blockquote>\n  <p>데이터셋은 <code>train</code>과 <code>test1</code>로 나누어져 있으며, jpg 포맷의 이미지입니다.\n  이를 클러스터링 방법론 중 하나인 SVM을 이용하여 분류하는 방법입니다.</p>\n</blockquote>\n\n<hr>\n\n<h2>학습 데이터 전처리</h2>\n\n<p><code>train</code> 폴더에는 <code>cat.0.jpg</code>, <code>cat.0.jpg</code>, ... 와 같이 <code>정답 라벨(cat/dog).index.jpg</code>로 구성되어 있습니다.\n이를 이미지 X와 라벨 데이터 Y로 나누어 저장합니다.</p>\n\n<p><code>\nfor i, img in enumerate(paths.list_images(dataset_train)):\n</code></p>\n\n<p><code>imutils</code> 라이브러리의 <code>paths</code> 클래스 중 <code>list_images</code> 메소드를 이용하여 <code>dataset_train</code>을 로드합니다.</p>\n\n<p>학습량을 조절하기 위해 변수 <code>i</code>를 추가하여 일정량(1000)이 되면 중단되도록 설정하였습니다.</p>\n\n<p>이상적으로는 test 데이터보다 수가 많아야 하지만, colab notebook의 runtime 문제 등으로 인하여 일부만 포함시켰습니다.</p>\n\n<p>만약 본인의 환경이 여유가 된다면 모든 train 데이터를 포함시키는 것을 권장드립니다.</p>\n\n<p>```</p>\n\n<h1>dog: 1</h1>\n\n<p>Y.append(1 if 'dog' in img else 0) <br>\n  img = cv2.imread(img)</p>\n\n<h1>print(img.shape)</h1>\n\n<p>img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_AREA)</p>\n\n<h1>print(img.shape)</h1>\n\n<p>img = img.flatten()</p>\n\n<h1>print(img.shape)</h1>\n\n<p>X.append(img)\n```</p>\n\n<p><code>cat</code>은 0, <code>dog</code>는 1로 매핑하였으므로 이미지 파일명을 확인하여 라벨을 추가합니다.</p>\n\n<p>OpenCV를 이용하여 이미지 파일을 불러온 후, <code>resize()</code> 메소드를 이용하여 32x32 크기로 조정합니다.</p>\n\n<p>마지막으로 용이한 학습을 위해 2차원 이미지 배열을 1차원으로 변환하여 이미지 배열 X에 추가합니다.</p>\n\n<p><code>\nX = np.array(X)\nY = np.array(Y)\n</code></p>\n\n<p>위에서 입력받은 <code>X</code>, <code>Y</code>는 type이 <code>list</code> 형태이므로, <code>array</code> 형태로 형변환 해줍니다.</p>\n\n<p>이렇게 전처리된 데이터를 학습할 때, 오버피팅을 방지하고 어느 정도의 성능이 나오는지 확인하기 위해 train set과 validation set으로 분할합니다.</p>\n\n<p><code>\nX_train, X_val, Y_train, Y_val = train_test_split(\n    X, Y, test_size=0.25, random_state=42)\n</code></p>\n\n<p><code>scikit learn</code>에서 제공해주는 <code>train_test_split()</code> 메소드를 이용하여 간편하게 분할해줍니다. 이 때, test size는 25%를 권장합니다. 보통 8:2, 7:3 비율도 많이 이용합니다.</p>\n\n<hr>\n\n<h2>학습 기반 분류기 설계</h2>\n\n<p>앞서 말씀드린대로 SVM(Support Vector Machine)을 적용하기 위해, <code>scikit learn</code>에서 제공해주는 <code>SVC</code> 클래스를 이용합니다.</p>\n\n<p><code>\nsvc = SVC(kernel='poly')\nsvc.fit(X_train, Y_train)\n</code></p>\n\n<p>적용 가능한 SVM의 <code>kernel</code>은 <code>linear</code>, <code>poly</code>, <code>rbf</code> 등이 있습니다. 기본값은 <code>rbf</code>입니다.</p>\n\n<p><code>svc.fit()</code>으로 모델을 학습시킵니다.</p>\n\n<p><code>\npredict = svc.predict(X_val)\nprint(classification_report(Y_val, predict))\n</code></p>\n\n<p>학습된 모델을 이용하여 validation set을 적용해 보고, <code>classification_report</code>를 이용하여 precision-recall 값과 mAP(mean Average Precision) 값을 구해봅니다.</p>\n\n<p>```\n              precision    recall  f1-score   support</p>\n\n<pre><code>       0       0.58      0.66      0.62       123\n       1       0.62      0.54      0.58       128\n\naccuracy                           0.60       251\n</code></pre>\n\n<p>macro avg       0.60      0.60      0.60       251\nweighted avg       0.60      0.60      0.60       251\n```\n결과는 위와 같습니다.</p>\n\n<hr>\n\n<h2>테스트 데이터 전처리</h2>\n\n<p>앞서 진행했던 것과 동일하게, 이번에는 테스트 데이터를 전처리합니다.</p>\n\n<p>다만 차이점은, 테스트 데이터는 정답이 없는 <code>index.jpg</code>의 형태입니다.\n따라서 Y 배열은 필요없고 X 배열만 선언해줍니다.\n또한, 테스트 데이터는 validation이 필요 없으므로 분할하지 않고, 모두 포함합니다.</p>\n\n<hr>\n\n<h2>학습한 모델로 테스트하기</h2>\n\n<p><code>\nresult = svc.predict(X_test)\n</code>\n앞서 학습해둔 <code>svc</code>에 테스트 셋을 적용하여 그 결과를 추출합니다.</p>\n\n<hr>\n\n<h2>csv로 저장하기</h2>\n\n<p>python에서 데이터 셋을 조금 더 편하게 다루게 해주는 <code>pandas</code> 라이브러리를 이용합니다. pandas에서는 <code>DataFrame</code>이라는 형태로 데이터를 처리합니다. 이는 table과 유사한 형태라고 생각하시면 됩니다.</p>\n\n<p><code>\ndf = pd.DataFrame(result, columns=['label'])\n</code>\nDataFrame을 생성하고, 그 안에 추출한 결과값을 대입합니다. 열의 이름은 <code>label</code>로 설정합니다.</p>\n\n<p><code>\ndf.index += 1\ndf.index.name = 'id'\n</code></p>\n\n<p>제출 예시인 Sample csv파일의 규격을 맞추기 위해\n- index 값의 시작을 1로 맞추고,\n- index 열의 이름을 'id'로 설정해줍니다.</p>\n\n<p><code>\ndf.to_csv('result_namhun_kim-2320.csv',index=True, header=True)\n</code>\n마지막으로 <code>to_csv()</code> 메소드를 이용하여 DataFrame을 csv 포맷으로 저장합니다.</p>",
  "messages": [
    {
      "id": 670411,
      "postDate": "2019-11-11T12:43:29.497Z",
      "content": "<blockquote>\n  <p>데이터셋은 <code>train</code>과 <code>test1</code>로 나누어져 있으며, jpg 포맷의 이미지입니다.\n  이를 클러스터링 방법론 중 하나인 SVM을 이용하여 분류하는 방법입니다.</p>\n</blockquote>\n\n<hr>\n\n<h2>학습 데이터 전처리</h2>\n\n<p><code>train</code> 폴더에는 <code>cat.0.jpg</code>, <code>cat.0.jpg</code>, ... 와 같이 <code>정답 라벨(cat/dog).index.jpg</code>로 구성되어 있습니다.\n이를 이미지 X와 라벨 데이터 Y로 나누어 저장합니다.</p>\n\n<p><code>\nfor i, img in enumerate(paths.list_images(dataset_train)):\n</code></p>\n\n<p><code>imutils</code> 라이브러리의 <code>paths</code> 클래스 중 <code>list_images</code> 메소드를 이용하여 <code>dataset_train</code>을 로드합니다.</p>\n\n<p>학습량을 조절하기 위해 변수 <code>i</code>를 추가하여 일정량(1000)이 되면 중단되도록 설정하였습니다.</p>\n\n<p>이상적으로는 test 데이터보다 수가 많아야 하지만, colab notebook의 runtime 문제 등으로 인하여 일부만 포함시켰습니다.</p>\n\n<p>만약 본인의 환경이 여유가 된다면 모든 train 데이터를 포함시키는 것을 권장드립니다.</p>\n\n<p>```</p>\n\n<h1>dog: 1</h1>\n\n<p>Y.append(1 if 'dog' in img else 0) <br>\n  img = cv2.imread(img)</p>\n\n<h1>print(img.shape)</h1>\n\n<p>img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_AREA)</p>\n\n<h1>print(img.shape)</h1>\n\n<p>img = img.flatten()</p>\n\n<h1>print(img.shape)</h1>\n\n<p>X.append(img)\n```</p>\n\n<p><code>cat</code>은 0, <code>dog</code>는 1로 매핑하였으므로 이미지 파일명을 확인하여 라벨을 추가합니다.</p>\n\n<p>OpenCV를 이용하여 이미지 파일을 불러온 후, <code>resize()</code> 메소드를 이용하여 32x32 크기로 조정합니다.</p>\n\n<p>마지막으로 용이한 학습을 위해 2차원 이미지 배열을 1차원으로 변환하여 이미지 배열 X에 추가합니다.</p>\n\n<p><code>\nX = np.array(X)\nY = np.array(Y)\n</code></p>\n\n<p>위에서 입력받은 <code>X</code>, <code>Y</code>는 type이 <code>list</code> 형태이므로, <code>array</code> 형태로 형변환 해줍니다.</p>\n\n<p>이렇게 전처리된 데이터를 학습할 때, 오버피팅을 방지하고 어느 정도의 성능이 나오는지 확인하기 위해 train set과 validation set으로 분할합니다.</p>\n\n<p><code>\nX_train, X_val, Y_train, Y_val = train_test_split(\n    X, Y, test_size=0.25, random_state=42)\n</code></p>\n\n<p><code>scikit learn</code>에서 제공해주는 <code>train_test_split()</code> 메소드를 이용하여 간편하게 분할해줍니다. 이 때, test size는 25%를 권장합니다. 보통 8:2, 7:3 비율도 많이 이용합니다.</p>\n\n<hr>\n\n<h2>학습 기반 분류기 설계</h2>\n\n<p>앞서 말씀드린대로 SVM(Support Vector Machine)을 적용하기 위해, <code>scikit learn</code>에서 제공해주는 <code>SVC</code> 클래스를 이용합니다.</p>\n\n<p><code>\nsvc = SVC(kernel='poly')\nsvc.fit(X_train, Y_train)\n</code></p>\n\n<p>적용 가능한 SVM의 <code>kernel</code>은 <code>linear</code>, <code>poly</code>, <code>rbf</code> 등이 있습니다. 기본값은 <code>rbf</code>입니다.</p>\n\n<p><code>svc.fit()</code>으로 모델을 학습시킵니다.</p>\n\n<p><code>\npredict = svc.predict(X_val)\nprint(classification_report(Y_val, predict))\n</code></p>\n\n<p>학습된 모델을 이용하여 validation set을 적용해 보고, <code>classification_report</code>를 이용하여 precision-recall 값과 mAP(mean Average Precision) 값을 구해봅니다.</p>\n\n<p>```\n              precision    recall  f1-score   support</p>\n\n<pre><code>       0       0.58      0.66      0.62       123\n       1       0.62      0.54      0.58       128\n\naccuracy                           0.60       251\n</code></pre>\n\n<p>macro avg       0.60      0.60      0.60       251\nweighted avg       0.60      0.60      0.60       251\n```\n결과는 위와 같습니다.</p>\n\n<hr>\n\n<h2>테스트 데이터 전처리</h2>\n\n<p>앞서 진행했던 것과 동일하게, 이번에는 테스트 데이터를 전처리합니다.</p>\n\n<p>다만 차이점은, 테스트 데이터는 정답이 없는 <code>index.jpg</code>의 형태입니다.\n따라서 Y 배열은 필요없고 X 배열만 선언해줍니다.\n또한, 테스트 데이터는 validation이 필요 없으므로 분할하지 않고, 모두 포함합니다.</p>\n\n<hr>\n\n<h2>학습한 모델로 테스트하기</h2>\n\n<p><code>\nresult = svc.predict(X_test)\n</code>\n앞서 학습해둔 <code>svc</code>에 테스트 셋을 적용하여 그 결과를 추출합니다.</p>\n\n<hr>\n\n<h2>csv로 저장하기</h2>\n\n<p>python에서 데이터 셋을 조금 더 편하게 다루게 해주는 <code>pandas</code> 라이브러리를 이용합니다. pandas에서는 <code>DataFrame</code>이라는 형태로 데이터를 처리합니다. 이는 table과 유사한 형태라고 생각하시면 됩니다.</p>\n\n<p><code>\ndf = pd.DataFrame(result, columns=['label'])\n</code>\nDataFrame을 생성하고, 그 안에 추출한 결과값을 대입합니다. 열의 이름은 <code>label</code>로 설정합니다.</p>\n\n<p><code>\ndf.index += 1\ndf.index.name = 'id'\n</code></p>\n\n<p>제출 예시인 Sample csv파일의 규격을 맞추기 위해\n- index 값의 시작을 1로 맞추고,\n- index 열의 이름을 'id'로 설정해줍니다.</p>\n\n<p><code>\ndf.to_csv('result_namhun_kim-2320.csv',index=True, header=True)\n</code>\n마지막으로 <code>to_csv()</code> 메소드를 이용하여 DataFrame을 csv 포맷으로 저장합니다.</p>",
      "rawMarkdown": "&gt; 데이터셋은 `train`과 `test1`로 나누어져 있으며, jpg 포맷의 이미지입니다.\n이를 클러스터링 방법론 중 하나인 SVM을 이용하여 분류하는 방법입니다.\n\n---\n\n## 학습 데이터 전처리\n\n`train` 폴더에는 `cat.0.jpg`, `cat.0.jpg`, ... 와 같이 `정답 라벨(cat/dog).index.jpg`로 구성되어 있습니다.\n이를 이미지 X와 라벨 데이터 Y로 나누어 저장합니다.\n\n```\nfor i, img in enumerate(paths.list_images(dataset_train)):\n```\n\n`imutils` 라이브러리의 `paths` 클래스 중 `list_images` 메소드를 이용하여 `dataset_train`을 로드합니다.\n\n학습량을 조절하기 위해 변수 `i`를 추가하여 일정량(1000)이 되면 중단되도록 설정하였습니다.\n\n이상적으로는 test 데이터보다 수가 많아야 하지만, colab notebook의 runtime 문제 등으로 인하여 일부만 포함시켰습니다.\n\n만약 본인의 환경이 여유가 된다면 모든 train 데이터를 포함시키는 것을 권장드립니다.\n\n```\n# dog: 1\n  Y.append(1 if 'dog' in img else 0)  \n  img = cv2.imread(img)\n#  print(img.shape)\n  img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_AREA)\n#  print(img.shape)\n  img = img.flatten()\n#  print(img.shape)\n  X.append(img)\n```\n\n`cat`은 0, `dog`는 1로 매핑하였으므로 이미지 파일명을 확인하여 라벨을 추가합니다.\n\nOpenCV를 이용하여 이미지 파일을 불러온 후, `resize()` 메소드를 이용하여 32x32 크기로 조정합니다.\n\n마지막으로 용이한 학습을 위해 2차원 이미지 배열을 1차원으로 변환하여 이미지 배열 X에 추가합니다.\n\n```\nX = np.array(X)\nY = np.array(Y)\n```\n\n위에서 입력받은 `X`, `Y`는 type이 `list` 형태이므로, `array` 형태로 형변환 해줍니다.\n\n이렇게 전처리된 데이터를 학습할 때, 오버피팅을 방지하고 어느 정도의 성능이 나오는지 확인하기 위해 train set과 validation set으로 분할합니다.\n\n```\nX_train, X_val, Y_train, Y_val = train_test_split(\n    X, Y, test_size=0.25, random_state=42)\n```\n\n`scikit learn`에서 제공해주는 `train_test_split()` 메소드를 이용하여 간편하게 분할해줍니다. 이 때, test size는 25%를 권장합니다. 보통 8:2, 7:3 비율도 많이 이용합니다.\n\n---\n\n## 학습 기반 분류기 설계\n\n앞서 말씀드린대로 SVM(Support Vector Machine)을 적용하기 위해, `scikit learn`에서 제공해주는 `SVC` 클래스를 이용합니다.\n\n```\nsvc = SVC(kernel='poly')\nsvc.fit(X_train, Y_train)\n```\n\n적용 가능한 SVM의 `kernel`은 `linear`, `poly`, `rbf` 등이 있습니다. 기본값은 `rbf`입니다.\n\n`svc.fit()`으로 모델을 학습시킵니다.\n\n```\npredict = svc.predict(X_val)\nprint(classification_report(Y_val, predict))\n```\n\n학습된 모델을 이용하여 validation set을 적용해 보고, `classification_report`를 이용하여 precision-recall 값과 mAP(mean Average Precision) 값을 구해봅니다.\n\n```\n              precision    recall  f1-score   support\n\n           0       0.58      0.66      0.62       123\n           1       0.62      0.54      0.58       128\n\n    accuracy                           0.60       251\n   macro avg       0.60      0.60      0.60       251\nweighted avg       0.60      0.60      0.60       251\n```\n결과는 위와 같습니다.\n\n---\n\n## 테스트 데이터 전처리\n\n앞서 진행했던 것과 동일하게, 이번에는 테스트 데이터를 전처리합니다.\n\n다만 차이점은, 테스트 데이터는 정답이 없는 `index.jpg`의 형태입니다.\n따라서 Y 배열은 필요없고 X 배열만 선언해줍니다.\n또한, 테스트 데이터는 validation이 필요 없으므로 분할하지 않고, 모두 포함합니다.\n\n---\n\n## 학습한 모델로 테스트하기\n\n```\nresult = svc.predict(X_test)\n```\n앞서 학습해둔 `svc`에 테스트 셋을 적용하여 그 결과를 추출합니다.\n\n---\n\n## csv로 저장하기\n\npython에서 데이터 셋을 조금 더 편하게 다루게 해주는 `pandas` 라이브러리를 이용합니다. pandas에서는 `DataFrame`이라는 형태로 데이터를 처리합니다. 이는 table과 유사한 형태라고 생각하시면 됩니다.\n\n```\ndf = pd.DataFrame(result, columns=['label'])\n```\nDataFrame을 생성하고, 그 안에 추출한 결과값을 대입합니다. 열의 이름은 `label`로 설정합니다.\n\n```\ndf.index += 1\ndf.index.name = 'id'\n```\n\n제출 예시인 Sample csv파일의 규격을 맞추기 위해\n- index 값의 시작을 1로 맞추고,\n- index 열의 이름을 'id'로 설정해줍니다.\n\n```\ndf.to_csv('result_namhun_kim-2320.csv',index=True, header=True)\n```\n마지막으로 `to_csv()` 메소드를 이용하여 DataFrame을 csv 포맷으로 저장합니다."
    }
  ],
  "comments": [],
  "raw_markdown_by_id": {
    "670411": "&gt; 데이터셋은 `train`과 `test1`로 나누어져 있으며, jpg 포맷의 이미지입니다.\n이를 클러스터링 방법론 중 하나인 SVM을 이용하여 분류하는 방법입니다.\n\n---\n\n## 학습 데이터 전처리\n\n`train` 폴더에는 `cat.0.jpg`, `cat.0.jpg`, ... 와 같이 `정답 라벨(cat/dog).index.jpg`로 구성되어 있습니다.\n이를 이미지 X와 라벨 데이터 Y로 나누어 저장합니다.\n\n```\nfor i, img in enumerate(paths.list_images(dataset_train)):\n```\n\n`imutils` 라이브러리의 `paths` 클래스 중 `list_images` 메소드를 이용하여 `dataset_train`을 로드합니다.\n\n학습량을 조절하기 위해 변수 `i`를 추가하여 일정량(1000)이 되면 중단되도록 설정하였습니다.\n\n이상적으로는 test 데이터보다 수가 많아야 하지만, colab notebook의 runtime 문제 등으로 인하여 일부만 포함시켰습니다.\n\n만약 본인의 환경이 여유가 된다면 모든 train 데이터를 포함시키는 것을 권장드립니다.\n\n```\n# dog: 1\n  Y.append(1 if 'dog' in img else 0)  \n  img = cv2.imread(img)\n#  print(img.shape)\n  img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_AREA)\n#  print(img.shape)\n  img = img.flatten()\n#  print(img.shape)\n  X.append(img)\n```\n\n`cat`은 0, `dog`는 1로 매핑하였으므로 이미지 파일명을 확인하여 라벨을 추가합니다.\n\nOpenCV를 이용하여 이미지 파일을 불러온 후, `resize()` 메소드를 이용하여 32x32 크기로 조정합니다.\n\n마지막으로 용이한 학습을 위해 2차원 이미지 배열을 1차원으로 변환하여 이미지 배열 X에 추가합니다.\n\n```\nX = np.array(X)\nY = np.array(Y)\n```\n\n위에서 입력받은 `X`, `Y`는 type이 `list` 형태이므로, `array` 형태로 형변환 해줍니다.\n\n이렇게 전처리된 데이터를 학습할 때, 오버피팅을 방지하고 어느 정도의 성능이 나오는지 확인하기 위해 train set과 validation set으로 분할합니다.\n\n```\nX_train, X_val, Y_train, Y_val = train_test_split(\n    X, Y, test_size=0.25, random_state=42)\n```\n\n`scikit learn`에서 제공해주는 `train_test_split()` 메소드를 이용하여 간편하게 분할해줍니다. 이 때, test size는 25%를 권장합니다. 보통 8:2, 7:3 비율도 많이 이용합니다.\n\n---\n\n## 학습 기반 분류기 설계\n\n앞서 말씀드린대로 SVM(Support Vector Machine)을 적용하기 위해, `scikit learn`에서 제공해주는 `SVC` 클래스를 이용합니다.\n\n```\nsvc = SVC(kernel='poly')\nsvc.fit(X_train, Y_train)\n```\n\n적용 가능한 SVM의 `kernel`은 `linear`, `poly`, `rbf` 등이 있습니다. 기본값은 `rbf`입니다.\n\n`svc.fit()`으로 모델을 학습시킵니다.\n\n```\npredict = svc.predict(X_val)\nprint(classification_report(Y_val, predict))\n```\n\n학습된 모델을 이용하여 validation set을 적용해 보고, `classification_report`를 이용하여 precision-recall 값과 mAP(mean Average Precision) 값을 구해봅니다.\n\n```\n              precision    recall  f1-score   support\n\n           0       0.58      0.66      0.62       123\n           1       0.62      0.54      0.58       128\n\n    accuracy                           0.60       251\n   macro avg       0.60      0.60      0.60       251\nweighted avg       0.60      0.60      0.60       251\n```\n결과는 위와 같습니다.\n\n---\n\n## 테스트 데이터 전처리\n\n앞서 진행했던 것과 동일하게, 이번에는 테스트 데이터를 전처리합니다.\n\n다만 차이점은, 테스트 데이터는 정답이 없는 `index.jpg`의 형태입니다.\n따라서 Y 배열은 필요없고 X 배열만 선언해줍니다.\n또한, 테스트 데이터는 validation이 필요 없으므로 분할하지 않고, 모두 포함합니다.\n\n---\n\n## 학습한 모델로 테스트하기\n\n```\nresult = svc.predict(X_test)\n```\n앞서 학습해둔 `svc`에 테스트 셋을 적용하여 그 결과를 추출합니다.\n\n---\n\n## csv로 저장하기\n\npython에서 데이터 셋을 조금 더 편하게 다루게 해주는 `pandas` 라이브러리를 이용합니다. pandas에서는 `DataFrame`이라는 형태로 데이터를 처리합니다. 이는 table과 유사한 형태라고 생각하시면 됩니다.\n\n```\ndf = pd.DataFrame(result, columns=['label'])\n```\nDataFrame을 생성하고, 그 안에 추출한 결과값을 대입합니다. 열의 이름은 `label`로 설정합니다.\n\n```\ndf.index += 1\ndf.index.name = 'id'\n```\n\n제출 예시인 Sample csv파일의 규격을 맞추기 위해\n- index 값의 시작을 1로 맞추고,\n- index 열의 이름을 'id'로 설정해줍니다.\n\n```\ndf.to_csv('result_namhun_kim-2320.csv',index=True, header=True)\n```\n마지막으로 `to_csv()` 메소드를 이용하여 DataFrame을 csv 포맷으로 저장합니다."
  }
}