{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport time\nfrom pathlib import Path\nfrom indoor_location_github_script import read_data_file, compute_step_positions\nimport pickle","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# functions"},{"metadata":{"trusted":true},"cell_type":"code","source":"def save_pickle(obj, filename):\n    outfile = open(filename,'wb')\n    pickle.dump(obj, outfile)\n    outfile.close()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# useful infos"},{"metadata":{"trusted":true},"cell_type":"code","source":"test_buildings = [\n    '5a0546857ecc773753327266',\n    '5c3c44b80379370013e0fd2b',\n    '5d27075f03f801723c2e360f',\n    '5d27096c03f801723c31e5e0',\n    '5d27097f03f801723c320d97',\n    '5d27099f03f801723c32511d',\n    '5d2709a003f801723c3251bf',\n    '5d2709b303f801723c327472',\n    '5d2709bb03f801723c32852c',\n    '5d2709c303f801723c3299ee',\n    '5d2709d403f801723c32bd39',\n    '5d2709e003f801723c32d896',\n    '5da138274db8ce0c98bbd3d2',\n    '5da1382d4db8ce0c98bbe92e',\n    '5da138314db8ce0c98bbf3a0',\n    '5da138364db8ce0c98bc00f1',\n    '5da1383b4db8ce0c98bc11ab',\n    '5da138754db8ce0c98bca82f',\n    '5da138764db8ce0c98bcaa46',\n    '5da1389e4db8ce0c98bd0547',\n    '5da138b74db8ce0c98bd4774',\n    '5da958dd46f8266d0737457b',\n    '5dbc1d84c1eb61796cf7c010',\n    '5dc8cea7659e181adb076a3f'\n]\n\nfloor_map = {\"B2\":-2, \"B1\":-1, \"F1\":0, \"F2\": 1, \"F3\":2, \"F4\":3, \"F5\":4, \"F6\":5, \"F7\":6,\"F8\":7, \"F9\":8,\n             \"1F\":0, \"2F\":1, \"3F\":2, \"4F\":3, \"5F\":4, \"6F\":5, \"7F\":6, \"8F\": 7, \"9F\":8}","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# parameters/variables"},{"metadata":{"trusted":true},"cell_type":"code","source":"wifi_ts_cutoff = 5000 # do not include wifi data out of this range (in ms)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# extract train data"},{"metadata":{"trusted":true},"cell_type":"code","source":"bssid_map = {}\nxy_data = {}\ntimestamps = {}\npath_data = {}\npath_name = {}\n\nfor building in test_buildings:\n#     print(building)\n    start = time.time()\n    for trace_path in Path(f'../input/indoor-location-navigation/train/{building}').glob('*/*.txt'):\n        str_split = str(trace_path).split('/')\n        floor = floor_map[str_split[-2]]\n        trace = str_split[-1][:-4]\n        \n        path_datas = read_data_file(trace_path)\n        wifi_datas = path_datas.wifi\n        if len(wifi_datas) == 0:\n            continue\n        acce_datas = path_datas.acce\n#         magn_datas = path_datas.magn\n        ahrs_datas = path_datas.ahrs\n#         ibeacon_datas = path_datas.ibeacon\n        posi_datas = path_datas.waypoint\n        step_positions = compute_step_positions(acce_datas, ahrs_datas, posi_datas)\n        \n        path_key = len(path_data)\n        path_value = []\n        \n        for pos in step_positions:\n            used_bssids = set()\n            X = []\n            y = np.insert(pos[1:], 0, floor)\n            pos_id = len(xy_data)\n            pos_ts = int(pos[0])\n            close_wifis = wifi_datas[np.abs(wifi_datas[:, -1].astype(int) - pos_ts) < wifi_ts_cutoff]\n            if len(close_wifis) == 0:\n                continue\n            for idx in np.argsort(np.abs(close_wifis[:, -1].astype(int) - pos_ts)):\n                wifi = close_wifis[idx]\n                bssid = wifi[-3]\n                if bssid in bssid_map:\n                    bssid = bssid_map[bssid]\n                else:\n                    i = len(bssid_map)\n                    bssid_map[bssid] = i\n                    bssid = i\n                    \n                if bssid in used_bssids:\n                    continue\n                else:\n                    used_bssids.add(bssid)\n                    rssi = wifi[-2]\n                    X.append([floor, bssid, int(rssi)])\n            X = np.array(X)\n            xy_data[pos_id] = (X, y)\n            timestamps[pos_id] = pos[0]\n            path_value.append(pos_id)\n        path_data[path_key] = path_value\n        path_name[path_key] = trace_path\n#         break\n#     break\n    print(f'{building} took {time.time() - start} seconds\\n')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"save_pickle(xy_data, 'data.pickle')\nsave_pickle(bssid_map, 'bssids.pickle')\nsave_pickle(timestamps, 'timestamps.pickle')\nsave_pickle(path_data, 'path_data.pickle')\nsave_pickle(path_name, 'path_name.pickle')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!free -m","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# ------------------------------------------------"}],"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":4,"nbformat_minor":4}