{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import os\nimport pandas as pd\nimport datetime\nimport ciso8601\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport time\nimport sys\nimport math\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true,"_uuid":"e2fb97fd70d8847b9b1f6fe7487a8b1497f29cb5"},"cell_type":"code","source":"seasons = [\"pre\", \"reg-wk1-6\", \"reg-wk7-12\", \"reg-wk13-17\", \"post\"]\nyears = [\"2016\", \"2017\"]\n\nplayerSpeeds = pd.Series()\n\nfor year in years:\n    for season in seasons:\n        currentFile = '../input/NGS-' + year + '-' + season + '.csv'\n        print(\"Loading:\", currentFile)\n        ngsDataRaw = pd.read_csv(currentFile, parse_dates=['Time'])\n        print(\"Processing...\")\n        # drop columns with no GSISID\n        ngsData = ngsDataRaw.sort_values(['GameKey', 'PlayID', 'GSISID', 'Time'])\n        ngsData['timeDiff'] = ngsData['Time'].diff()\n        mask = ((ngsData.GSISID != ngsData.GSISID.shift(1)) | (ngsData.PlayID != ngsData.PlayID.shift(1)) | (ngsData.GameKey != ngsData.GameKey.shift(1)))\n        ngsData['timeDiff'][mask] = np.nan\n        ngsData['speed'] = ngsData['dis']/((ngsData['timeDiff'].dt.microseconds/(10**6)) + (ngsData['timeDiff'].dt.seconds))\n\n        averagePlayerSpeeds = ngsData.groupby(['GSISID'], as_index=False)['speed'].mean()\n        playerSpeeds = playerSpeeds.append(averagePlayerSpeeds)\n   \naveragePlayerSpeeds = averagePlayerSpeeds.groupby(['GSISID'])['speed'].mean()\n\nplayerSpeeds.head()\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d5bde68bff166c4a9c3fd9b12ccf6a381904720b"},"cell_type":"code","source":"playerSpeeds['GSISID'] = playerSpeeds['GSISID'].astype(int)\nppr = pd.read_csv(\"../input/play_player_role_data.csv\")\n#ppr = ppr.join(other=playerSpeeds, on=\"GSISID\")\nppr = pd.merge(ppr, playerSpeeds, on='GSISID', how='left')\n\na = ppr['Role'].unique()\n\npr = ['PDL2', 'PDR3', 'PLR2', 'PLR', 'PDR4', 'VRi', 'VRo',\n       'VLo', 'PDL3', 'PLL', 'PLL2', 'PDR2', 'PDL5', 'PLM',\n       'PR', 'PDL4', 'VL', 'PDL1', 'PDR1',\n       'VLi', 'PLR1', 'PPLi', 'VR', 'PLL1',\n       'PFB', 'PDR5', 'PDM', 'PDL6', 'PLL3', 'PLR3',\n       'PDR6', 'PPLo', 'PLM1']\n\npc = list(set(a) - set(pr))\n\nppr_defense = ppr[ppr['Role'].isin(pr)]\nppr_offense = ppr[ppr[\"Role\"].isin(pc)]\n\nppr_defense.head()\nppr_offense.head()\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e2c21318631c43528b2193e61cda30284596e0de"},"cell_type":"code","source":"ppr_defense_per_play = ppr_defense.groupby(['GSISID'], as_index=False)['speed'].mean()\ninjuryPlays = pd.read_csv(\"../input/video_footage-injury.csv\")\nsafePlays = pd.read_csv(\"../input/video_footage-control.csv\")\nsafePlays.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"16a4ecc3b2bd40a0c5db1b677f2cb2318dd4b274"},"cell_type":"code","source":"ppr_defense[\"uniqueplay\"] = ppr_defense[\"GameKey\"].map(str) + ppr_defense[\"PlayID\"].map(str)\nppr_offense[\"uniqueplay\"] = ppr_offense[\"GameKey\"].map(str) + ppr_offense[\"PlayID\"].map(str)\nsafePlays[\"uniqueplay\"] = safePlays[\"gamekey\"].map(str) + safePlays[\"playid\"].map(str)\ninjuryPlays[\"uniqueplay\"] = injuryPlays[\"gamekey\"].map(str) + injuryPlays[\"playid\"].map(str)\n\nspeedWithDetails_defense_safe = pd.merge(ppr_defense, safePlays, on=\"uniqueplay\", how='right')\nspeedWithDetails_defense_injury = pd.merge(ppr_defense, injuryPlays, on=\"uniqueplay\", how='right')\nspeedWithDetails_offense_safe = pd.merge(ppr_offense, safePlays, on=\"uniqueplay\", how='right')\nspeedWithDetails_offense_injury = pd.merge(ppr_offense, injuryPlays, on=\"uniqueplay\", how='right')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"a96eddc1b3a335a18806ace4b22f2d9e8215aff0"},"cell_type":"markdown","source":"## Make the receiving team slower, and you get a safer play!\n\n### Notice here that, surprisingly, speed of punt protection has almost no effect"},{"metadata":{"trusted":true,"_uuid":"4672e5ea446ffe112e82d1f1d99f93a359a70ab0"},"cell_type":"code","source":"meanSpeeds_safe = speedWithDetails_offense_safe.groupby([\"uniqueplay\"])['speed'].mean()\nmeanSpeeds_injury = speedWithDetails_offense_injury.groupby([\"uniqueplay\"])['speed'].mean()\nprint(\"Average speed of a player on kicking team on a play that results in injury:\", meanSpeeds_injury.mean())\nprint(\"Average speed of a player on kicking team on a play that results in no injury:\", meanSpeeds_safe.mean())\nmeanSpeeds_safe = speedWithDetails_defense_safe.groupby([\"uniqueplay\"])['speed'].mean()\nmeanSpeeds_injury = speedWithDetails_defense_injury.groupby([\"uniqueplay\"])['speed'].mean()\nprint(\"Average speed of a player on receiving team on a play that results in injury:\", meanSpeeds_injury.mean())\nprint(\"Average speed of a player on receiving team on a play that results in no injury:\", meanSpeeds_safe.mean())\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"89f1ad7a21647bba2bf6f399cd9374aef41f27a4"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}