{"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":"## 26subat: dogrudan sonuclari aldim.....\n## gerisi concat olaylari vs.. burada olacak...","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:14:30.093524Z","iopub.execute_input":"2023-02-27T13:14:30.094115Z","iopub.status.idle":"2023-02-27T13:14:30.116989Z","shell.execute_reply.started":"2023-02-27T13:14:30.094016Z","shell.execute_reply":"2023-02-27T13:14:30.115962Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## 8x yaptinm... pydicom yeni versiyon var... bakalim calisacak mi...\n## seresnetx eskisini kullaniyordu...\n\n## olmazsa yine 7x kullanirsin..\n## machine ID kendi modelinde bakalim eskisi calisacak mi...\n## ya da belki vr he ihtiyacin olmaz....","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:14:30.119024Z","iopub.execute_input":"2023-02-27T13:14:30.120043Z","iopub.status.idle":"2023-02-27T13:14:30.125047Z","shell.execute_reply.started":"2023-02-27T13:14:30.12Z","shell.execute_reply":"2023-02-27T13:14:30.123673Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## aslinda machine id site id yapmak kolay\n## dogrudan machine id yerine site_id ile group the predictions and concat\n## BUNDAN NONSUBMIT ORNEK SAYISINI 200 YAPTIM.....","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:14:30.126849Z","iopub.execute_input":"2023-02-27T13:14:30.127836Z","iopub.status.idle":"2023-02-27T13:14:30.136802Z","shell.execute_reply.started":"2023-02-27T13:14:30.127784Z","shell.execute_reply":"2023-02-27T13:14:30.135886Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## what degerine bakarsin.. asagida ,,, yani mean mi median mi max mi\n## oncelik mean.. yani mean of each model... \n## weighted de olabilri sonraki asamada","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:14:30.14019Z","iopub.execute_input":"2023-02-27T13:14:30.140569Z","iopub.status.idle":"2023-02-27T13:14:30.149024Z","shell.execute_reply.started":"2023-02-27T13:14:30.140533Z","shell.execute_reply":"2023-02-27T13:14:30.147708Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%run /kaggle/input/cancer-notebooks/se-resnext50-gpu-optimized_10x.ipynb\n%reset -f","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:14:30.151191Z","iopub.execute_input":"2023-02-27T13:14:30.151648Z","iopub.status.idle":"2023-02-27T13:21:17.39072Z","shell.execute_reply.started":"2023-02-27T13:14:30.151604Z","shell.execute_reply":"2023-02-27T13:21:17.389609Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%run /kaggle/input/26subat-kendi-modellerim/27subat-submission-2x.ipynb\n%reset -f","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:21:17.39259Z","iopub.execute_input":"2023-02-27T13:21:17.392953Z","iopub.status.idle":"2023-02-27T13:24:45.054471Z","shell.execute_reply.started":"2023-02-27T13:21:17.392917Z","shell.execute_reply":"2023-02-27T13:24:45.053415Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## predictionlari alalim once bir dataframe icine\n## sonra buna prediction_id ve machine id ekleyecegiz...\n## pred_df icinde var mi.. yoksa buluruz...\n## orayi fazla karistirmayali.. yani ana programi fazla ellemeyelim...\n## bu nedenle oncelikle prediction_id to machine_id lazim sana...\n## bunun icin test_df de gelmeli degil mi...\n\n## su formati elde etmek ilk maksadin olmali\n## preds_df = pd.concat(sonuclar).reset_index(drop=True)[['prediction_id','machine_id','preds0','preds1a','preds1b']]\n","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.057967Z","iopub.execute_input":"2023-02-27T13:24:45.058789Z","iopub.status.idle":"2023-02-27T13:24:45.063459Z","shell.execute_reply.started":"2023-02-27T13:24:45.058755Z","shell.execute_reply":"2023-02-27T13:24:45.062013Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\nwith open('preds.pickle','rb') as handle:\n    preds = pickle.load(handle)","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.065231Z","iopub.execute_input":"2023-02-27T13:24:45.065909Z","iopub.status.idle":"2023-02-27T13:24:45.080135Z","shell.execute_reply.started":"2023-02-27T13:24:45.065871Z","shell.execute_reply":"2023-02-27T13:24:45.079138Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = [(x[0],y[0],z[0],v[0],w[0]) for (x,y,z,v,w) in zip(preds[0],preds[1],preds[2],preds[3],preds[4])]\nlen(data),data[:5]","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.081768Z","iopub.execute_input":"2023-02-27T13:24:45.082254Z","iopub.status.idle":"2023-02-27T13:24:45.097428Z","shell.execute_reply.started":"2023-02-27T13:24:45.082213Z","shell.execute_reply":"2023-02-27T13:24:45.09557Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\ntest_df = pd.read_csv('testi.csv')\ntest_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.099335Z","iopub.execute_input":"2023-02-27T13:24:45.099701Z","iopub.status.idle":"2023-02-27T13:24:45.151664Z","shell.execute_reply.started":"2023-02-27T13:24:45.099665Z","shell.execute_reply":"2023-02-27T13:24:45.148696Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## padding yapilmis preds var onlari atalim\nimport numpy as np\ndata = data[:len(test_df)]\nlen(data), [np.mean(x) for x in data[-5:]] ## preds ile tutuyor devam","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.153615Z","iopub.execute_input":"2023-02-27T13:24:45.154273Z","iopub.status.idle":"2023-02-27T13:24:45.162221Z","shell.execute_reply.started":"2023-02-27T13:24:45.154227Z","shell.execute_reply":"2023-02-27T13:24:45.161198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## preds de alalim ckeck edelim\npreds_df = pd.read_csv('pred_df.csv')\npreds_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.163888Z","iopub.execute_input":"2023-02-27T13:24:45.16504Z","iopub.status.idle":"2023-02-27T13:24:45.212338Z","shell.execute_reply.started":"2023-02-27T13:24:45.164957Z","shell.execute_reply":"2023-02-27T13:24:45.210299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## aslinda bana lazim olan preds_df.\n## buna sadece makine isimleri lazim\n## tek yapacagim... test_df machine id almak....\n## bunu aslinda baz da da yapabilirdin...\npreds_df['site_id'] = test_df.site_id\npreds_df['machine_id'] = test_df.machine_id\npreds_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.217867Z","iopub.execute_input":"2023-02-27T13:24:45.218428Z","iopub.status.idle":"2023-02-27T13:24:45.248583Z","shell.execute_reply.started":"2023-02-27T13:24:45.218375Z","shell.execute_reply":"2023-02-27T13:24:45.245254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds_df[['preds_a','preds_b','preds_c','preds_d','preds_e']] = data\ndel preds_df['cancer_raw']\npreds_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.250054Z","iopub.execute_input":"2023-02-27T13:24:45.251208Z","iopub.status.idle":"2023-02-27T13:24:45.285153Z","shell.execute_reply.started":"2023-02-27T13:24:45.251132Z","shell.execute_reply":"2023-02-27T13:24:45.284201Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### maxlarini alalim \npreds_df = preds_df.groupby('prediction_id').max() ##bana imagento maxlari ve prediction id lazim\npreds_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.28991Z","iopub.execute_input":"2023-02-27T13:24:45.290649Z","iopub.status.idle":"2023-02-27T13:24:45.320798Z","shell.execute_reply.started":"2023-02-27T13:24:45.290608Z","shell.execute_reply":"2023-02-27T13:24:45.318254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## simdi sonuclarx alalim buraya....\nsonuclar = pd.read_csv('sonuclarx.csv', index_col = 0)\nsonuclar","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.322234Z","iopub.execute_input":"2023-02-27T13:24:45.327373Z","iopub.status.idle":"2023-02-27T13:24:45.350075Z","shell.execute_reply.started":"2023-02-27T13:24:45.327318Z","shell.execute_reply":"2023-02-27T13:24:45.349214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## simdi bunlari merge etmemiz lazim ama nasil....\n## yani preds_df ile sonuclar\n## her ik tarafta da ama once bunlari merge yapnlazim...\n## join is with index......\npreds_df = preds_df.join(sonuclar, rsuffix='_caller')\npreds_df = preds_df[[x for x in preds_df.columns if 'caller' not in x]]\n## bunu yaparsam bundan sonra tek df gibi devam\npreds_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.354156Z","iopub.execute_input":"2023-02-27T13:24:45.356716Z","iopub.status.idle":"2023-02-27T13:24:45.388383Z","shell.execute_reply.started":"2023-02-27T13:24:45.356653Z","shell.execute_reply":"2023-02-27T13:24:45.387343Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## site_id ya da machine_id ile yapabilirsin.... \nsonuclar = []\nfor site,grup in preds_df.groupby('site_id'):\n    grup = grup[[x for x in grup.columns if 'pred' in x]].rank(method='min',pct=True)# / grup.shape[0]\n    sonuclar.append(grup)\npreds_df = pd.concat(sonuclar)\npreds_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.389667Z","iopub.execute_input":"2023-02-27T13:24:45.390293Z","iopub.status.idle":"2023-02-27T13:24:45.4266Z","shell.execute_reply.started":"2023-02-27T13:24:45.390252Z","shell.execute_reply":"2023-02-27T13:24:45.425724Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## burada farkinda olmadan,, mean column ekleyip... onu da medyna icine sokuyorsun...\n## bu medyani daha guclu kiliyor.... BUNDAN DOLAYI MEDYAN DAHA IYI VERIYOR OLABILIR...\n##\npreds_df['mean']   = preds_df.mean(axis=1)\npreds_df['median'] = preds_df.median(axis=1)\n# preds_df['maxi']   = preds_df.max(axis=1)\npreds_df = preds_df[['mean','median']]\npreds_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.430866Z","iopub.execute_input":"2023-02-27T13:24:45.433415Z","iopub.status.idle":"2023-02-27T13:24:45.456745Z","shell.execute_reply.started":"2023-02-27T13:24:45.43338Z","shell.execute_reply":"2023-02-27T13:24:45.455924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## submission_df test_df in tum prediction_idleri var...\n## make a dict from sonuclar and map it to submission_df\n\nsonuclar_mean = dict(zip(preds_df.index.values,preds_df['mean'].values))\nsonuclar_median = dict(zip(preds_df.index.values,preds_df['median'].values))\n# sonuclar_max = dict(zip(preds_df.index.values,preds_df['maxi'].values))\n\nsonuclar_mean","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.461003Z","iopub.execute_input":"2023-02-27T13:24:45.463547Z","iopub.status.idle":"2023-02-27T13:24:45.479973Z","shell.execute_reply.started":"2023-02-27T13:24:45.463511Z","shell.execute_reply":"2023-02-27T13:24:45.479098Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# buna gerek yok ... sample submission file var....\ndef make_debug_submission():\n    submit_df = pd.DataFrame({\n        'prediction_id': preds_df.index,\n        'cancer': 0,\n    })\n    \n    submit_df = submit_df.groupby('prediction_id').mean()  \n    submit_df.to_csv('submission.csv', index=True) ## groupby yapinca prediction_id indexe gitti!!\n    return pd.read_csv('submission.csv')           ## save ederek geri aldim\n    \n    \nif len(sonuclar_mean)<1000: ## bu su demek... submission df istedigimiz degil\n    submission_df = make_debug_submission() \nelse:\n    submission_df = pd.read_csv('/kaggle/input/rsna-breast-cancer-detection/sample_submission.csv')\n    \nsubmission_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.48497Z","iopub.execute_input":"2023-02-27T13:24:45.487426Z","iopub.status.idle":"2023-02-27T13:24:45.523228Z","shell.execute_reply.started":"2023-02-27T13:24:45.487374Z","shell.execute_reply":"2023-02-27T13:24:45.522235Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"assert len(submission_df)==len(sonuclar_mean),'check prediction_id valid' ## ayni uzunlukta olmalilar...","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.527299Z","iopub.execute_input":"2023-02-27T13:24:45.529516Z","iopub.status.idle":"2023-02-27T13:24:45.537999Z","shell.execute_reply.started":"2023-02-27T13:24:45.529479Z","shell.execute_reply":"2023-02-27T13:24:45.536853Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"what = 'mean'\nif   what == 'mean':\n    submission_df['cancer'] = submission_df.prediction_id.map(sonuclar_mean)\nelif what == 'median':\n    submission_df['cancer'] = submission_df.prediction_id.map(sonuclar_median)\n\n\nsubmission_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.542693Z","iopub.execute_input":"2023-02-27T13:24:45.545418Z","iopub.status.idle":"2023-02-27T13:24:45.567257Z","shell.execute_reply.started":"2023-02-27T13:24:45.54538Z","shell.execute_reply":"2023-02-27T13:24:45.566239Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## def of process submission df......\n## binarize or percentile range\n\ndef binarize(df,th=.5):\n    df['cancer'] = (df.cancer>th).astype(int)\n    return df\n\ndef rankize(df,percentile = .97935):\n    df=df.copy()\n    quantile = df[\"cancer\"].quantile(percentile)\n    print(quantile)\n    df[\"cancer\"] = (df[\"cancer\"] > quantile).astype(int)\n    return df\n\n## choose postprocess if required.....    \n# submission_df = binarize(submission_df)\nsubmission_df = rankize(submission_df)\n\nsubmission_df.sort_values('cancer')","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.571443Z","iopub.execute_input":"2023-02-27T13:24:45.574031Z","iopub.status.idle":"2023-02-27T13:24:45.601757Z","shell.execute_reply.started":"2023-02-27T13:24:45.573992Z","shell.execute_reply":"2023-02-27T13:24:45.600836Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## clear output file before saving submission.csv\n# Clear output folder\nimport os\n\ndef remove_folder_contents(folder):\n    for the_file in os.listdir(folder):\n        file_path = os.path.join(folder, the_file)\n        try:\n            if os.path.isfile(file_path):\n                os.unlink(file_path)\n            elif os.path.isdir(file_path):\n                remove_folder_contents(file_path)\n                os.rmdir(file_path)\n        except Exception as e:\n            print(e)\n\nfolder_path = '/kaggle/working'\nremove_folder_contents(folder_path)","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.606103Z","iopub.execute_input":"2023-02-27T13:24:45.608586Z","iopub.status.idle":"2023-02-27T13:24:45.618441Z","shell.execute_reply.started":"2023-02-27T13:24:45.608549Z","shell.execute_reply":"2023-02-27T13:24:45.617371Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_df.to_csv('submission.csv', index=False)\nsubmission_df","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.623517Z","iopub.execute_input":"2023-02-27T13:24:45.626077Z","iopub.status.idle":"2023-02-27T13:24:45.642688Z","shell.execute_reply.started":"2023-02-27T13:24:45.626033Z","shell.execute_reply":"2023-02-27T13:24:45.641428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## burdan da goruldugu uzere benzer modeller cok farkli sonuclar verebiliyor..\n## bunlari per machine birlestirmek daha mantikli olabilir...\n## orada da farkli thresholdlar denenebilir...\n## yani bir tane basline submit...\n## sonrasinda per machine id submit... per machine id ranking ile birlikte...\n## mean de olabilir medyan da denebilir bu kadar farklilik varsa eger!!\n## tabii bu sbmissionlar iyi ise bu submissionlar seninkilere gore agirliklandirilabilir...\n## ensemble submission belki bir tane..\n## yani basline sade..\n## sonra 3 tane kendisinin farkli ranking versiyonlari...\n## sonra da bir tane seninkilerle ensemble...\n## bunlari cok vakit gecirmeden yapmali ki... ilk skoru gorebilesin...","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.643993Z","iopub.execute_input":"2023-02-27T13:24:45.644573Z","iopub.status.idle":"2023-02-27T13:24:45.653259Z","shell.execute_reply.started":"2023-02-27T13:24:45.644521Z","shell.execute_reply":"2023-02-27T13:24:45.652121Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# !mkdir -p submission_ensemble\n# !cp submission.csv submission_ensemble/submission1.csv  # don't forget to replace 1 with correct number\n# import glob\n# for f in glob.glob('*'):\n#     if not f.startswith('submission_ensemble'):\n#         !rm -rf {f}","metadata":{"execution":{"iopub.status.busy":"2023-02-27T13:24:45.654344Z","iopub.execute_input":"2023-02-27T13:24:45.655354Z","iopub.status.idle":"2023-02-27T13:24:45.665541Z","shell.execute_reply.started":"2023-02-27T13:24:45.655318Z","shell.execute_reply":"2023-02-27T13:24:45.663548Z"},"trusted":true},"execution_count":null,"outputs":[]}]}