{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressingShift+Enter) will list all files under the input directory\n\nimport os\n#for dirname, _, filenames in os.walk('/kaggle/input'):\n    #for filename in filenames:\n        #print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-08-29T21:41:55.311897Z","iopub.execute_input":"2021-08-29T21:41:55.312394Z","iopub.status.idle":"2021-08-29T21:41:55.322191Z","shell.execute_reply.started":"2021-08-29T21:41:55.312296Z","shell.execute_reply":"2021-08-29T21:41:55.321555Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#if np.mean(dicom.pixel_array) > 100:","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#dicom = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+\"00001\"+\"/FLAIR\"+\"/\"+\"/Image-140.dcm\")\n#data = apply_voi_lut(dicom.pixel_array, dicom)\n#if dicom.PhotometricInterpretation == \"MONOCHROME1\":\n    #data = np.amax(data) - data\n#data = data - np.min(data)\n#data = data / np.max(data)\n#data = (data * 255).astype(np.uint8)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#cv2.imwrite(\"./\" +\"sample4\"+ \".png\",data) # write png image","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2021-08-28T19:49:09.977366Z","iopub.execute_input":"2021-08-28T19:49:09.97779Z","iopub.status.idle":"2021-08-28T19:49:09.994006Z","shell.execute_reply.started":"2021-08-28T19:49:09.977754Z","shell.execute_reply":"2021-08-28T19:49:09.992645Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.mkdir(\"./testi\")","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:42:14.063256Z","iopub.execute_input":"2021-08-29T21:42:14.063831Z","iopub.status.idle":"2021-08-29T21:42:14.068064Z","shell.execute_reply.started":"2021-08-29T21:42:14.063779Z","shell.execute_reply":"2021-08-29T21:42:14.067192Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cv2\nimport pydicom\n\ncases_list = os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test\")\nfor i in range(len(cases_list)):\n    os.mkdir(\"./testi/\"+cases_list[i])\n    if \"FLAIR\" in os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]):\n        liste_names = os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/FLAIR\")\n        exist_value = 1\n        os.mkdir(\"./testi/\"+cases_list[i]+\"/FLAIR\")\n        for k in liste_names:\n            outdir = \"./testi/\"+cases_list[i]+\"/FLAIR\"+\"/\"\n            dicom = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/FLAIR\"+\"/\"+k)\n            \n            if np.mean(dicom.pixel_array) > 5:\n                \n                data = pydicom.pixel_data_handlers.apply_voi_lut(dicom.pixel_array, dicom)\n                if dicom.PhotometricInterpretation == \"MONOCHROME1\":\n                    data = np.amax(data) - data\n                data = data - np.min(data)\n                data = data / np.max(data)\n                data = (data * 255).astype(np.uint8)\n\n                #ds = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/FLAIR\"+\"/\"+k) # read dicom image\n                #windowed = apply_voi_lut(ds.pixel_array, ds)\n\n                cv2.imwrite(outdir +k[:-3]+ \"png\",data) # write png image\n                #print(\"worked\")","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:42:25.369286Z","iopub.execute_input":"2021-08-29T21:42:25.369643Z","iopub.status.idle":"2021-08-29T21:44:58.274422Z","shell.execute_reply.started":"2021-08-29T21:42:25.369615Z","shell.execute_reply":"2021-08-29T21:44:58.273044Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(cases_list)):\n    if \"T1w\" in os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]):\n        liste_names = os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/T1w\")\n        exist_value = 1\n        #os.mkdir(\"./testi/\"+cases_list[i])\n        os.mkdir(\"./testi/\"+cases_list[i]+\"/T1w\")\n        for k in liste_names:\n           \n      \n            \n            outdir = \"./testi/\"+cases_list[i]+\"/T1w\"+\"/\"\n            dicom = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/T1w\"+\"/\"+k)\n            \n            if np.mean(dicom.pixel_array) > 5:\n                data = pydicom.pixel_data_handlers.apply_voi_lut(dicom.pixel_array, dicom)\n                if dicom.PhotometricInterpretation == \"MONOCHROME1\":\n                    data = np.amax(data) - data\n                data = data - np.min(data)\n                data = data / np.max(data)\n                data = (data * 255).astype(np.uint8)\n\n                #ds = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/FLAIR\"+\"/\"+k) # read dicom image\n                #windowed = apply_voi_lut(ds.pixel_array, ds)\n\n                cv2.imwrite(outdir +k[:-3]+ \"png\",data) # write png image\n                #print(\"worked\")","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:46:19.512184Z","iopub.execute_input":"2021-08-29T21:46:19.512597Z","iopub.status.idle":"2021-08-29T21:48:20.287127Z","shell.execute_reply.started":"2021-08-29T21:46:19.512555Z","shell.execute_reply":"2021-08-29T21:48:20.286076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cases_list = os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test\")\nfor i in range(len(cases_list)):\n    if \"T1wCE\" in os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]):\n        liste_names = os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/T1wCE\")\n        exist_value = 1\n        #os.mkdir(\"./testi/\"+cases_list[i])\n        os.mkdir(\"./testi/\"+cases_list[i]+\"/T1wCE\")\n        for k in liste_names:\n           \n      \n            \n            outdir = \"./testi/\"+cases_list[i]+\"/T1wCE\"+\"/\"\n            dicom = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/T1wCE\"+\"/\"+k)\n            if np.mean(dicom.pixel_array) > 5:\n\n                data = pydicom.pixel_data_handlers.apply_voi_lut(dicom.pixel_array, dicom)\n                if dicom.PhotometricInterpretation == \"MONOCHROME1\":\n                    data = np.amax(data) - data\n                data = data - np.min(data)\n                data = data / np.max(data)\n                data = (data * 255).astype(np.uint8)\n\n                #ds = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/FLAIR\"+\"/\"+k) # read dicom image\n                #windowed = apply_voi_lut(ds.pixel_array, ds)\n\n                cv2.imwrite(outdir +k[:-3]+ \"png\",data) # write png image\n                #print(\"worked\")","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:49:52.325636Z","iopub.execute_input":"2021-08-29T21:49:52.326297Z","iopub.status.idle":"2021-08-29T21:52:24.520236Z","shell.execute_reply.started":"2021-08-29T21:49:52.326241Z","shell.execute_reply":"2021-08-29T21:52:24.519126Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cases_list = os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test\")\nfor i in range(len(cases_list)):\n    if \"T2w\" in os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]):\n        liste_names = os.listdir(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/T2w\")\n        exist_value = 1\n        #os.mkdir(\"./testi/\"+cases_list[i])\n        os.mkdir(\"./testi/\"+cases_list[i]+\"/T2w\")\n        for k in liste_names:\n           \n      \n            \n            outdir = \"./testi/\"+cases_list[i]+\"/T2w\"+\"/\"\n            dicom = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/T2w\"+\"/\"+k)\n            if np.mean(dicom.pixel_array) > 5:\n\n                data = pydicom.pixel_data_handlers.apply_voi_lut(dicom.pixel_array, dicom)\n                if dicom.PhotometricInterpretation == \"MONOCHROME1\":\n                    data = np.amax(data) - data\n                data = data - np.min(data)\n                data = data / np.max(data)\n                data = (data * 255).astype(np.uint8)\n\n                #ds = pydicom.read_file(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"+cases_list[i]+\"/FLAIR\"+\"/\"+k) # read dicom image\n                #windowed = apply_voi_lut(ds.pixel_array, ds)\n\n                cv2.imwrite(outdir +k[:-3]+ \"png\",data) # write png image\n                #print(\"worked\")","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:53:14.400166Z","iopub.execute_input":"2021-08-29T21:53:14.400536Z","iopub.status.idle":"2021-08-29T21:56:21.481061Z","shell.execute_reply.started":"2021-08-29T21:53:14.400503Z","shell.execute_reply":"2021-08-29T21:56:21.479859Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\ntf.__version__\nimport keras\nkeras.__version__","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:57:01.924403Z","iopub.execute_input":"2021-08-29T21:57:01.924808Z","iopub.status.idle":"2021-08-29T21:57:08.074805Z","shell.execute_reply.started":"2021-08-29T21:57:01.924753Z","shell.execute_reply":"2021-08-29T21:57:08.073778Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from PIL import Image","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:57:10.57773Z","iopub.execute_input":"2021-08-29T21:57:10.578283Z","iopub.status.idle":"2021-08-29T21:57:10.583383Z","shell.execute_reply.started":"2021-08-29T21:57:10.578237Z","shell.execute_reply":"2021-08-29T21:57:10.582428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nmodel_FLAIR = keras.models.load_model(\"../input/d/b3d1rhan/submission-files/brain_tumor_detector_FLAIR.hdf5\")\nmodel_T1w = keras.models.load_model(\"../input/d/b3d1rhan/submission-files/brain_tumor_detector_T1w.hdf5\")\nmodel_T1wCE = keras.models.load_model(\"../input/d/b3d1rhan/submission-files/brain_tumor_detector_T1wCE.hdf5\")\nmodel_T2w = keras.models.load_model(\"../input/d/b3d1rhan/submission-files/brain_tumor_detector_T2w.hdf5\")","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:57:13.405803Z","iopub.execute_input":"2021-08-29T21:57:13.406198Z","iopub.status.idle":"2021-08-29T21:57:15.332054Z","shell.execute_reply.started":"2021-08-29T21:57:13.406164Z","shell.execute_reply":"2021-08-29T21:57:15.330911Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def tester_function(index,model,version):\n    image_list = []\n    stop_list = 0\n    if index < len(iter_liste):\n        for i in range(index,index+1):\n            if version in os.listdir(\"./testi/\"+cases_list[i]):\n                liste_names = os.listdir(\"./testi/\"+cases_list[i]+\"/\"+version)\n                if len(liste_names) == 0:\n                    stop_list = True\n                    break\n                for k in liste_names:\n                    img = Image.open(\"./testi/\"+cases_list[i]+\"/\" +version+\"/\"+k)\n                    img.thumbnail((128, 128), Image.ANTIALIAS)\n                    if np.array(img.getdata()).shape[0] == 16384:\n                        value = np.array(img.getdata()).reshape(128,128)\n                        image_list.append(value)\n                        \n                    elif np.array(img.getdata()).shape[0] < 16384:\n                        pre_value = list(img.getdata())\n                        length = len(pre_value)\n                        for j in range(16384-length):\n                            pre_value.append(0)\n                            \n                        value = np.array(pre_value).reshape(128,128)\n                        image_list.append(value)\n                        \n                    \n                        \n                        \n         \n    else:\n        if version in os.listdir(\"./testi/\"+cases_list[-1]):\n            liste_names = os.listdir(\"./testi/\"+cases_list[-1]+\"/\"+version)\n                \n            for k in liste_names:\n                img = Image.open(\"./testi/\"+cases_list[-1]+\"/\"+version+\"/\"+k)\n                img.thumbnail((128, 128), Image.ANTIALIAS)\n                if np.array(img.getdata()).shape[0] == 16384:\n                    value = np.array(img.getdata()).reshape(128,128)\n                    image_list.append(value)\n                        \n                elif np.array(img.getdata()).shape[0] < 16384:\n                    pre_value = list(img.getdata())\n                    length = len(pre_value)\n                    for j in range(16384-length):\n                        pre_value.append(0)\n                            \n                    value = np.array(pre_value).reshape(128,128)\n                    image_list.append(value)\n                        \n                \n        \n        \n    if stop_list != True:            \n        print(len(image_list))        \n        test_case = np.array(image_list)\n        print(test_case.shape)\n\n        test_case = test_case.reshape(test_case.shape[0], test_case.shape[1], test_case.shape[2],1)\n        y_pred = model.predict(test_case)\n        \n        return y_pred\n    \n    \n    else:\n        return [0,1]\n    \n    \n                    \n                \n            \n        \n    ","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:57:23.952605Z","iopub.execute_input":"2021-08-29T21:57:23.952984Z","iopub.status.idle":"2021-08-29T21:57:23.971033Z","shell.execute_reply.started":"2021-08-29T21:57:23.952953Z","shell.execute_reply":"2021-08-29T21:57:23.969754Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def tester_function_old(index,model):\n    image_list = []\n    cases_list = os.listdir(\"./testi\")\n    for i in range(index,index+1):\n        if \"FLAIR\" in os.listdir(\"./testi/\"+cases_list[i]):\n            liste_names = os.listdir(\"./testi/\"+cases_list[i]+\"/FLAIR\")\n            exist_value = 1\n    \n            for k in liste_names:\n                img = Image.open(\"./testi/\"+cases_list[i]+\"/FLAIR\"+\"/\"+k)\n                img.thumbnail((128, 128), Image.ANTIALIAS)\n                if np.array(img.getdata()).shape[0] == 16384:\n                    value = np.array(img.getdata()).reshape(128,128)\n                    image_list.append(value)\n\n                elif np.array(img.getdata()).shape[0] < 16384:\n                    pre_value = list(img.getdata())\n                    length = len(pre_value)\n                    for j in range(16384-length):\n                        pre_value.append(0)\n                    \n                    value = np.array(pre_value).reshape(128,128)\n                    image_list.append(value)\n                else:\n                    continue\n                \n        else:\n            exist_value = 0\n            continue\n        print(exist_value)\n    test_case = np.array(image_list)\n    test_case = test_case.reshape(test_case.shape[0], test_case.shape[1], test_case.shape[2],1)\n    y_pred = model.predict(test_case)\n    return y_pred,exist_value","metadata":{"_kg_hide-input":false,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def decider_func(y_pred,exist_value = 1):\n    if exist_value == 1:\n        result = []\n        farklar = []\n        for i in y_pred:\n            if i[0]> i[1]:\n                result.append(1)\n                fark = i[0]-i[1]\n                farklar.append(fark)\n\n            elif i[1] > i[0]:\n                result.append(0)\n                fark = i[1]-i[0]\n                farklar.append(fark)\n\n        result_tuple = (result.count(1),result.count(0))\n        farklar_index = []\n        for i in range(len(farklar)):\n            if farklar[i] < 0.8:\n                farklar_index.append(i)\n\n        revised = []\n        for i in range(len(result)):\n            if i not in farklar_index:\n                revised.append(result[i])\n\n        revised_tuple =(revised.count(1),revised.count(0))\n        if revised_tuple[0] > revised_tuple[1]:\n\n            decision = 1\n\n        else:\n            decision = 0\n        return decision,revised_tuple\n    else:\n        return -1","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:57:30.575691Z","iopub.execute_input":"2021-08-29T21:57:30.576129Z","iopub.status.idle":"2021-08-29T21:57:30.585656Z","shell.execute_reply.started":"2021-08-29T21:57:30.576095Z","shell.execute_reply":"2021-08-29T21:57:30.584931Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cases_list = os.listdir(\"./testi\")\niter_liste = os.listdir(\"./testi/\")","metadata":{"execution":{"iopub.status.busy":"2021-08-29T21:57:38.820518Z","iopub.execute_input":"2021-08-29T21:57:38.821036Z","iopub.status.idle":"2021-08-29T21:57:38.825024Z","shell.execute_reply.started":"2021-08-29T21:57:38.820996Z","shell.execute_reply":"2021-08-29T21:57:38.824225Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#driver_code\npredictions = []\nfor index in range(len(iter_liste)):\n    \n    y_pred_FLAIR = tester_function(index,model_FLAIR,\"FLAIR\")\n    decision_FLAIR,revised_tuple_FLAIR = decider_func(y_pred_FLAIR)\n    \n    y_pred_T1w = tester_function(index,model_T1w,\"T1w\")\n    decision_T1w,revised_tuple_T1w =decider_func(y_pred_T1w)\n    \n    y_pred_T1wCE = tester_function(index,model_T1wCE,\"T1wCE\")\n    decision_T1wCE,revised_tuple_T1wCE = decider_func(y_pred_T1wCE)\n    \n    y_pred_T2w = tester_function(index,model_T2w,\"T2w\")\n    decision_T2w,revised_tuple_T2w = decider_func(y_pred_T2w)\n    \n    liste_dec = [decision_FLAIR,decision_T1w,decision_T1wCE,decision_T2w]\n    print(liste_dec)\n    liste_calc = []\n    liste_revised_tuple = [revised_tuple_FLAIR,revised_tuple_T1w,revised_tuple_T1wCE,revised_tuple_T2w]\n    liste_weights = []\n    for i in liste_revised_tuple:\n        if i[0] > i[1]:\n            weight = i[0] / (i[1]+1)\n            \n        else:\n            weight = i[1] / (i[0]+1)\n            \n        liste_weights.append(weight)\n    summa = 0\n    for i in range(len(liste_dec)):\n        \n        if liste_dec[i] == 0:\n            calc = liste_weights[i] * (-1)\n            liste_calc.append(calc)\n            summa += calc\n            \n        else:\n            calc = liste_weights[i] * (1)\n            liste_calc.append(calc)\n            summa += calc\n            \n    \n    if summa >0:\n        decision = 1\n        \n    else:\n        decision = 0\n        \n    \n    predictions.append(decision)\n    print(summa)\n    print(\"done\")","metadata":{"execution":{"iopub.status.busy":"2021-08-29T22:08:49.040376Z","iopub.execute_input":"2021-08-29T22:08:49.040783Z","iopub.status.idle":"2021-08-29T22:12:05.406205Z","shell.execute_reply.started":"2021-08-29T22:08:49.040736Z","shell.execute_reply":"2021-08-29T22:12:05.404428Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_sub = pd.read_csv(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/sample_submission.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"index_list = []\nfor i in range(sample_sub[\"BraTS21ID\"].shape[0]):\n    tekir = str(sample_sub[\"BraTS21ID\"][i])\n    if len(tekir) < 5:\n        while len(tekir)<5:\n            tekir = \"0\"+tekir\n            \n    index_list.append(tekir)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"indexes_regular = []\nfor i in range(len(index_list)):\n    for k in range(len(iter_liste)):\n        if index_list[i] == iter_liste[k]:\n            indexes_regular.append(k)\n            ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new_predictions = []\nfor i in indexes_regular:\n    new_predictions.append(predictions[i])\n    \n    ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tahmin = np.array(new_predictions)\nprint(tahmin.shape)\ntucker = np.array(index_list)\nprint(tucker.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_submission = pd.DataFrame(columns = [\"BraTS21ID\",\"MGMT_value\"])\nfinal_submission[\"BraTS21ID\"] = tucker\nfinal_submission[\"MGMT_value\"] = tahmin","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_submission.to_csv(\"submission.csv\",index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}