{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "# Ensemble models to submission"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "\n",
    "import sys\n",
    "import warnings\n",
    "if not sys.warnoptions:\n",
    "    warnings.simplefilter(\"ignore\")"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Ensemble STATUS models"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "source": [
    "MAIN_DIR = '/media/daitran/Data_SSD/code/SmartInsideAI/github/2021aichamp/src/ensemble_submission/submission_ref/STATUS_TTA_INFERENCE'\n",
    "folder_names = os.listdir(MAIN_DIR)\n",
    "test = pd.read_csv('/media/daitran/Data_SSD/data/SmartinsideAI/2021AIChamp/11.한국전력공사_데이터/test_output_sample.csv')\n",
    "print(folder_names)\n",
    "print(len(folder_names))"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "['cv_0.92798_efficientnet_b7_ap', 'cv_0.87839_efficientnet_b4', 'cv_0.89610_tf_efficientnetv2_b3', 'cv_0.89965_efficientnet_b3', 'cv_0.90000_resnext50_32x4d', 'cv_0.90000_vit_base_patch16_384', 'cv_0.90083_efficientv2_s', 'cv_0.90319_efficientnet_b1', 'cv_0.90673_tf_efficientnetv2_s_in21k', 'cv_0.90791_efficientnet_b2', 'cv_0.91000_resnext50_32x4d', 'cv_0.91027_efficientnet_b5_ap', 'cv_0.91263_efficientnetv2_s_in21ft1k', 'cv_0.91499_efficientnet_b6_ap', 'cv_0.92000_tf_efficientnetv2_b3', 'cv_0.93000_resnext50_32x4d', 'cv_0.93000_seresnext26t_32x4d', 'cv_0.93000_tf_efficientnetv2_b0', 'cv_0.93000_tf_efficientnetv2_b1', 'cv_0.93506_efficientnet_b8_ap', 'cv_0.93506_resnext50_32x4d', 'cv_0.93506_seresnext26d_32x4d', 'cv_0.93506_tf_efficientnetv2_m_in21k', 'cv_0.94000_seresnext26tn_32x4d', 'cv_0.94000_tf_efficientnetv2_b2', 'cv_0.94000_tf_efficientnetv2_s_in21ft1k', 'cv_0.95000_seresnext26d_32x4d', 'cv_0.95000_tf_efficientnetv2_s']\n",
      "28\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "source": [
    "pred = 0\n",
    "weight=1\n",
    "for i in tqdm(range(len(folder_names)-15, len(folder_names)-5)):\n",
    "    model_path = os.path.join(MAIN_DIR, folder_names[i])\n",
    "    try:\n",
    "        csv_path = os.path.join(model_path, 'final_preds.csv')\n",
    "        # print(csv_path)\n",
    "        model_tta_preds = pd.read_csv(csv_path)\n",
    "        pred  = pred + model_tta_preds.values*weight\n",
    "        weight +=0.1\n",
    "\n",
    "        \n",
    "    except:\n",
    "        print('error')\n",
    "        print(csv_path)\n",
    "print(pred[:1])\n",
    "test['status'] = pred.argmax(1)\n"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "100%|██████████| 10/10 [00:00<00:00, 492.31it/s]"
     ]
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "[[7.76877436 6.73122575]]\n"
     ]
    },
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "source": [
    "# Create df \n",
    "submission_status = test.drop([\"fault\", \"type\"], axis = 1)\n",
    "status_nums = test[\"status\"].value_counts()\n",
    "status_nums.plot.bar()\n",
    "plt.show()\n",
    "print(status_nums)"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "1    179\n",
      "0     43\n",
      "Name: status, dtype: int64\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Ensemble TYPE models"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "source": [
    "MAIN_DIR = '/media/daitran/Data_SSD/code/SmartInsideAI/github/2021aichamp/src/ensemble_submission/submission_ref/TYPE_TTA_INFERENCE'\n",
    "folder_names = os.listdir(MAIN_DIR)\n",
    "test = pd.read_csv('/media/daitran/Data_SSD/data/SmartinsideAI/2021AIChamp/11.한국전력공사_데이터/test_output_sample.csv')\n",
    "print(folder_names)\n",
    "print(len(folder_names))"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "['cv_0.96000_seresnext26t_32x4d', 'cv_0.89847_efficientnet_b4', 'cv_0.92000_resnext50_32x4d', 'cv_0.92001_resnext50_32x4d', 'cv_0.92326_efficientnet_b1', 'cv_0.93000_resnext50_32x4d', 'cv_0.93000_vit_base_patch16_224', 'cv_0.93001_resnext50_32x4d', 'cv_0.93152_efficientnet_b3', 'cv_0.93270_tf_efficientnet_b6_ns', 'cv_0.93743_efficientnet_b2', 'cv_0.94000_vit_base_patch16_224_in21k', 'cv_0.95000_tf_efficientnetv2_b0', 'cv_0.95000_tf_efficientnetv2_b1', 'cv_0.95000_tf_efficientnetv2_b2', 'cv_0.95000_tf_efficientnetv2_l_in21k', 'cv_0.95000_tf_efficientnetv2_s_in21k', 'cv_0.95000_vit_base_patch16_384', 'cv_0.95396_tf_efficientnet_b5_ns', 'cv_0.95632_tf_efficientnet_cc_b1_8e', 'cv_0.95868_seresnext26tn_32x4d', 'cv_0.95986_seresnext26d_32x4d', 'cv_0.96000_resnext50_32x4d', 'cv_0.96000_seresnext26d_32x4d', 'cv_0.96000_seresnext26tn_32x4d', 'cv_0.96000_tf_efficientnetv2_b3', 'cv_0.96000_tf_efficientnet_b3_ns', 'cv_0.96104_seresnext26t_32x4d', 'cv_0.96104_seresnext50_32x4d', 'cv_0.96458_seresnext50_32x4d', 'cv_0.96812_efficientnet_b5_ap', 'cv_0.96812_efficientnet_b6_ap', 'cv_0.96930_efficientnet_b8_ap', 'cv_0.97000_resnext50_32x4d', 'cv_0.97048_efficientnet_b7_ap', 'cv_0.97048_efficientnet_b8_ap', 'cv_0.97166_resnext_50_32x4d', 'cv_0.97403_efficientnet_b7_ap']\n",
      "38\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "source": [
    "pred = 0\n",
    "weight=1\n",
    "for i in tqdm(range(len(folder_names)-20,len(folder_names))):\n",
    "    \n",
    "    model_path = os.path.join(MAIN_DIR, folder_names[i])\n",
    "    try:\n",
    "        csv_path = os.path.join(model_path, 'final_preds.csv')\n",
    "        # print(csv_path)\n",
    "        model_tta_preds = pd.read_csv(csv_path)\n",
    "        pred  = pred + model_tta_preds.values*weight\n",
    "        weight = weight*2+1\n",
    "\n",
    "        \n",
    "    except:\n",
    "        print('error')\n",
    "        print(csv_path)\n",
    "\n",
    "test['type'] = pred.argmax(1)\n"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "100%|██████████| 20/20 [00:00<00:00, 578.17it/s]\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "source": [
    "# Create df \n",
    "submission_type = test.drop([\"fault\", \"status\"], axis = 1)\n",
    "type_nums = test[\"type\"].value_counts()\n",
    "type_nums.plot.bar()\n",
    "plt.show()\n",
    "print(type_nums)"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "0    97\n",
      "6    39\n",
      "7    25\n",
      "3    23\n",
      "1    18\n",
      "2    12\n",
      "4     6\n",
      "5     2\n",
      "Name: type, dtype: int64\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "# [Optional] Insert best submission"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "source": [
    "# # Retry\n",
    "submission_status = pd.read_csv('/media/daitran/Data_SSD/code/SmartInsideAI/github/2021aichamp/src/ensemble_submission/submission_ref/best_status/submission_status.csv')\n",
    "# submission_type = pd.read_csv('/media/daitran/Data_SSD/code/SmartInsideAI/github/2021AIChamp_Submission/src/type_model/weights/tf_efficientnetv2_s_in21k_512_CosineAnnealingWarmRestarts_TaylorCrossEntropyLoss/submission_type.csv')"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Ensemble FAULT models"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "source": [
    "MAIN_DIR = '/media/daitran/Data_SSD/code/SmartInsideAI/github/2021aichamp/src/ensemble_submission/submission_ref/FAULT_TTA_INFERENCE'\n",
    "folder_names = os.listdir(MAIN_DIR)\n",
    "test = pd.read_csv('/media/daitran/Data_SSD/data/SmartinsideAI/2021AIChamp/11.한국전력공사_데이터/test_output_sample.csv')\n",
    "print(folder_names)\n",
    "print(len(folder_names))"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "['cv_0.71900_vit_base_patch16_224', 'cv_0.72373_vit_base_patch16_384', 'cv_0.73200_efficientnet_b5_ap', 'cv_0.73200_efficientnet_b7_ap', 'cv_0.73318_efficientnet_b3', 'cv_0.73672_tf_efficientnetv2_s', 'cv_0.73790_efficientnetv2_rw_s', 'cv_0.74026_efficientnetv2_s_in21ft1k', 'cv_0.74144_efficientnet_es_pruned', 'cv_0.74380_efficientnetv2_s', 'cv_0.75325_efficientnet_b4_ap', 'cv_0.75443_efficientnet_b8_ap', 'cv_0.75561_efficientnetv2_rw_m', 'cv_0.76151_resnext50d_32x4d', 'cv_0.76505_tf_efficientnetv2_m', 'cv_0.76979_resnext50_32x4d', 'cv_0.77332_resnext50_32x4d', 'cv_0.77450_resnext50', 'cv_0.77686_seresnext26d_32x4d', 'cv_0.77900_tf_efficientnetv2_s_in21k', 'cv_0.78000_tf_efficientnetv2_b2', 'cv_0.78300_tf_efficientnetv2_s', 'cv_0.78800_tf_efficientnetv2_b3', 'cv_0.79339_resnext50_32x4d', 'cv_0.79575_resnext50d_32x4d', 'cv_0.79929_resnext50d_32x4d', 'cv_0.79929_resnext50_32x4d']\n",
      "27\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "source": [
    "pred = 0\n",
    "weight=1\n",
    "for i in tqdm(range(len(folder_names)-12,len(folder_names))):\n",
    "    model_path = os.path.join(MAIN_DIR, folder_names[i])\n",
    "    try:\n",
    "        csv_path = os.path.join(model_path, 'final_preds.csv')\n",
    "        # print(csv_path)\n",
    "        model_tta_preds = pd.read_csv(csv_path)\n",
    "        pred  = pred + model_tta_preds.values*weight\n",
    "        weight = weight*2+1\n",
    "        \n",
    "    except:\n",
    "        print('error')\n",
    "        print(csv_path)\n",
    "\n",
    "test['fault'] = pred.argmax(1)"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "100%|██████████| 12/12 [00:00<00:00, 282.36it/s]\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "source": [
    "submission_fault = test.drop([\"status\", \"type\"], axis = 1)\n",
    "\n",
    "fault_nums = test[\"fault\"].value_counts()\n",
    "fault_nums.plot.bar()\n",
    "plt.show()\n",
    "print(fault_nums)"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "1     74\n",
      "10    59\n",
      "0     53\n",
      "7     11\n",
      "2     10\n",
      "3     10\n",
      "12     2\n",
      "4      1\n",
      "16     1\n",
      "14     1\n",
      "Name: fault, dtype: int64\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "# Convert to submission formart"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "source": [
    "TRAIN_IMAGE_DIR = \"/media/daitran/Data_SSD/data/SmartinsideAI/2021AIChamp/11.한국전력공사_데이터/train\"\n",
    "DIR = \"/media/daitran/Data_SSD/data/SmartinsideAI/2021AIChamp/11.한국전력공사_데이터\"\n",
    "\n",
    "train_df_path = os.path.join(DIR, \"train_output.csv\")\n",
    "train_df = pd.read_csv(train_df_path)\n",
    "display(train_df.head())\n",
    "\n",
    "# print(\"Train sample: {}\".format(len(train_df)))"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>file</th>\n",
       "      <th>status</th>\n",
       "      <th>type</th>\n",
       "      <th>fault</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1679R341_20200409_OH01_DG06_2_30.JPG</td>\n",
       "      <td>정상</td>\n",
       "      <td>COS</td>\n",
       "      <td>정상</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1778D551_20200514_OH01_DG06_2_5.JPG</td>\n",
       "      <td>정상</td>\n",
       "      <td>COS</td>\n",
       "      <td>정상</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1678H971_20200514_OH01_DG06_2_33.JPG</td>\n",
       "      <td>정상</td>\n",
       "      <td>COS</td>\n",
       "      <td>정상</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1778D521_20200514_OH01_DG06_2_15.JPG</td>\n",
       "      <td>정상</td>\n",
       "      <td>COS</td>\n",
       "      <td>정상</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1679R341_20200409_OH01_DG06_2_12.JPG</td>\n",
       "      <td>정상</td>\n",
       "      <td>COS</td>\n",
       "      <td>정상</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                   file status type fault\n",
       "0  1679R341_20200409_OH01_DG06_2_30.JPG     정상  COS    정상\n",
       "1   1778D551_20200514_OH01_DG06_2_5.JPG     정상  COS    정상\n",
       "2  1678H971_20200514_OH01_DG06_2_33.JPG     정상  COS    정상\n",
       "3  1778D521_20200514_OH01_DG06_2_15.JPG     정상  COS    정상\n",
       "4  1679R341_20200409_OH01_DG06_2_12.JPG     정상  COS    정상"
      ]
     },
     "metadata": {}
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "source": [
    "status_label_kr = train_df[\"status\"].unique()\n",
    "print(status_label_kr)\n",
    "type_label_kr = train_df[\"type\"].unique()\n",
    "print(type_label_kr)\n",
    "fault_label_kr = train_df[\"fault\"].unique()\n",
    "print(fault_label_kr)\n"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "['정상' '불량']\n",
      "['COS' 'GS' 'LA' 'LP자기재' 'LP폴리머' '전주' '현수애자자기' '현수애자폴리머']\n",
      "['정상' '부식' '석면노출' '크랙' '아크흔적' '파손' '휴즈링크 석면 노출' '박리' '휴즈링크 석면노출' '홀더불량'\n",
      " '설치불량' '균열' '침식' '탄화' '정상차측탈락' '설치불량 (정상)' '불순물' '탈락정상' '탈락' '커버없음'\n",
      " '박리 (정상)' '커버탈락' '스프리트핀유실']\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "source": [
    "def change_label_names(class_ids, label_kr):\n",
    "    convert_dict = {}\n",
    "    for num in range(len(class_ids)):\n",
    "        convert_dict[class_ids[num]] = label_kr[num]\n",
    "    return convert_dict"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "source": [
    "class_ids_status = [0,1]\n",
    "status_convert_dict = change_label_names(class_ids_status, status_label_kr)\n",
    "submission_status[\"status\"].replace(status_convert_dict, inplace=True)\n",
    "# submission_status"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "source": [
    "class_ids_type = []\n",
    "for i in range(len(type_label_kr)):\n",
    "    class_ids_type.append(i)\n",
    "    \n",
    "type_convert_dict = change_label_names(class_ids_type, type_label_kr)\n",
    "submission_type[\"type\"].replace(type_convert_dict, inplace=True)\n",
    "# submission_type"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "source": [
    "class_ids_fault = []\n",
    "for i in range(len(fault_label_kr)):\n",
    "    class_ids_fault.append(i)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "source": [
    "fault_convert_dict = change_label_names(class_ids_fault, fault_label_kr)\n",
    "submission_fault[\"fault\"].replace(fault_convert_dict, inplace=True)\n",
    "# submission_fault"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "source": [
    "submission_final = pd.read_csv('/media/daitran/Data_SSD/data/SmartinsideAI/2021AIChamp/11.한국전력공사_데이터/test_output_sample.csv')"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "source": [
    "submission_final['status'] = submission_status['status']\n",
    "submission_final['type'] = submission_type['type']\n",
    "submission_final['fault'] = submission_fault['fault']"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "source": [
    "submission_final"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>file</th>\n",
       "      <th>status</th>\n",
       "      <th>type</th>\n",
       "      <th>fault</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.jpg</td>\n",
       "      <td>정상</td>\n",
       "      <td>현수애자폴리머</td>\n",
       "      <td>정상</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.jpg</td>\n",
       "      <td>불량</td>\n",
       "      <td>현수애자폴리머</td>\n",
       "      <td>설치불량</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.jpg</td>\n",
       "      <td>정상</td>\n",
       "      <td>COS</td>\n",
       "      <td>정상</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.jpg</td>\n",
       "      <td>불량</td>\n",
       "      <td>LP자기재</td>\n",
       "      <td>정상</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4.jpg</td>\n",
       "      <td>불량</td>\n",
       "      <td>COS</td>\n",
       "      <td>석면노출</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>217</th>\n",
       "      <td>217.jpg</td>\n",
       "      <td>불량</td>\n",
       "      <td>현수애자폴리머</td>\n",
       "      <td>설치불량</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>218</th>\n",
       "      <td>218.jpg</td>\n",
       "      <td>불량</td>\n",
       "      <td>LP자기재</td>\n",
       "      <td>박리</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>219</th>\n",
       "      <td>219.jpg</td>\n",
       "      <td>불량</td>\n",
       "      <td>LA</td>\n",
       "      <td>정상차측탈락</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>220</th>\n",
       "      <td>220.jpg</td>\n",
       "      <td>불량</td>\n",
       "      <td>COS</td>\n",
       "      <td>부식</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>221</th>\n",
       "      <td>221.jpg</td>\n",
       "      <td>불량</td>\n",
       "      <td>현수애자자기</td>\n",
       "      <td>설치불량</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>222 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        file status     type   fault\n",
       "0      0.jpg     정상  현수애자폴리머      정상\n",
       "1      1.jpg     불량  현수애자폴리머    설치불량\n",
       "2      2.jpg     정상      COS      정상\n",
       "3      3.jpg     불량    LP자기재      정상\n",
       "4      4.jpg     불량      COS    석면노출\n",
       "..       ...    ...      ...     ...\n",
       "217  217.jpg     불량  현수애자폴리머    설치불량\n",
       "218  218.jpg     불량    LP자기재      박리\n",
       "219  219.jpg     불량       LA  정상차측탈락\n",
       "220  220.jpg     불량      COS      부식\n",
       "221  221.jpg     불량   현수애자자기    설치불량\n",
       "\n",
       "[222 rows x 4 columns]"
      ]
     },
     "metadata": {},
     "execution_count": 95
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "source": [
    "submission_final.to_csv('./temp/test_output_sample.csv', index=False)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "source": [
    "updated_submission = submission_final"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Filter"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "source": [
    "changeable_row_idxs = []\n",
    "for row_idx in range(len(updated_submission)):\n",
    "    if updated_submission.iloc[row_idx]['fault'] == '정상' and updated_submission.iloc[row_idx]['status'] != '정상':\n",
    "        # submission_final.iloc[row_idx]['status'] = '정상'\n",
    "        # print(row_idx)\n",
    "        changeable_row_idxs.append(row_idx)\n",
    "        updated_submission.loc[row_idx, 'status'] = '정상'\n",
    "    elif updated_submission.iloc[row_idx]['fault'] == '침식':\n",
    "        print(\"fault-침식 to 아크흔적\")\n",
    "        print(row_idx)\n",
    "        changeable_row_idxs.append(row_idx)\n",
    "        updated_submission.loc[row_idx]['fault'] = '아크흔적'"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "fault-침식 to 아크흔적\n",
      "91\n",
      "fault-침식 to 아크흔적\n",
      "118\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "source": [
    "updated_submission.to_csv('./temp/updated_test_output_sample.csv', index=False)"
   ],
   "outputs": [],
   "metadata": {}
  }
 ],
 "metadata": {
  "orig_nbformat": 4,
  "language_info": {
   "name": "python",
   "version": "3.7.11",
   "mimetype": "text/x-python",
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "pygments_lexer": "ipython3",
   "nbconvert_exporter": "python",
   "file_extension": ".py"
  },
  "kernelspec": {
   "name": "python3",
   "display_name": "Python 3.7.11 64-bit ('timm': conda)"
  },
  "interpreter": {
   "hash": "97c2b951ffe1b39582ff62c0714b50db3703a0a549b3a3e068cb513d4429895b"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}