{"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 numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\nimport json\nimport glob\nfrom main_io_comp_vis_all import calibrate_magnetic_wifi_ibeacon_to_position, read_data_file\nimport re\nfrom keras.models import Sequential\nfrom keras.layers import Dense\nfrom keras.wrappers.scikit_learn import KerasRegressor\nimport keras\nfloor_txt_num = {'F1':1,'1F':1,'L1':1,'1L':1,'F2':3,'2F':3,'L2':3,'2L':3,'F3':4,'3F':4,'L3':4,'3L':4,'F4':5,'4F':5,'L4':5,'4L':5,\n                'F5':6,'5F':6,'L5':6,'5L':6,'F6':7,'6F':7,'L6':7,'6L':7,'F7':8,'7F':8,'L7':8,'7L':8,'F8':9,'8F':9,'L8':9,'8L':9,\n                'F9':10,'9F':10,'L9':10,'9L':10,'F10':11,'10F':11,'L10':11,'10L':11,'F11':12,'11F':12,'L11':12,'11L':12,\n                'B1':1,'1B':1,\"B\":1,'B2':2,'2B':2,'B3':3,'3B':3,'B4':4,'4B':4}\ntest_paths = glob.glob('../input/indoor-location-navigation/test/*')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def return_site_id(path):\n    with open(path, 'r', encoding='utf-8') as file:\n        lines = file.readlines()\n    for line_data in lines:\n        line_data = re.split('[ :\\t]',line_data)\n        for idx, word in enumerate(line_data):\n            if word.lower() == \"siteid\":\n                return line_data[idx+1]     ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"'''for idx, row in enumerate(mwi_data.wifi):\n    test_df.at[idx,row[2]]=int(row[3])","metadata":{}},{"cell_type":"code","source":"mall_max_fxy = pd.read_csv('../input/bssid-maxfxy-unique/max_fxy.csv')\nsub_file = pd.read_csv('../input/indoor-location-navigation/sample_submission.csv')\nsub_file[['site','file','time']] = sub_file['site_path_timestamp'].str.split('_', expand=True)\nsub_file[\"time\"]=pd.to_numeric(sub_file[\"time\"])\nsub_file[\"site\"]=sub_file[\"site\"].astype('str')\nsite_unique = set(sub_file[\"site\"])\nfile_unique = set(sub_file[\"file\"])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Read model, Predict and write Output file","metadata":{}},{"cell_type":"code","source":"i=0\nfor idx_file, file in enumerate(file_unique):\n    print(idx_file,\" out of \",len(file_unique))\n    try:\n        site = return_site_id('../input/indoor-location-navigation/test/'+file+'.txt')\n        model = keras.models.load_model('../input/int-loc-mdl-v1/'+site+'_mdl')\n        site_bssid = pd.read_csv('../input/bssid-maxfxy-unique/'+site+'_bssid.csv')\n    except:\n        i+=1\n        continue\n    \n    mwi_data = read_data_file('../input/indoor-location-navigation/test/'+file+'.txt')    #break\n    inp_df = np.ones((len(set(mwi_data.wifi[:,0])),len(site_bssid['0'])+1))*(-100)\n    out_df = np.ones((len(set(mwi_data.wifi[:,0])),4))*(-100)\n    mwi_data_wifi_df = pd.DataFrame(data=mwi_data.wifi[:,:4],columns=['Time','SSID','BSSID','RSSI'])\n    for idx, time in enumerate(set(mwi_data.wifi[:,0])):\n        mwi_data_wifi_df_timesnap = mwi_data_wifi_df[mwi_data_wifi_df[\"Time\"]==time][[\"BSSID\",\"RSSI\"]]\n        inp_df[idx,0]=time\n        for idx_row, row in mwi_data_wifi_df_timesnap.iterrows():\n            try:\n                inp_df[idx, site_bssid[site_bssid['0']==row[\"BSSID\"]].index.values[0]+1] = row[\"RSSI\"]\n            except:\n                continue\n    inp_df = pd.DataFrame(data=inp_df,columns=(['Time']+list(site_bssid['0'])))\n    for col in inp_df.columns[1:]:\n        inp_df[col] = (inp_df[col]+100)/100\n    out_df[:,1:4] = model.predict(inp_df[inp_df.columns[1:]])\n    out_df[:,0]=np.array(inp_df[\"Time\"])\n    out_df = pd.DataFrame(data=out_df,columns=(['Time','floor','x','y']))\n    out_df = np.ones((len(set(mwi_data.wifi[:,0])),4))*(-100)\n    out_df[:,1:4] = model.predict(inp_df[inp_df.columns[1:]])\n    out_df[:,0]=np.array(inp_df[\"Time\"])\n    out_df = pd.DataFrame(data=out_df,columns=(['Time','floor','x','y']))\n    out_df[\"floor\"]=out_df[\"floor\"]*(int(mall_max_fxy[mall_max_fxy[\"mall\"]==site][\"max_floor\"]))\n    out_df[\"x\"]=out_df[\"x\"]*(int(mall_max_fxy[mall_max_fxy[\"mall\"]==site][\"max_x\"]))\n    out_df[\"y\"]=out_df[\"y\"]*(int(mall_max_fxy[mall_max_fxy[\"mall\"]==site][\"max_y\"]))\n    \n    min_time = out_df[\"Time\"].min()\n    max_time = out_df[\"Time\"].max()\n    for idx_sub, row_sub in sub_file[sub_file[\"file\"]==file].iterrows():\n        if int(row_sub[\"time\"]) < min_time:\n            sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]] = out_df.loc[list(out_df[\"Time\"]==min_time),[\"floor\",\"x\",\"y\"]].values            \n            continue        \n        elif int(row_sub[\"time\"]) > max_time:\n            sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]] = out_df.loc[list(out_df[\"Time\"]==max_time),[\"floor\",\"x\",\"y\"]].values   \n            continue\n        time_ll = int(out_df.loc[list(out_df[\"Time\"]<=row_sub[\"time\"]),[\"Time\"]].max())\n        time_hl = int(out_df.loc[list(out_df[\"Time\"]>=row_sub[\"time\"]),[\"Time\"]].min())\n        val_ll = out_df.loc[list(out_df[\"Time\"]==time_ll),[\"floor\",\"x\",\"y\"]].values\n        val_hl = out_df.loc[list(out_df[\"Time\"]==time_hl),[\"floor\",\"x\",\"y\"]].values\n        sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]] = (val_ll + val_hl)/2","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_file[['site_path_timestamp', 'floor', 'x', 'y']].to_csv('Submission_file.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"min_time = out_df[\"Time\"].min()\nmax_time = out_df[\"Time\"].max()\nfor idx_sub, row_sub in sub_file[sub_file[\"file\"]==file].iterrows():\n    if int(row_sub[\"time\"]) < min_time:\n        print((sub_file[\"file\"]==file).sum())\n        print('-----------------------------------------------')\n        print(sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]])\n        print('-----------------------------------------------')\n        sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]] = out_df.loc[list(out_df[\"Time\"]==min_time),[\"floor\",\"x\",\"y\"]].values\n        print(sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]])\n        print('-----------------------------------------------')\n        continue        \n    elif int(row_sub[\"time\"]) > max_time:\n        sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]] = out_df.loc[list(out_df[\"Time\"]==max_time),[\"floor\",\"x\",\"y\"]].values   \n        # sub_file[(sub_file[\"file\"]==file) and (sub_file[\"time\"]==int(row_sub[\"time\"]))][\"floor\",\"x\",\"y\"]=out_df[out_df[\"Time\"]==max_time][[\"floor\",\"x\",\"y\"]]\n        continue\n    time_ll = int(out_df.loc[list(out_df[\"Time\"]<=row_sub[\"time\"]),[\"Time\"]].max())\n    time_hl = int(out_df.loc[list(out_df[\"Time\"]>=row_sub[\"time\"]),[\"Time\"]].min())\n    print(\"HL\",time_hl, \"\\n LL\", time_ll)\n    val_ll = out_df.loc[list(out_df[\"Time\"]==time_ll),[\"floor\",\"x\",\"y\"]].values\n    val_hl = out_df.loc[list(out_df[\"Time\"]==time_hl),[\"floor\",\"x\",\"y\"]].values\n    sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]] = (val_ll + val_hl)/2\n    print('---------------------------------------')    \n    print((val_ll + val_hl)/2)\n    print('---------------------------------------')\n    print(sub_file.loc[list((sub_file[\"file\"]==file) & (sub_file[\"time\"]==(row_sub[\"time\"]))),[\"floor\",\"x\",\"y\"]])    \n   ","metadata":{}},{"cell_type":"markdown","source":"mwi_data = read_data_file('../input/indoor-location-navigation/test/2bdf91b83e265e197ac7b117.txt')\nsite = return_site_id('../input/indoor-location-navigation/test/2bdf91b83e265e197ac7b117.txt')\nsite_bssid = pd.read_csv('../input/bssid-maxfxy-unique/'+site+'_bssid.csv')\nlen(site_bssid['0'])\nlen(set(mwi_data.wifi[:,0]))\ninp_df = np.ones((len(set(mwi_data.wifi[:,0])),len(site_bssid['0'])+1))*(-100)\nout_df = np.ones((len(set(mwi_data.wifi[:,0])),4))*(-100)\nmwi_data_wifi_df = pd.DataFrame(data=mwi_data.wifi[:,:4],columns=['Time','SSID','BSSID','RSSI'])\nfor idx, time in enumerate(set(mwi_data.wifi[:,0])):\n    mwi_data_wifi_df_timesnap = mwi_data_wifi_df[mwi_data_wifi_df[\"Time\"]==time][[\"BSSID\",\"RSSI\"]]\n    inp_df[idx,0]=time\n    for idx_row, row in mwi_data_wifi_df_timesnap.iterrows():\n        try:\n            inp_df[idx, site_bssid[site_bssid['0']==row[\"BSSID\"]].index.values[0]+1] = row[\"RSSI\"]\n            #i+=1\n        except:\n            #print(idx, idx_row)\n            #j+=1\n            continue\n#print(i,j)\ninp_df = pd.DataFrame(data=inp_df,columns=(['Time']+list(site_bssid['0'])))\nfor col in inp_df.columns[1:]:\n    inp_df[col] = (inp_df[col]+100)/100\nmodel = keras.models.load_model('../input/int-loc-mdl-v1/'+site+'_mdl')\nout_df[:,1:4] = model.predict(inp_df[inp_df.columns[1:]])\nout_df[:,0]=np.array(inp_df[\"Time\"])\nout_df = pd.DataFrame(data=out_df,columns=(['Time','floor','x','y']))\nout_df = np.ones((len(set(mwi_data.wifi[:,0])),4))*(-100)\nout_df[:,1:4] = model.predict(inp_df[inp_df.columns[1:]])\nout_df[:,0]=np.array(inp_df[\"Time\"])\nout_df = pd.DataFrame(data=out_df,columns=(['Time','floor','x','y']))\nout_df[\"floor\"]=out_df[\"floor\"]*(int(mall_max_fxy[mall_max_fxy[\"mall\"]==site][\"max_floor\"]))\nout_df[\"x\"]=out_df[\"x\"]*(int(mall_max_fxy[mall_max_fxy[\"mall\"]==site][\"max_x\"]))\nout_df[\"y\"]=out_df[\"y\"]*(int(mall_max_fxy[mall_max_fxy[\"mall\"]==site][\"max_y\"]))","metadata":{}}]}