{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Ensemble models to submission"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [],
   "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\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load models prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [],
   "source": [
    "submission_status = pd.read_csv('/media/daitran/Data_SSD/code/SmartInsideAI/github/2021AIChamp_Submission/src/status_models/weights/resnext50_32x4d_768_CosineAnnealingWarmRestarts_TaylorCrossEntropyLoss/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')\n",
    "submission_fault = pd.read_csv('/media/daitran/Data_SSD/code/SmartInsideAI/github/2021AIChamp_Submission/src/fault_model/weights/resnext50_32x4d_768_CosineAnnealingWarmRestarts_TaylorCrossEntropyLoss/submission_fault.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## STATUS model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1    178\n",
      "0     44\n",
      "Name: status, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# Create df \n",
    "status_nums = submission_status[\"status\"].value_counts()\n",
    "status_nums.plot.bar()\n",
    "plt.show()\n",
    "print(status_nums)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## TYPE model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    97\n",
      "6    38\n",
      "7    26\n",
      "3    23\n",
      "1    18\n",
      "2    12\n",
      "4     6\n",
      "5     2\n",
      "Name: type, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# Create df \n",
    "type_nums = submission_type[\"type\"].value_counts()\n",
    "type_nums.plot.bar()\n",
    "plt.show()\n",
    "print(type_nums)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## FAULT model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1     75\n",
      "10    57\n",
      "0     53\n",
      "3     12\n",
      "2     11\n",
      "7     10\n",
      "12     2\n",
      "16     1\n",
      "14     1\n",
      "Name: fault, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "fault_nums = submission_fault[\"fault\"].value_counts()\n",
    "fault_nums.plot.bar()\n",
    "plt.show()\n",
    "print(fault_nums)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Convert to submission formart"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "metadata": {},
   "outputs": [
    {
     "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": {},
     "output_type": "display_data"
    }
   ],
   "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)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['정상' '불량']\n",
      "['COS' 'GS' 'LA' 'LP자기재' 'LP폴리머' '전주' '현수애자자기' '현수애자폴리머']\n",
      "['정상' '부식' '석면노출' '크랙' '아크흔적' '파손' '휴즈링크 석면 노출' '박리' '휴즈링크 석면노출' '홀더불량'\n",
      " '설치불량' '균열' '침식' '탄화' '정상차측탈락' '설치불량 (정상)' '불순물' '탈락정상' '탈락' '커버없음'\n",
      " '박리 (정상)' '커버탈락' '스프리트핀유실']\n"
     ]
    }
   ],
   "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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {},
   "outputs": [],
   "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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [],
   "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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [],
   "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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [],
   "source": [
    "class_ids_fault = []\n",
    "for i in range(len(fault_label_kr)):\n",
    "    class_ids_fault.append(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "metadata": {},
   "outputs": [],
   "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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [],
   "source": [
    "submission_final = pd.read_csv('/media/daitran/Data_SSD/data/SmartinsideAI/2021AIChamp/11.한국전력공사_데이터/test_output_sample.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [],
   "source": [
    "submission_final['status'] = submission_status['status']\n",
    "submission_final['type'] = submission_type['type']\n",
    "submission_final['fault'] = submission_fault['fault']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [
    {
     "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]"
      ]
     },
     "execution_count": 256,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submission_final"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [],
   "source": [
    "submission_final.to_csv('./single_temp/test_output_sample.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [],
   "source": [
    "updated_submission = submission_final"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "fault-침식 to 아크흔적\n",
      "91\n",
      "fault-침식 to 아크흔적\n",
      "118\n"
     ]
    }
   ],
   "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'] = '아크흔적'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "metadata": {},
   "outputs": [],
   "source": [
    "updated_submission.to_csv('./single_temp/updated_test_output_sample.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 261,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compare updated with the best ensemble\n",
    "submission_final = updated_submission"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 262,
   "metadata": {},
   "outputs": [],
   "source": [
    "best_LB = pd.read_csv('/media/daitran/Data_SSD/code/SmartInsideAI/github/2021AIChamp_Submission/src/ensemble/temp/test_output_sample.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 263,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 222/222 [00:00<00:00, 9483.77it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of predicted different: 12\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# Check status\n",
    "diff_idxs = []\n",
    "for row_idx in tqdm(range(len(best_LB))):\n",
    "    if best_LB.iloc[row_idx]['status'] != submission_final.iloc[row_idx]['status']:\n",
    "        diff_idxs.append(row_idx)\n",
    "print(\"Number of predicted different: {}\".format(len(diff_idxs)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 264,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 222/222 [00:00<00:00, 7261.45it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of predicted different: 5\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# Check status\n",
    "diff_idxs = []\n",
    "for row_idx in tqdm(range(len(best_LB))):\n",
    "    if best_LB.iloc[row_idx]['type'] != submission_final.iloc[row_idx]['type']:\n",
    "        diff_idxs.append(row_idx)\n",
    "print(\"Number of predicted different: {}\".format(len(diff_idxs)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 265,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 222/222 [00:00<00:00, 6208.65it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of predicted different: 12\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Check status\n",
    "diff_idxs = []\n",
    "for row_idx in tqdm(range(len(best_LB))):\n",
    "    if best_LB.iloc[row_idx]['fault'] != submission_final.iloc[row_idx]['fault']:\n",
    "        diff_idxs.append(row_idx)\n",
    "print(\"Number of predicted different: {}\".format(len(diff_idxs)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "97c2b951ffe1b39582ff62c0714b50db3703a0a549b3a3e068cb513d4429895b"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
