{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"markdown","source":"Hypothesis: Some turf is safer than other turf.\n\nDisclaimer: All analysis here is by correlation and does not imply causality. \nFurthermore the dataset is too small for statistically significant results at the typical alpha levels used in scientific literature. I have no direct relationship with UBU Speed Series or DD GrassMaster.\n\nSuggested rule change: Change the rules such that turf is standardized on all stadiums to a single type of artificial turf.\nWe suggest using either UBU Speed Series or DD GrassMaster or some hybrid of these.\nWe believe standardizing artificial turf will reduce variability relative to natural grass given rain or snow. \nFurther testing of this hypothesis should be done with future and past datasets not present in this analysis. "},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom matplotlib import pyplot\nfrom IPython.display import Image\n\nprint('finished loading libraries')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5b3eb4adaeef1f365d750bbe52c17dac3e34217a"},"cell_type":"code","source":"# GLOBAL variables\nPATH_PREFIX = \"../input/NFL-Punt-Analytics-Competition/\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b38364f1b19fae971ee8a7ce0fd1c765ce3eec51"},"cell_type":"code","source":"# Load all relevant data\nground_truth_df = pd.read_csv(PATH_PREFIX+\"video_review.csv\", \n                              usecols=[\"PlayID\",\"GameKey\",\"Primary_Impact_Type\"])\n\nplay_df = pd.read_csv(PATH_PREFIX+\"play_information.csv\",\n                     usecols=[\"PlayID\",\"GameKey\",\"PlayDescription\"])\n\n\ngame_df = pd.read_csv(PATH_PREFIX+\"game_data.csv\",\n                     usecols = [\"GameKey\",\"Turf\",\"GameWeather\",\"Stadium\"])\nprint(\"loaded all relevant CSVs\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"90c643e6a62fcaf2074a828ee2808c3b60b50306"},"cell_type":"code","source":"# Create concussion feature\ntrain_df = pd.merge(play_df, ground_truth_df, how=\"left\", on=[\"PlayID\",\"GameKey\"])\ntrain_df[\"is_concussion\"] = 1\ntrain_df.loc[train_df[\"Primary_Impact_Type\"].isnull(),\"is_concussion\"] = 0\nprint(train_df[\"is_concussion\"].value_counts())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"57d646e79cbf78a481d39d42013549fa67dcd1e9"},"cell_type":"code","source":"# Create turf feature\ntrain_df = pd.merge(train_df, game_df, how=\"left\", on=[\"GameKey\"])\n\n# Notice there are spelling errors in the Turf names\nprint(train_df[\"Turf\"].unique())\n\n# The null values all correspond to Hard Rock Stadium which is grass based.\ntrain_df[train_df[\"Turf\"].isnull()]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ad54d17427c54164ad7a67fbf3794fa243ea09ba"},"cell_type":"code","source":"# Create the grass feature\n# GrassMaster is part artificial https://en.wikipedia.org/wiki/GrassMaster\ntrain_df[\"is_Natural_Grass_flag\"] = 0\ntrain_df.loc[train_df[\"Turf\"]=='Grass', \"is_Natural_Grass_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='Natural Grass', \"is_Natural_Grass_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='Natural grass', \"is_Natural_Grass_flag\"] = 1\n\ntrain_df.loc[train_df[\"Turf\"]=='grass', \"is_Natural_Grass_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='Natural Grass ', \"is_Natural_Grass_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='Natural', \"is_Natural_Grass_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='Natrual Grass', \"is_Natural_Grass_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='Naturall Grass', \"is_Natural_Grass_flag\"] = 1\n\n#https://www.lawnstarter.com/blog/sports-turf/nfl-stadiums-turf-or-grass/\n# Hard Rock Stadium is grass\ntrain_df.loc[train_df[\"Stadium\"]=='Hard Rock Stadium', \"is_Natural_Grass_flag\"] = 1\n\n\nturf_list = ['Grass' 'Natural Grass' 'DD GrassMaster' 'Natural grass' 'A-Turf Titan'\n 'FieldTurf' 'UBU Speed Series-S5-M' 'UBU Sports Speed S5-M' 'Field Turf'\n 'Artificial' 'Synthetic' 'grass' 'Natural Grass ' 'Natural',\n 'Natrual Grass' 'FieldTurf 360' 'UBU Speed Series S5-M' 'Artifical'\n 'FieldTurf360' 'Naturall Grass' 'Field turf']","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"da1b8f0d8a129c9b9dcac5f78fdc316951b22b1e"},"cell_type":"markdown","source":"\"The genetically-enhanced Platinum TE Paspalum turf installed this week was the result of nearly two years of research into determining the most workable grass for a safe and durable field for football that will hold up to the impediments imposed by the new shade canopy covering the stands.\"\nSource: https://www.sun-sentinel.com/sports/miami-dolphins/fl-dolphins-stadium-turf-0805-20160804-story.html"},{"metadata":{"trusted":true,"_uuid":"891c1cc3f53250856ff829335559402fd4ac4395"},"cell_type":"code","source":"# Hard Rock Stadium appears to be grass\nImage(\"../input/hard-rock-turf/i_will.jpg\")\n\n# Sources:\n# https://www.sbnation.com/2017/11/5/16610770/dolphins-raiders-field-conditions-virginia-tech-miami-hard-rock-stadium","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"27f2b1653790ac60ce957f1e138c4993aea9c3ac"},"cell_type":"code","source":"print(train_df.groupby([\"is_Natural_Grass_flag\"])[\"is_concussion\"].describe())\n\n# There is a lower rate of concussion for artificial grass \n# Natural grass has a concussion probability of 0.006064 which is higher than 0.004848 for artificial","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d04376132b0043ecbc89f223d2cdd3293ad78348"},"cell_type":"code","source":"# Does this hold up to specific types of artificial turf?\n\ntrain_df[\"is_FieldTurf_flag\"] = 0\ntrain_df.loc[train_df[\"Turf\"]=='FieldTurf', \"is_FieldTurf_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='Field Turf', \"is_FieldTurf_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='FieldTurf 360', \"is_FieldTurf_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='FieldTurf360', \"is_FieldTurf_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='Field turf', \"is_FieldTurf_flag\"] = 1\nprint(train_df.groupby([\"is_FieldTurf_flag\"])[\"is_concussion\"].describe())\n\n\n# FieldTurf is about the same as non-FieldTurf","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b9599c68542f830c28cd76530b311e09cccef52c"},"cell_type":"code","source":"train_df[\"is_Titan_flag\"] = 0\ntrain_df.loc[train_df[\"Turf\"]=='A-Turf Titan', \"is_Titan_flag\"] = 1\nprint(train_df.groupby([\"is_Titan_flag\"])[\"is_concussion\"].describe())\n# Titan is about the same as non-Titan","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a236bff642099f9a7a4b19460cf41fc67888804b"},"cell_type":"code","source":"train_df[\"is_DD_flag\"] = 0\ntrain_df.loc[train_df[\"Turf\"]=='DD GrassMaster', \"is_DD_flag\"] = 1\nprint(train_df.groupby([\"is_DD_flag\"])[\"is_concussion\"].describe())\n# DD GrassMaster has no concussions but only 201 observations out of 6681","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c4e05c006a145f2ff0549b16eb8b782a942d3fda"},"cell_type":"code","source":"# We suggest using either UBU or DD GrassMaster\ntrain_df[\"is_UBU_or_DD_flag\"] = 0\ntrain_df.loc[train_df[\"Turf\"]=='UBU Speed Series-S5-M', \"is_UBU_or_DD_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='UBU Sports Speed S5-M', \"is_UBU_or_DD_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='UBU Speed Series S5-M', \"is_UBU_or_DD_flag\"] = 1\ntrain_df.loc[train_df[\"Turf\"]=='DD GrassMaster', \"is_UBU_or_DD_flag\"] = 1\nprint(train_df.groupby([\"is_UBU_or_DD_flag\"])[\"is_concussion\"].describe())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b5d62510f43c766167639269641036ff6d4aa005"},"cell_type":"code","source":"# UBU Speed Series Turf Picture\nImage(\"../input/ubu-turf/ubu-artificial-turf-speed-series-kiefer-usa.png\")\n\n# Sources:\n# https://www.reddit.com/r/CFB/comments/63v5ne/lets_look_at_some_turf/","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"657af58a635ae2d78949f9b2809e3dc256bccc13"},"cell_type":"code","source":"# Preprocess data for bootstrap\n\nUBU_DD_df = train_df[train_df[\"is_UBU_or_DD_flag\"]==1]\nnot_UBU_DD_df = train_df[train_df[\"is_UBU_or_DD_flag\"]==0]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"805281234b06bdbb4599e28c30aaeafdbe6a99bc"},"cell_type":"code","source":"# Create bootstrap empirical intervals for is_UBU_or_DD_flag feature\nnp.random.seed(seed=0)\nN_ITERATIONS = 30000\n\nUBU_DD_mean_list = []\nnot_UBU_DD_mean_list = []\nfor j in range(N_ITERATIONS):\n    UBU_DD_mean_list.append(UBU_DD_df[\"is_concussion\"].sample(frac=1, replace=True).mean())\n    not_UBU_DD_mean_list.append(not_UBU_DD_df[\"is_concussion\"].sample(frac=1, replace=True).mean())\n    \nprint('done')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fad625e77611138d159d0e4d63ed6e503a0134c8"},"cell_type":"code","source":"bootstrap_df = pd.DataFrame({'UBU_DD_concussion_prob':UBU_DD_mean_list, \n                             'not_UBU_DD_concussion_prob':not_UBU_DD_mean_list})\nprint(bootstrap_df.describe())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e23384e4b6887abc02759cdf92234d488b14db74"},"cell_type":"code","source":"# Bootstrap distribution comparison\n\npyplot.hist(bootstrap_df['UBU_DD_concussion_prob'], alpha=0.4, label='UBU_DD_concussion_prob')\npyplot.hist(bootstrap_df['not_UBU_DD_concussion_prob'], alpha=0.4, label='not_UBU_DD_concussion_prob')\npyplot.legend(loc='upper right')\npyplot.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a09e881dac0d9e9a49372baf8fce5ba97539f797"},"cell_type":"code","source":"LOWER_VAL = 0.15\nUPPER_VAL = 0.85\nconfidence_level = 1-LOWER_VAL - (1-UPPER_VAL)\nprint(confidence_level)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b36d5147fc68c718ddd6a42ff14dd3bf9760ac9a"},"cell_type":"code","source":"\n\nlowerbound_UBU_DD = bootstrap_df['UBU_DD_concussion_prob'].quantile(LOWER_VAL)\nupperbound_UBU_DD = bootstrap_df['UBU_DD_concussion_prob'].quantile(UPPER_VAL)\nprint(lowerbound_UBU_DD)\nprint(upperbound_UBU_DD)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c928f4a6e8af2137107b1305d9a11700584dd7c2"},"cell_type":"code","source":"lowerbound_not_UBU_DD = bootstrap_df['not_UBU_DD_concussion_prob'].quantile(LOWER_VAL)\nupperbound_not_UBU_DD = bootstrap_df['not_UBU_DD_concussion_prob'].quantile(UPPER_VAL)\nprint(lowerbound_not_UBU_DD)\nprint(upperbound_not_UBU_DD)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e38abf2e4fe15ee00dd3169149f3d7f5ad2566ce"},"cell_type":"markdown","source":"**I am 70% confident that using UBU or DD artificial turf is correlated with lower concussion rates**"}],"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}