{"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\nimport pandas as pd","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-01-31T17:22:55.648204Z","iopub.execute_input":"2023-01-31T17:22:55.648699Z","iopub.status.idle":"2023-01-31T17:22:55.655419Z","shell.execute_reply.started":"2023-01-31T17:22:55.648657Z","shell.execute_reply":"2023-01-31T17:22:55.653803Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def join_contact_tracking(contact, tracking):\n    tracking_columns = [\"nfl_player_id\", \"x_position\", \"y_position\", \"game_play\", \"step\"]\n    df_tracking_1 = tracking[tracking_columns]\n    df_tracking_1 = df_tracking_1.rename(columns={\"nfl_player_id\": \"nfl_player_id_1\", \"x_position\": \"x_position_1\", \"y_position\": \"y_position_1\"})\n    df_tracking_2 = tracking[tracking_columns]\n    df_tracking_2 = df_tracking_2.rename(columns={\"nfl_player_id\": \"nfl_player_id_2\", \"x_position\": \"x_position_2\", \"y_position\": \"y_position_2\"})\n    df = pd.merge(df_tracking_1, contact, how=\"right\", on=['nfl_player_id_1', 'game_play', 'step'])\n    df = pd.merge(df_tracking_2, df, how=\"right\", on=['nfl_player_id_2', 'game_play', 'step'])\n    df.fillna(-1, inplace=True)\n    df[\"distance\"] = ((df.x_position_2 - df.x_position_1) ** 2 + (df.y_position_2 - df.y_position_1) ** 2) ** 0.5\n    return df\n\ndef join_contact_helmets(contact, helmets):\n    helmets_columns = ['game_play', 'view', 'frame', 'nfl_player_id', 'left', 'width', 'top', 'height']\n    helmets = helmets.astype({'left': 'int32', 'width': 'int32', 'top': 'int32', 'height': 'int32'})\n    \n    df_helmets_1 = helmets[helmets_columns]\n    df_helmets_1 = df_helmets_1.rename(columns={\"nfl_player_id\": \"nfl_player_id_1\", \"left\": \"left_1\", \"width\": \"width_1\", \"top\": \"top_1\", \"height\": \"height_1\"})\n    df_helmets_2 = helmets[helmets_columns]\n    df_helmets_2 = df_helmets_2.rename(columns={\"nfl_player_id\": \"nfl_player_id_2\", \"left\": \"left_2\", \"width\": \"width_2\", \"top\": \"top_2\", \"height\": \"height_2\"})\n    df = pd.merge(df_helmets_1, contact, how=\"right\", on=['nfl_player_id_1', 'game_play', 'frame'])\n    df = pd.merge(df_helmets_2, df, how=\"right\", on=['nfl_player_id_2', 'game_play', 'frame', 'view'])\n    df.fillna(-1, inplace=True)\n    df[\"distance\"] = ((df.x_position_2 - df.x_position_1) ** 2 + (df.y_position_2 - df.y_position_1) ** 2) ** 0.5\n    return df\n\ndef join_dataframes(helmets, contact, tracking):\n    fps = 59.94\n    frame_delta = 6\n\n    contact = contact[[\"contact_id\", \"contact\"]]    \n    contact[\"game_play\"] = contact.contact_id.apply(lambda x: \"_\".join(x.split(\"_\")[0:2]))\n    contact[\"step\"] = contact.contact_id.apply(lambda x: x.split(\"_\")[2]).astype(int)\n    contact[\"nfl_player_id_1\"] = contact.contact_id.apply(lambda x: x.split(\"_\")[3]).astype(int)\n    contact[\"nfl_player_id_2\"] = contact.contact_id.apply(lambda x: x.split(\"_\")[4])\n    contact[\"nfl_player_id_2\"] = contact[\"nfl_player_id_2\"].apply(lambda x: -1 if x == \"G\" else x).astype(int)\n    contact[\"frame\"] = contact[\"step\"].apply(lambda x: 300 + int(x * 0.1 * fps / frame_delta) * frame_delta)\n\n    df = join_contact_tracking(contact, tracking)\n    df = join_contact_helmets(df, helmets)\n    \n    return df\n\nlabels = pd.read_csv(\"/kaggle/input/nfl-player-contact-detection/sample_submission.csv\")\nhelmets = pd.read_csv(\"/kaggle/input/nfl-player-contact-detection/test_baseline_helmets.csv\")\ntracking = pd.read_csv(\"/kaggle/input/nfl-player-contact-detection/test_player_tracking.csv\")\ndf = join_dataframes(helmets, labels, tracking)\nprint(df, df.columns)","metadata":{"execution":{"iopub.status.busy":"2023-01-31T17:25:58.483191Z","iopub.execute_input":"2023-01-31T17:25:58.484076Z","iopub.status.idle":"2023-01-31T17:25:59.128161Z","shell.execute_reply.started":"2023-01-31T17:25:58.484025Z","shell.execute_reply":"2023-01-31T17:25:59.126675Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}