{"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)\nimport os\nimport datetime\nimport math\nimport gc\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":"2022-11-05T10:41:28.531476Z","iopub.execute_input":"2022-11-05T10:41:28.532250Z","iopub.status.idle":"2022-11-05T10:41:28.561153Z","shell.execute_reply.started":"2022-11-05T10:41:28.532140Z","shell.execute_reply":"2022-11-05T10:41:28.559700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"raw","source":"path = '../input/pvt-tables/aquocomplete/AQU-2019-04-05-6.csv'\ndf = pd.read_csv(path)\ncolumn_list = list(df.columns)\n#cols_with_region = []\n#for k in column_list:\ncols_suffix = [k for k in column_list if 'region' in k]\nfor i in range(len(cols_suffix)):\n    cols_suffix[i] = cols_suffix[i].split(sep='_')[-1]\nsummary_df = pd.DataFrame()\nfor x in cols_suffix:\n    cum_column = 'cum_distance_{}'.format(x)\n    uncor_cum_column = 'uncor_cum_distance_{}'.format(x)\n    fp_column = 'position_at_finish_{}'.format(x)\n    for i in range(len(df)):\n        if (df[cum_column][i]>df['run_up_distance'][0]):\n            ratio = (df['run_up_distance'][0] - df[cum_column][i-1]) / (df[cum_column][i] - df[cum_column][i-1])\n            uncor_cum_distance_1 = ratio * (df[uncor_cum_column][i] - df[uncor_cum_column][i-1]) + df[uncor_cum_column][i-1]\n            time_1 = (ratio * 0.25) + (i * 0.25)\n            break\n    for j in range(len(df)):\n        dist_total = df['run_up_distance'][0]+df['distance_id'][0]\n        if (df[cum_column][j]>dist_total):\n            ratio = (dist_total - df[cum_column][j-1]) / (df[cum_column][j] - df[cum_column][j-1])\n            uncor_cum_distance_2 = ratio * (df[uncor_cum_column][j] - df[uncor_cum_column][j-1]) + df[uncor_cum_column][j-1]\n            time_2 = (ratio * 0.25) + (j * 0.25)\n            break\n    uncor_cum_distance = uncor_cum_distance_2 - uncor_cum_distance_1\n    time = time_2 - time_1\n    finish_position = df[fp_column][0]\n    pg_no = x\n    path_eff = df['distance_id'][0] / uncor_cum_distance\n    row_to_app = {'program_number': pg_no, 'path_efficiency': path_eff, 'race_time': time, 'true_position_at_finish': finish_position}\n    summary_df = summary_df.append(row_to_app, ignore_index=True)\nsummary_df = summary_df.sort_values(by=['race_time'], ascending=True)\ngenerated_pos_finish = list(range(1,len(summary_df)+1))\nsummary_df['generated_pos_finish'] = generated_pos_finish\nsummary_df['true_position_at_finish'] = summary_df['true_position_at_finish'].map(lambda x: int(x))\nsummary_df.index = pd.RangeIndex(len(summary_df.index))\nsummary_df\n       ","metadata":{"execution":{"iopub.status.busy":"2022-11-04T13:39:25.895353Z","iopub.execute_input":"2022-11-04T13:39:25.895996Z","iopub.status.idle":"2022-11-04T13:39:26.088147Z","shell.execute_reply.started":"2022-11-04T13:39:25.895947Z","shell.execute_reply":"2022-11-04T13:39:26.086746Z"},"jupyter":{"source_hidden":true}}},{"cell_type":"raw","source":"path = '../input/pvt-tables/sartcomplete/SAR-2019-07-24-4.csv'\ndf = pd.read_csv(path)\ncolumn_list = list(df.columns)\n#cols_with_region = []\n#for k in column_list:\ncols_suffix = [k for k in column_list if 'region' in k]\nfor i in range(len(cols_suffix)):\n    cols_suffix[i] = cols_suffix[i].split(sep='_')[-1]\nsummary_df = pd.DataFrame()\nfor x in cols_suffix:\n    cum_column = 'cum_distance_{}'.format(x)\n    uncor_cum_column = 'uncor_cum_distance_{}'.format(x)\n    fp_column = 'position_at_finish_{}'.format(x)\n    for i in range(len(df)):\n        if (df[cum_column][i]>=df['run_up_distance'][0]):\n            ratio = (df['run_up_distance'][0] - df[cum_column][i-1]) / (df[cum_column][i] - df[cum_column][i-1])\n            #uncor_cum_distance_1 = ratio * (df[uncor_cum_column][i] - df[uncor_cum_column][i-1]) + df[uncor_cum_column][i-1]\n            uncor_cum_distance_1 = 0.\n            time_1 = (ratio * 0.25) + ((i-1) * 0.25)\n            break\n    for j in range(len(df)):\n        dist_total = df['run_up_distance'][0]+df['distance_id'][0]\n        if (df[cum_column][j]>=dist_total):\n            ratio = (dist_total - df[cum_column][j-1]) / (df[cum_column][j] - df[cum_column][j-1])\n            uncor_cum_distance_2 = ratio * (df[uncor_cum_column][j] - df[uncor_cum_column][j-1]) + df[uncor_cum_column][j-1]\n            time_2 = (ratio * 0.25) + ((j-1) * 0.25)\n            break\n    uncor_cum_distance = uncor_cum_distance_2 - uncor_cum_distance_1\n    time = time_2 - time_1\n    finish_position = df[fp_column][0]\n    pg_no = x\n    path_eff = (df['distance_id'][0]+df['run_up_distance'][0]) / uncor_cum_distance\n    row_to_app = {'program_number': pg_no, 'path_efficiency': path_eff, 'race_time': time, 'true_position_at_finish': finish_position}\n    summary_df = summary_df.append(row_to_app, ignore_index=True)\nsummary_df = summary_df.sort_values(by=['race_time'], ascending=True)\ngenerated_pos_finish = list(range(1,len(summary_df)+1))\nsummary_df['generated_pos_finish'] = generated_pos_finish\nsummary_df['true_position_at_finish'] = summary_df['true_position_at_finish'].map(lambda x: int(x))\nsummary_df.index = pd.RangeIndex(len(summary_df.index))\nsummary_df\n       ","metadata":{"execution":{"iopub.status.busy":"2022-11-04T15:52:28.160416Z","iopub.execute_input":"2022-11-04T15:52:28.160908Z","iopub.status.idle":"2022-11-04T15:52:28.340857Z","shell.execute_reply.started":"2022-11-04T15:52:28.160863Z","shell.execute_reply":"2022-11-04T15:52:28.339685Z"},"jupyter":{"source_hidden":true}}},{"cell_type":"raw","source":"def data_organizer (path:str):    \n    df = pd.read_csv(path)\n    column_list = list(df.columns)    \n    cols_suffix = [k for k in column_list if 'region' in k]\n    for i in range(len(cols_suffix)):\n        cols_suffix[i] = cols_suffix[i].split(sep='_')[-1]\n    summary_df = pd.DataFrame()\n    for x in cols_suffix:\n        cum_column = 'cum_distance_{}'.format(x)\n        uncor_cum_column = 'uncor_cum_distance_{}'.format(x)\n        fp_column = 'position_at_finish_{}'.format(x)\n        one_ft_speed_col = 'one_foot_speed_{}'.format(x)\n        velocity_column = 'velocity_horizontal_{}'.format(x)\n        for i in range(len(df)):\n            if (df[cum_column][i]>=df['run_up_distance'][0]):\n                if (i==0):\n                    uncor_cum_distance_1 = 0.\n                    time_1 = 0.\n                    break\n                else:\n                    last_time = (df['run_up_distance'][0] - df[cum_column][i-1]) * df[one_ft_speed_col][i]\n                    uncor_cum_distance_1 = 0.\n                    time_1 = last_time + ((i-1) * 0.25)\n                    break\n        for j in range(len(df)):\n            dist_total = df['run_up_distance'][0]+df['distance_id'][0]\n            uncor_cum_distance_2 = 0.\n            time_2 = 0.\n            if (df[cum_column][j]>=dist_total):\n                last_time = (dist_total - df[cum_column][j-1]) * df[one_ft_speed_col][j]\n                uncor_cum_distance_2 = last_time * df[velocity_column][j] + df[uncor_cum_column][j-1]\n                time_2 = last_time + ((j-1) * 0.25)\n                break\n        if (uncor_cum_distance_2==0.): # the horse has left the race before finishing it\n            uncor_cum_distance = math.nan\n            time = math.nan\n            finish_position = len(cols_suffix)\n            pg_no = x\n            path_eff = math.nan\n        else:            \n            uncor_cum_distance = uncor_cum_distance_2 - uncor_cum_distance_1\n            time = time_2 - time_1\n            finish_position = df[fp_column][0]\n            pg_no = x\n            path_eff = (df['distance_id'][0]+df['run_up_distance'][0]) / uncor_cum_distance\n        row_to_app = {'program_number': pg_no, 'path_efficiency': path_eff, 'race_time': time, 'true_position_at_finish': finish_position}\n        summary_df = summary_df.append(row_to_app, ignore_index=True)\n    summary_df = summary_df.sort_values(by=['race_time'], ascending=True)\n    generated_pos_finish = list(range(1,len(summary_df)+1))    \n    summary_df['generated_pos_finish'] = generated_pos_finish\n    summary_df['true_position_at_finish'] = summary_df['true_position_at_finish'].map(lambda x: int(x))    \n    summary_df.index = pd.RangeIndex(len(summary_df.index))\n    return summary_df","metadata":{"execution":{"iopub.status.busy":"2022-11-04T18:09:18.446280Z","iopub.execute_input":"2022-11-04T18:09:18.446958Z","iopub.status.idle":"2022-11-04T18:09:18.464841Z","shell.execute_reply.started":"2022-11-04T18:09:18.446921Z","shell.execute_reply":"2022-11-04T18:09:18.463717Z"},"jupyter":{"source_hidden":true}}},{"cell_type":"code","source":"def data_organizer (path:str):    \n    df = pd.read_csv(path)\n    column_list = list(df.columns)    \n    cols_suffix = [k for k in column_list if 'region' in k]\n    for i in range(len(cols_suffix)):\n        cols_suffix[i] = cols_suffix[i].split(sep='_')[-1]\n    summary_df = pd.DataFrame()\n    track_heading_diff = pd.DataFrame()\n    for x in cols_suffix:\n        #df = pd.read_csv(path)\n        cum_column = 'cum_distance_{}'.format(x)\n        uncor_cum_column = 'uncor_cum_distance_{}'.format(x)\n        fp_column = 'position_at_finish_{}'.format(x)\n        one_ft_speed_col = 'one_foot_speed_{}'.format(x)\n        velocity_column = 'velocity_horizontal_{}'.format(x)\n        region_column = 'region_{}'.format(x)\n        track_hd_diff = 'track_heading_diff_{}'.format(x)\n        for i in range(len(df)):\n            if (df[cum_column][i]>=df['run_up_distance'][0]):\n                if (i==0):\n                    uncor_cum_distance_1 = 0.\n                    time_1 = 0.\n                    break\n                else:\n                    last_time = (df['run_up_distance'][0] - df[cum_column][i-1]) * df[one_ft_speed_col][i]\n                    uncor_cum_distance_1 = 0.\n                    time_1 = last_time + ((i-1) * 0.25)\n                    break\n        for j in range(len(df)):\n            dist_total = df['run_up_distance'][0]+df['distance_id'][0]\n            uncor_cum_distance_2 = 0.\n            time_2 = 0.\n            if (df[cum_column][j]>=dist_total):\n                last_time = (dist_total - df[cum_column][j-1]) * df[one_ft_speed_col][j]\n                uncor_cum_distance_2 = last_time * df[velocity_column][j] + df[uncor_cum_column][j-1]\n                time_2 = last_time + ((j-1) * 0.25) \n                j_r = j\n                break\n        \n        if (uncor_cum_distance_2==0.): # the horse has left the race before finishing it\n            uncor_cum_distance = math.nan\n            time = math.nan\n            finish_position = len(cols_suffix)\n            pg_no = x\n            path_eff = math.nan\n            j_r = len(df[uncor_cum_column].dropna())\n        else:            \n            uncor_cum_distance = uncor_cum_distance_2 - uncor_cum_distance_1\n            time = time_2 - time_1\n            finish_position = df[fp_column][0]\n            pg_no = x\n            path_eff = (df['distance_id'][0]+df['run_up_distance'][0]) / uncor_cum_distance\n            \n        df_r = df[:j_r]\n        print(len(df), len(df_r))\n        unique_regions = df_r[region_column].unique()\n        row_to_app_2 = {'program_no':x}\n        for z in unique_regions:\n            z_mean = df_r[df_r[region_column]==z][track_hd_diff].mean()\n            row_to_app_2[z] = z_mean                            \n        \n        row_to_app = {'program_number': pg_no, 'path_efficiency': path_eff, 'race_time': time, 'true_position_at_finish': finish_position}\n        summary_df = summary_df.append(row_to_app, ignore_index=True)\n        track_heading_diff = track_heading_diff.append(row_to_app_2, ignore_index=True)\n    summary_df = summary_df.sort_values(by=['race_time'], ascending=True)\n    generated_pos_finish = list(range(1,len(summary_df)+1))    \n    summary_df['generated_pos_finish'] = generated_pos_finish\n    summary_df['true_position_at_finish'] = summary_df['true_position_at_finish'].map(lambda x: int(x))    \n    summary_df.index = pd.RangeIndex(len(summary_df.index))\n    return summary_df, track_heading_diff","metadata":{"execution":{"iopub.status.busy":"2022-11-05T11:00:50.668358Z","iopub.execute_input":"2022-11-05T11:00:50.668730Z","iopub.status.idle":"2022-11-05T11:00:50.690849Z","shell.execute_reply.started":"2022-11-05T11:00:50.668700Z","shell.execute_reply":"2022-11-05T11:00:50.689680Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"source_path = '../input/pvt-tables/aqudcomplete/AQU-2019-01-01-1.csv'\ndf, track_head = data_organizer (source_path)\ntruth_series = (df.true_position_at_finish == df.generated_pos_finish)\naccuracy = sum(truth_series)/len(df)\nprint(accuracy)\ndisplay(track_head)\ndisplay(df)","metadata":{"execution":{"iopub.status.busy":"2022-11-05T11:00:51.539163Z","iopub.execute_input":"2022-11-05T11:00:51.539605Z","iopub.status.idle":"2022-11-05T11:00:51.652889Z","shell.execute_reply.started":"2022-11-05T11:00:51.539560Z","shell.execute_reply":"2022-11-05T11:00:51.651605Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dir_list = os.listdir('../input/pvt-tables')\naccuracy = {}\nperfect = 0\nfor j in range(len(dir_list)):\n    os.makedirs(os.path.join('./eff_pos', dir_list[j]))\n    os.makedirs(os.path.join('./tr_head', dir_list[j]))\nparent_folders = ['../input/pvt-tables/aqudcomplete', '../input/pvt-tables/aquocomplete', '../input/pvt-tables/aqutcomplete', '../input/pvt-tables/beldcomplete',\n    '../input/pvt-tables/belicomplete', '../input/pvt-tables/belmcomplete', '../input/pvt-tables/beltcomplete', '../input/pvt-tables/sardcomplete',\n    '../input/pvt-tables/saricomplete', '../input/pvt-tables/sarmcomplete', '../input/pvt-tables/sartcomplete']\nfor parent_folder in parent_folders:\n    file_list = os.listdir(parent_folder)\n    accuracy_2 = []\n    for i in range(len(file_list)):\n        source_path = os.path.join(parent_folder, file_list[i])\n        saving_path_1 = source_path.replace(\"../input/pvt-tables/\", \"./eff_pos/\")\n        saving_path_2 = source_path.replace(\"../input/pvt-tables/\", \"./tr_head/\")\n        df, tr_head = data_organizer (source_path)\n        df.to_csv(saving_path_1, index=False)\n        tr_head.to_csv(saving_path_2, index=False)\n        truth_series = (df.true_position_at_finish == df.generated_pos_finish)\n        accuracy_1 = sum(truth_series)/len(df)\n        if (accuracy_1==1.):\n            perfect += 1\n        accuracy_2.append(accuracy_1)\n    accuracy[parent_folder] = sum(accuracy_2)/len(accuracy_2)\nprint(perfect, 2000)\naccuracy","metadata":{"execution":{"iopub.status.busy":"2022-11-05T10:41:28.757483Z","iopub.status.idle":"2022-11-05T10:41:28.757911Z","shell.execute_reply.started":"2022-11-05T10:41:28.757681Z","shell.execute_reply":"2022-11-05T10:41:28.757698Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc_1 = [0.8310272425986716, 0.6894135715031238, 0.6801518883415434, 0.8164157503946241, 0.6218728526764242, 0.6666666666666666,\n        0.646222779745507, 0.7862938912938907, 0.657170470133433, 0.8361678004535147, 0.656909171075838]\nsum(acc_1)/len(acc_1)","metadata":{"execution":{"iopub.status.busy":"2022-11-05T10:41:28.759480Z","iopub.status.idle":"2022-11-05T10:41:28.759840Z","shell.execute_reply.started":"2022-11-05T10:41:28.759665Z","shell.execute_reply":"2022-11-05T10:41:28.759682Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"raw","source":"path = '../input/big-data-derby-2022/nyra_race_table.csv'\ndf = pd.read_csv(path)\ntrack_ids = df['track_id'].unique()\nfor x in track_ids:\n    course_types = df[df['track_id']== x]['course_type'].unique()\n    df_1 = df[df['track_id']== x]\n    for y in course_types:        \n        df_2 = df_1[df_1['course_type']==y]\n        print('{} {} length is: {}'.format(x, y, len(df_2)))\n#df['course_type'].unique().size","metadata":{"execution":{"iopub.status.busy":"2022-11-04T17:22:10.002564Z","iopub.execute_input":"2022-11-04T17:22:10.003746Z","iopub.status.idle":"2022-11-04T17:22:10.032583Z","shell.execute_reply.started":"2022-11-04T17:22:10.003692Z","shell.execute_reply":"2022-11-04T17:22:10.031829Z"}}},{"cell_type":"raw","source":"parent_folders = ['../input/pvt-tables/aqudcomplete', '../input/pvt-tables/aquocomplete', '../input/pvt-tables/aqutcomplete', '../input/pvt-tables/beldcomplete',\n    '../input/pvt-tables/belicomplete', '../input/pvt-tables/belmcomplete', '../input/pvt-tables/beltcomplete', '../input/pvt-tables/sardcomplete',\n    '../input/pvt-tables/saricomplete', '../input/pvt-tables/sarmcomplete', '../input/pvt-tables/sartcomplete']\n#parent = 0.\nfor parent_folder in parent_folders:\n    length = len(os.listdir(parent_folder))\n    print('{} has: {}'.format(parent_folder, length))","metadata":{"execution":{"iopub.status.busy":"2022-11-04T17:22:14.288457Z","iopub.execute_input":"2022-11-04T17:22:14.289416Z","iopub.status.idle":"2022-11-04T17:22:14.552838Z","shell.execute_reply.started":"2022-11-04T17:22:14.289379Z","shell.execute_reply":"2022-11-04T17:22:14.551559Z"}}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}