{"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 pandas as pd\nimport numpy as np\nimport matplotlib.pylab as plt\nimport matplotlib as mpl\nfrom matplotlib.patches import Circle, Rectangle, Arc\nimport seaborn as sns\nplt.style.use('seaborn-dark-palette')\nmypal = plt.rcParams['axes.prop_cycle'].by_key()['color'] # Grab the color pal\nimport os\nimport gc\n\nMENS_DIR = '../input/google-cloud-ncaa-march-madness-2020-division-1-mens-tournament'\nWOMENS_DIR = '../input/google-cloud-ncaa-march-madness-2020-division-1-womens-tournament'","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def logloss(true_label, predicted, eps=1e-15):\n    p = np.clip(predicted, eps, 1 - eps)\n    if true_label == 1:\n        return -np.log(p)\n    return -np.log(1 - p)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f'Confident Wrong Prediction: \\t\\t {logloss(1, 0.01):0.4f}')\nprint(f'Confident Correct Prediction: \\t\\t {logloss(0, 0.01):0.4f}')\nprint(f'Non-Confident Wrong Prediction: \\t {logloss(1, 0.49):0.4f}')\nprint(f'Non-Confident Correct Prediction: \\t {logloss(0, 0.49):0.4f}')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Mss = pd.read_csv(f'{MENS_DIR}/MSampleSubmissionStage1_2020.csv')\nWss = pd.read_csv(f'{WOMENS_DIR}/WSampleSubmissionStage1_2020.csv')\nMss.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"MTeams = pd.read_csv(f'{MENS_DIR}/MDataFiles_Stage1/MTeams.csv')\nMTeams.sort_values('FirstD1Season', ascending=False).head(5)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"WTeams = pd.read_csv(f'{WOMENS_DIR}/WDataFiles_Stage1/WTeams.csv')\nWTeams.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"MSeasons = pd.read_csv(f'{MENS_DIR}/MDataFiles_Stage1/MSeasons.csv')\nWSeasons = pd.read_csv(f'{WOMENS_DIR}/WDataFiles_Stage1/WSeasons.csv')\nMSeasons.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"MNCAATourneySeeds = pd.read_csv(f'{MENS_DIR}/MDataFiles_Stage1/MNCAATourneySeeds.csv')\nWNCAATourneySeeds = pd.read_csv(f'{WOMENS_DIR}/WDataFiles_Stage1/WNCAATourneySeeds.csv')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"WNCAATourneySeeds.merge(WTeams, validate='many_to_one').head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"MRegularSeasonCompactResults = pd.read_csv(f'{MENS_DIR}/MDataFiles_Stage1/MRegularSeasonCompactResults.csv')\nWRegularSeasonCompactResults = pd.read_csv(f'{WOMENS_DIR}/WDataFiles_Stage1/WRegularSeasonCompactResults.csv')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"MRegularSeasonCompactResults.head(5)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"MRegularSeasonCompactResults = \\\n    MRegularSeasonCompactResults \\\n    .merge(MTeams[['TeamName', 'TeamID']],\n           left_on='WTeamID',\n           right_on='TeamID',\n           validate='many_to_one') \\\n    .drop('TeamID', axis=1) \\\n    .rename(columns={'TeamName': 'WTeamName'}) \\\n    .merge(MTeams[['TeamName', 'TeamID']],\n           left_on='LTeamID',\n           right_on='TeamID') \\\n    .drop('TeamID', axis=1) \\\n    .rename(columns={'TeamName': 'LTeamName'})\n\nWRegularSeasonCompactResults = \\\n    WRegularSeasonCompactResults \\\n    .merge(WTeams[['TeamName', 'TeamID']],\n           left_on='WTeamID',\n           right_on='TeamID',\n           validate='many_to_one') \\\n    .drop('TeamID', axis=1) \\\n    .rename(columns={'TeamName': 'WTeamName'}) \\\n    .merge(WTeams[['TeamName', 'TeamID']],\n           left_on='LTeamID',\n           right_on='TeamID') \\\n    .drop('TeamID', axis=1) \\\n    .rename(columns={'TeamName': 'LTeamName'})\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"WRegularSeasonCompactResults.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"WRegularSeasonCompactResults['Score_Diff'] = WRegularSeasonCompactResults['WScore'] - WRegularSeasonCompactResults['LScore']\nMRegularSeasonCompactResults['Score_Diff'] = MRegularSeasonCompactResults['WScore'] - MRegularSeasonCompactResults['LScore']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.style.use('fivethirtyeight')\nMRegularSeasonCompactResults['Score_Diff'] \\\n    .plot(kind='hist',\n          bins=90,\n          figsize=(15, 5),\n          label='Mens',\n          alpha=0.5)\nWRegularSeasonCompactResults['Score_Diff'] \\\n    .plot(kind='hist',\n          bins=105,\n          figsize=(15, 5),\n          label='Womens',\n          alpha=0.5)\nplt.title('Score Differential')\nplt.xlim(0,60)\nplt.legend()\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.style.use('fivethirtyeight')\nfig, axs = plt.subplots(1, 2, figsize=(15, 5))\nWRegularSeasonCompactResults['counter'] = 1\nWRegularSeasonCompactResults.groupby('WTeamName')['counter'] \\\n    .count() \\\n    .sort_values() \\\n    .tail(20) \\\n    .plot(kind='barh',\n          title='⬆️ Most Regular Season Wins (Womens)',\n          figsize=(15, 8),\n          xlim=(400, 680),\n          color=mypal[0],\n          ax=axs[0])\nWRegularSeasonCompactResults.groupby('WTeamName')['counter'] \\\n    .count() \\\n    .sort_values(ascending=False) \\\n    .tail(20) \\\n    .plot(kind='barh',\n          title='⬇️ Least Regular Season Wins (Womens)',\n          figsize=(15, 8),\n          xlim=(0, 150),\n          color=mypal[1],\n          ax=axs[1])\nplt.tight_layout()\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.style.use('fivethirtyeight')\nfig, axs = plt.subplots(1, 2, figsize=(15, 5))\nMRegularSeasonCompactResults['counter'] = 1\nMRegularSeasonCompactResults.groupby('WTeamName')['counter'] \\\n    .count() \\\n    .sort_values() \\\n    .tail(20) \\\n    .plot(kind='barh',\n          title='⬆️ Most Regular Season Wins (Mens)',\n          figsize=(15, 8),\n          xlim=(600, 920),\n          color=mypal[2],\n         ax=axs[0])\nMRegularSeasonCompactResults.groupby('WTeamName')['counter'] \\\n    .count() \\\n    .sort_values(ascending=False) \\\n    .tail(20) \\\n    .plot(kind='barh',\n          title='⬇️ Least Regular Season Wins (Mens)',\n          figsize=(15, 8),\n          xlim=(0, 150),\n          color=mypal[3],\n          ax=axs[1])\naxs[1].set_ylabel('')\nplt.tight_layout()\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mens_events = []\nfor year in [2015, 2016, 2017, 2018, 2019]:\n    mens_events.append(pd.read_csv(f'{MENS_DIR}/MEvents{year}.csv'))\nMEvents = pd.concat(mens_events)\nprint(MEvents.shape)\nMEvents.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"womens_events = []\nfor year in [2015, 2016, 2017, 2018, 2019]:\n    womens_events.append(pd.read_csv(f'{WOMENS_DIR}/WEvents{year}.csv'))\nWEvents = pd.concat(womens_events)\nprint(WEvents.shape)\nWEvents.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.style.use('fivethirtyeight')\nMEvents['counter'] = 1\nMEvents.groupby('EventType')['counter'] \\\n    .sum() \\\n    .sort_values(ascending=False) \\\n    .plot(kind='bar',\n          figsize=(15, 5),\n         color=mypal[2],\n         title='Event Type Frequency (Mens)')\nplt.xticks(rotation=0)\nplt.show()","metadata":{},"execution_count":null,"outputs":[]}]}