{"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":"import os\nimport re\nimport json\nimport time\nimport datetime\nimport random\nimport glob\nimport importlib\nimport pickle\n\nimport numpy as np\nimport pandas as pd\n\nfrom tqdm import tqdm\nfrom typing import List","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-06-16T20:50:14.520187Z","iopub.execute_input":"2021-06-16T20:50:14.520830Z","iopub.status.idle":"2021-06-16T20:50:14.526756Z","shell.execute_reply.started":"2021-06-16T20:50:14.520773Z","shell.execute_reply":"2021-06-16T20:50:14.525336Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_sub = pd.read_csv('../input/coleridgeinitiative-show-us-the-data/sample_submission.csv')\nsample_sub","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.528216Z","iopub.execute_input":"2021-06-16T20:50:14.528653Z","iopub.status.idle":"2021-06-16T20:50:14.563928Z","shell.execute_reply.started":"2021-06-16T20:50:14.528618Z","shell.execute_reply":"2021-06-16T20:50:14.562967Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data_path = '../input/coleridgeinitiative-show-us-the-data/test'","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.565927Z","iopub.execute_input":"2021-06-16T20:50:14.566538Z","iopub.status.idle":"2021-06-16T20:50:14.571702Z","shell.execute_reply.started":"2021-06-16T20:50:14.566490Z","shell.execute_reply":"2021-06-16T20:50:14.570996Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def read_json_pub(filename, path):\n    json_path = os.path.join(path, (filename+'.json'))\n    combined = []\n    with open(json_path, 'r') as f:\n        json_decode = json.load(f)\n        for data in json_decode:\n            combined.append(data.get('section_title'))\n            combined.append(data.get('text'))\n    \n    all_data = '. '.join(combined)\n    return all_data","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.573370Z","iopub.execute_input":"2021-06-16T20:50:14.573973Z","iopub.status.idle":"2021-06-16T20:50:14.587497Z","shell.execute_reply.started":"2021-06-16T20:50:14.573927Z","shell.execute_reply":"2021-06-16T20:50:14.586402Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def clean_textCAP(txt):\n    return re.sub('[^A-Za-z0-9\\.]+', ' ', str(txt))","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.589000Z","iopub.execute_input":"2021-06-16T20:50:14.589320Z","iopub.status.idle":"2021-06-16T20:50:14.605111Z","shell.execute_reply.started":"2021-06-16T20:50:14.589293Z","shell.execute_reply":"2021-06-16T20:50:14.604215Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def clean_text(txt):\n    return re.sub('[^A-Za-z0-9]+', ' ', str(txt).lower()).strip()","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.606464Z","iopub.execute_input":"2021-06-16T20:50:14.606924Z","iopub.status.idle":"2021-06-16T20:50:14.620393Z","shell.execute_reply.started":"2021-06-16T20:50:14.606893Z","shell.execute_reply":"2021-06-16T20:50:14.619436Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def text_cleaning(text):\n    '''\n    Converts all text to lower case, Removes special charecters, emojis and multiple spaces\n    text - Sentence that needs to be cleaned\n    '''\n    text = re.sub('[^A-Za-z0-9]+', ' ', str(text).lower()).strip()\n    text = re.sub(' +', ' ', text)\n    emoji_pattern = re.compile(\"[\"\n                               u\"\\U0001F600-\\U0001F64F\"  # emoticons\n                               u\"\\U0001F300-\\U0001F5FF\"  # symbols & pictographs\n                               u\"\\U0001F680-\\U0001F6FF\"  # transport & map symbols\n                               u\"\\U0001F1E0-\\U0001F1FF\"  # flags (iOS)\n                               \"]+\", flags=re.UNICODE)\n    text = emoji_pattern.sub(r'', text)\n    return text","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.621775Z","iopub.execute_input":"2021-06-16T20:50:14.622087Z","iopub.status.idle":"2021-06-16T20:50:14.637133Z","shell.execute_reply.started":"2021-06-16T20:50:14.622058Z","shell.execute_reply":"2021-06-16T20:50:14.635948Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def jaccard(str1, str2): \n    a = set(str1.lower().split()) \n    b = set(str2.lower().split())\n    c = a.intersection(b)\n    return float(len(c)) / (len(a) + len(b) - len(c))","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.639506Z","iopub.execute_input":"2021-06-16T20:50:14.639961Z","iopub.status.idle":"2021-06-16T20:50:14.652898Z","shell.execute_reply.started":"2021-06-16T20:50:14.639930Z","shell.execute_reply":"2021-06-16T20:50:14.651595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#existing labels\ntrain_df=pd.read_csv('../input/coleridgeinitiative-show-us-the-data/train.csv')\ntemp_1 = [clean_text(x) for x in train_df['dataset_label'].unique()]\ntemp_2 = [clean_text(x) for x in train_df['dataset_title'].unique()]\ntemp_3 = [clean_text(x) for x in train_df['cleaned_label'].unique()]\nexisting_labels = set(temp_1 + temp_2 + temp_3)\n#existing_labels","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.654878Z","iopub.execute_input":"2021-06-16T20:50:14.655357Z","iopub.status.idle":"2021-06-16T20:50:14.760589Z","shell.execute_reply.started":"2021-06-16T20:50:14.655312Z","shell.execute_reply":"2021-06-16T20:50:14.759456Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset=pd.read_csv('../input/fullset-versions/less12L2_12.csv')\ndataset=dataset.sort_values(by=\"basename\",ascending=False, key=lambda x: x.str.len())","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:14.762443Z","iopub.execute_input":"2021-06-16T20:50:14.762962Z","iopub.status.idle":"2021-06-16T20:50:15.113396Z","shell.execute_reply.started":"2021-06-16T20:50:14.762922Z","shell.execute_reply":"2021-06-16T20:50:15.112272Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def setify(x):\n    return {z for z in set(x.split()) if not z.isdigit()}\n\ndataset['query_string']=dataset.basename.apply(setify)","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:15.114859Z","iopub.execute_input":"2021-06-16T20:50:15.115209Z","iopub.status.idle":"2021-06-16T20:50:15.639757Z","shell.execute_reply.started":"2021-06-16T20:50:15.115178Z","shell.execute_reply":"2021-06-16T20:50:15.638642Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datasetlisq=dataset.query_string.to_list()\nlen(datasetlisq), len([x for x in datasetlisq if len(x)>2])","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:15.641252Z","iopub.execute_input":"2021-06-16T20:50:15.641570Z","iopub.status.idle":"2021-06-16T20:50:15.676560Z","shell.execute_reply.started":"2021-06-16T20:50:15.641537Z","shell.execute_reply":"2021-06-16T20:50:15.675289Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### regex patterns","metadata":{}},{"cell_type":"code","source":"#dot to dot... almost\npattern_dot=r'\\w+\\b\\s+(([A-Z]\\w+\\b[^\\w\\.]*)+(\\w+\\b[^\\w\\.]*)?([A-Z0-9]\\w+\\b[^\\w\\.]*)*.*?\\.)'\n\n#baseline regex\npattern_base=r'\\w+\\b\\s+(([A-Z]\\w+\\b[^\\w\\.]*)+(\\w+\\b[^\\w\\.]*)?([A-Z0-9]\\w+\\b[^\\w\\.]*)*)'\n\n\n#ana regex\npattern_ana=r'\\w+\\b\\s+(([A-Z]\\w+\\b[^\\w\\.]*){2,})'\npattern_ana3=r'\\w+\\b\\s+(([A-Z]\\w+\\b[^\\w\\.]*){3,})'\n\npattern_anab=r'\\w+\\b\\s+(([A-Z]\\w+\\b[^\\w\\.]*){2,}\\w+\\b)'\n\n\n#baseline+ paterns\npattern_plus=r'\\w+\\b\\s+(([A-Z]\\w+\\b[^\\w\\.]*)+(\\w+\\b[^\\w\\.]*)?([A-Z0-9]\\w+\\b[^\\w\\.]*)*(\\w+\\b\\s*){1})'\npattern_acronym='([A-Z]{3,}\\s((dataset)|(database)|(survey)|(data)|(map)|(Dataset)|(Database)|(Survey)|(Data)|(Map)))(\\s\\w*)?'\n\npattern_acronym=re.compile(pattern_acronym)\npattern_ana=re.compile(pattern_ana)\npattern_anab=re.compile(pattern_anab)\npattern_ana3=re.compile(pattern_ana3)\npattern_dot=re.compile(pattern_dot)\npattern_base=re.compile(pattern_base)\npattern_plus=re.compile(pattern_plus)","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:15.678901Z","iopub.execute_input":"2021-06-16T20:50:15.679296Z","iopub.status.idle":"2021-06-16T20:50:15.690880Z","shell.execute_reply.started":"2021-06-16T20:50:15.679257Z","shell.execute_reply":"2021-06-16T20:50:15.689705Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### d3, r1, -a, m1.. m5+liste + remove","metadata":{}},{"cell_type":"code","source":"def undigitize(x):\n    return ' '.join( [m for m in x.split() if not m.isdigit()] )\n\ndef intersecti(xx,datas):\n    return any(len(xx.intersection(ss))>=(len(ss)-len(ss)//5) for ss in datas if len(xx)>=(len(ss)-len(ss)//5))","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:15.692615Z","iopub.execute_input":"2021-06-16T20:50:15.692970Z","iopub.status.idle":"2021-06-16T20:50:15.706226Z","shell.execute_reply.started":"2021-06-16T20:50:15.692928Z","shell.execute_reply":"2021-06-16T20:50:15.705285Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 3CAP\n- acronym train, listem train var\n- acronym ve listemde bulduklarimi dogrudan querystring icinden cikariyorum\n- only CAP kelimeye izin yok: A Agriculture.. mumkun degil..\n- acronym ve listem sonuclari da buyukten kucuge siralandi...\n- ","metadata":{}},{"cell_type":"code","source":"pattern_allacro=r'\\b[A-Z]{3,}\\b'   #### PATERN BASINDAKI R YANI LITERAL COK ONEMLI...!!!\npattern_allacro=re.compile(pattern_allacro)\n\npattern_acronym='([A-Z]{3,}\\s((dataset)|(database)|(survey)|(data)|(map)|(Dataset)|(Database)|(Survey)|(Data)|(Map)))(\\s\\w*)?'\n#pattern_acronym=r'([A-Z]{3,}[\\s-]+(([dD]ataset)|([dD]atabase)|([sS]urvey)|([mM]ap))s?)[\\s,\\.]+'\npattern_acronym=re.compile(pattern_acronym)","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:15.707875Z","iopub.execute_input":"2021-06-16T20:50:15.708358Z","iopub.status.idle":"2021-06-16T20:50:15.719753Z","shell.execute_reply.started":"2021-06-16T20:50:15.708309Z","shell.execute_reply":"2021-06-16T20:50:15.718924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def find_keys(listeden_bulduklarim,acronyms):\n    keyler=[]\n    for element in listeden_bulduklarim:\n        #[key for key,value in acronyms.items() if element in value]\n        keyler.extend([key for key,value in acronyms.items() if element in value])\n    return keyler","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:15.720918Z","iopub.execute_input":"2021-06-16T20:50:15.721356Z","iopub.status.idle":"2021-06-16T20:50:15.733563Z","shell.execute_reply.started":"2021-06-16T20:50:15.721314Z","shell.execute_reply":"2021-06-16T20:50:15.732467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"start_time = time.time()\npath=test_data_path\ncolumn_names = [\"Id\", \"PredictionString\"]\nsubmission = pd.DataFrame(columns = column_names)\nto_append=[]\ninterdict={'0':0,'1':0,'2':0,'3':0,'4':0,'5':1,'6':1,'7':1,'8':1,'9':1,'10':2,'11':2,'12':2,'13':2,\n               '14':2,'15':3,'16':3,'17':3,'18':3,'19':3,'20':4}\n\nwith open('../input/listecim/acronyms_train.pickle','rb') as handle:\n    acronyms=pickle.load(handle)\n\nwith open('../input/listecim/listeci_train.pickle','rb') as handle:\n    listeci=pickle.load(handle)\n\nlisteci['listem'].sort(key=len,reverse=True)\n\n\nfor row in tqdm(sample_sub.itertuples()):\n    #print('su an neler var......',to_append)\n    to_append=[row.Id,'']\n    large_string = str(read_json_pub(row.Id,path))\n    large_string = re.sub(r'\\b[0-9]+\\b\\s*', '', large_string) #large string numarasiz yaptim...\n    text_cap=clean_textCAP(large_string)\n#     captext_orj= list(set([x[0].strip() for x in pattern_base.findall(text_cap)]))\n#     captext_undigit=[undigitize(x).lower() for x in captext_orj] #lower case olarak kullanacagim...\n\n#>>>>>>>>>>>>>>>>>>>>>>>ACRONYM BOLUMU>>>>>>>>>>>>>>>>>>>>>>>\n   #herhangi bir acronym\n    #print(text_cap)\n    ACN=np.unique(pattern_allacro.findall(text_cap))\n    acn=np.array(pattern_acronym.findall(text_cap))\n    acronyms_match= np.unique([x.split()[0] for x in acn[:,0]])\n    print(ACN)\n    print(acronyms_match)\n    ssk=[]\n    ACN_intext=[x for x in ACN if x in acronyms and x not in acronyms_match]\n    #ssk.extend(ACN_intext)\n    print(f'bakalim bunlardan hangileri sonuclar icine girecek, {ACN_intext}')\n     \n    acn=np.array(pattern_acronym.findall(text_cap)) #ACRONYM DATASETE GORE BULUYORSUN AMA\n                                    ## ZATEN ELINDE BIR SURU ACRONYM VAR ONLARI NEDEN BAGIMSIZ OLARAK ARAMIYORSUN\n                                    ### MESELA TEST FILEDA BIRINCI ICINDE ADNI VAR...\n                                    ### DOLAYISIYLA BURASI BOYLE KALSIN AMA..\n                                    #### BENCE BULDUGUN ACRONYMLERI AYRI OLARAK ELEMENT ICINDE ARAT\n                                    ##### YANI ONLARI DA LISTENE AL!!!! ASAGIDAKI LISTENDE OLSUN\n                                    ###### TEXT CLEAN, O ANKI TEXT FORMATINDA DIKKAT O KADAR...\n    \n    if acn.size!=0:\n        for acro in acronyms_match:\n            bigi=''.join([r'{}[\\w\\'-]+\\b[\\s,-]+(?:\\w*\\s)?'.format(chari) for chari in acro])\n            pattern_special='('+bigi+r')\\('+r'{}.*?\\)'.format(acro)\n            pattern_special=re.compile(pattern_special)\n            #print(pattern_special)\n            sonuc=np.unique(np.array(pattern_special.findall(large_string)))\n            if sonuc!=[]:\n                sonuc=[clean_text(x) for x in sonuc]\n                [listeci['listem'].append(x) for x in sonuc if x not in listeci['listem']] #her durumda ekle\n\n                if acro in acronyms:\n                    [acronyms[acro].append(x) for x in sonuc if x not in acronyms[acro]]\n                else:\n                    acronyms[acro]=sonuc\n                    \n                print(f'for {acro}... found these long formes: {sonuc}')\n                ssk.extend(sonuc)\n                if acro not in ssk: ssk.append(acro)\n                \n            elif acro in acronyms:\n                #tamam diyelim ki acro icinde var, hangisini alacaksin...\n                if acro not in ssk: ssk.append(acro) #sadece acro aliyorum, cunku acro LEGIT, ama uzun formu zaten yok pub icinde\n                print(f'bu acronym, acronyms icinde varmis su sekilde ilave ettim......{acro.lower()}')\n        \n        if ssk:   #bunlari asagida cikaracagim.... ci\n            kazima=[x for x in ssk if not x.isupper()]  #buraya kadar ACRONYM BUYUK HARF GELSIN...\n            print('kazima....', kazima)\n            ssk=[x.lower() for x in ssk]                                   \n            #kazima.sort(key=len,reverse=True)\n            \n#             for valida in kazima: #bu sekilde long formlari aliyorum\n#                 pattern_valida=r'{}'.format(valida)\n#                 pattern_valida=re.compile(pattern_valida,re.IGNORECASE)\n#                 large_string=re.sub(pattern_valida, '', large_string) #long formlari large_string icinden cikariyorum\n            \n#             joinim='|'.join(ssk)\n#             to_append[1]=joinim\n#             print('tum anada bulduklarim....',to_append[1])\n            \n#             for elementim in ssk:\n#                 if max([jaccard(x,elementim) for x in existing_labels])<.5:\n                    \n#                     if to_append[1]=='':\n#                         to_append[1]=elementim\n#                     elif elementim not in to_append[1]:\n#                         to_append[1]=to_append[1]+'|'+ elementim\n            \n    #listeci icindekileri de captext ile degerlendirecegiz....\n    captext= list(set([clean_text(x[0]).strip() for x in pattern_base.findall(text_cap)]))\n    print('ilk definition.... captextin uzunlugu', len(captext))\n\n    if kazima: ### yani asagidaki filtrelemeyi kazima bos degilse yap, yoksa bos herseyi filtreler\n        for enti in kazima:\n            captext=[x for x in captext if enti not in x]\n    print('kazima da bulunanlar cikartildi........ captextin uzunlugu', len(captext))\n\n    \n    listeden_bulduklarim=np.unique([x for x in listeci['listem'] for y in captext if x in y])\n    print('listeden ...ilave ..bulduklarim.....',listeden_bulduklarim)\n    if listeden_bulduklarim.size!=0: #ilave bulduklarim, hangi CAPS adi altindalar...bunlar eger, \n                             #ACN_intext icinde varsa bu CAPS'lerde ilave edilecek\n        [ssk.append(x.lower()) for x in find_keys(listeden_bulduklarim,acronyms) if x in ACN_intext]\n        print('bak bakalim listeden gelenlerin acronymlerinden hic varmiymis text icinde.....',ssk)\n        \n        \n\n    ssk.extend(listeden_bulduklarim)\n    for enti in listeden_bulduklarim:\n            captext=[x for x in captext if enti not in x]\n    print('listeden ilave bulunanlar da cikartildi........ captextin uzunlugu', len(captext))\n    #print(captext)\n    \n    \n    \n    joinim='|'.join(np.unique(ssk))\n    to_append[1]=joinim\n    print('set analizine kadar bulduklarim.......',to_append[1])\n    print(to_append[1])\n  \n\n\n     ####### LISTEDEKILERIN IRDELENMESI...        \n#     for elementim in listeci['listem']:\n#  $$$$$$       #ELEMENTIM DEDIGIMIZ SEY GUZEL BIR SEKILDE CLEAN TEXT DEGIL MI....PEKI LARGE STRING CLEAN TEXT MI??\n#         #IGNORE CASE YETERLI DEGIL KI...ARADA BASKA ISARETLER VAR...TABII ALZHEIMERS ALIR MI BOYLE...ALMAZ\n#         if elementim in large_string: \n            \n#             ### DEGERLENDIRME ACISINDAN TRAIN LABELLERIN CIKARTILMASI................................\n#             if max([jaccard(x,elementim) for x in existing_labels])<.5:\n\n#                 if to_append[1]=='':\n#                     to_append[1]=elementim\n#                 elif elementim not in to_append[1]:\n#                     to_append[1]=to_append[1]+'|'+ elementim\n                    \n                    \n#             pattern_elementim=r'{}'.format(elementim)\n#             pattern_elementim=re.compile(pattern_elementim,re.IGNORECASE)\n#             large_string=re.sub(pattern_elementim, '', large_string)\n    \n    \n    captext_set=[set(x.split()) for x in captext if len(set(x.split()))>2]\n    print('......3 kelime alti cikartildi..... kalan',len(captext_set))\n    #print(captext_set)     \n    \n    for row2 in dataset.itertuples():\n        query_string = str(row2.basename)\n        #query_set={x for x in set(query_string.split()) if not (x.isdigit() | (x in stopw))} #sw version\n        query_set={x for x in set(query_string.split()) if not x.isdigit()}\n        #query_set={x for x in set(query_string.split())}\n        if len(query_set)<3: continue\n        tempo=captext_set.copy()\n        \n        #subset degil de intersection ile bulmak istersen... daha flexible ama daha yavas\n        #yukarida interdict ve asagida 3 satiri ekledim.. o kadar...\n        \n        \n        sssl=len(query_set)\n        if sssl<6:\n            captext_set=[x for x in captext_set if not query_set.issubset(x)]\n        else:\n            sssm=max(1,sssl-interdict[str(sssl)])\n            captext_set=[x for x in captext_set if len(x.intersection(query_set))<sssm]\n        \n        #captext_set=[x for x in captext_set if not query_set.issubset(x)] #automatically removes datasets,\n        #captext_set=[x if (sssl>5 and len(x.intersection(query_set))<sssm) else not query_set.issubset(x) for x in captext_set] #automatically removes datasets,\n\n        \n        joini=' '.join(query_set)\n        if captext_set!=tempo:                                  #as they appear by modifying captext_set\n            \n#             ### DEGERLENDIRME ACISINDAN TRAIN LABELLERIN CIKARTILMASI................................\n#             if max([jaccard(x,clean_text(joini)) for x in existing_labels])<.5:\n\n            if to_append[1]=='': to_append[1]=joini \n            #if to_append[1]=='': to_append[1]=query_string \n\n            elif joini not in to_append[1]:\n                to_append[1]=to_append[1]+'|'+ joini\n\n    #             elif query_string not in to_append[1]:\n    #                 to_append[1]=to_append[1]+'|'+ query_string\n            \n    \n    #break\n    print('........bulduklarimin son son durumu.. set analizi dahil.......')\n    print(to_append[1])\n    df_length = len(submission)\n    submission.loc[df_length] = to_append\n\nsubmission.to_csv('submission.csv', index = False)\nprint(\"--- %s seconds ---\" % (time.time() - start_time))\nsubmission","metadata":{"execution":{"iopub.status.busy":"2021-06-16T20:50:15.735001Z","iopub.execute_input":"2021-06-16T20:50:15.735356Z","iopub.status.idle":"2021-06-16T20:50:26.558471Z","shell.execute_reply.started":"2021-06-16T20:50:15.735322Z","shell.execute_reply":"2021-06-16T20:50:26.557468Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}