{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Introduction"},{"metadata":{},"cell_type":"markdown","source":"March Madeness is a folk name of basketball tournament, the elimination series of NCAA always begins on March so it's called March Madness. In this report, datasets include both regular session and March Madness from the aspects of games, players and events on court. As a famous basketball tuornament, March Madness contains lots of data with completeness in 30 years. A comprehensive data mining based on these data can help management of the tournament, teams and conferences, which is imperative."},{"metadata":{},"cell_type":"markdown","source":"![%E4%B8%8B%E8%BD%BD.jpg](attachment:%E4%B8%8B%E8%BD%BD.jpg)","attachments":{"%E4%B8%8B%E8%BD%BD.jpg":{"image/jpeg":"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"}}},{"metadata":{},"cell_type":"markdown","source":"Every year more than 300 teams through a complex process of regualr session compete for 64 spots during the March Madenss games, these 64 spots called bracket. The 64 teams selected from all called seeds. NCAA has been divided into 4 regions: east, west, north and south. Each regoin has some team conferences. Teams are selected by in-conference games and regional elimination-games.Then the outstanding teams from 4 regions get the spot and are ranked by their performance and according seeds. Finally through elimination series 64 teams decide the title(champion)."},{"metadata":{},"cell_type":"markdown","source":"Thrilling knockout rules make results of tournament less predictable and helps gain unreplacble popularity. Despite the great uncertainty of games, intriguing findings are hidden behind the dataset provided, which is tasked for us. In this notebook, we first conduct visual explorations, and then dig into issues that interest us."},{"metadata":{},"cell_type":"markdown","source":"Before analysis works, we imported some needed packages, including numpy, pandas and some packages that are used for data cleaning and visualization."},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        os.path.join(dirname, filename)\nimport matplotlib.pyplot as plt\n%matplotlib inline\nfrom scipy import stats\nimport networkx as nx\nimport random\nimport seaborn as sns","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Topic 1: Time changes NCAA"},{"metadata":{},"cell_type":"markdown","source":"In this part we are going to show some changes of basic index as time went by. Time changes NCAA and playing style of it."},{"metadata":{},"cell_type":"markdown","source":"Calculated annual average *game sum-points* each year, the first figure shows the change of sum points. \n\nCombined with history of basketball, we assumed that the first rise results from preference of big-size competetion around the basket, the second rise recently results from a small-ball revolution.\nAt most years the line goes down, which suggests the higher level of defense in the next years after a new strategy appeared."},{"metadata":{"trusted":true},"cell_type":"code","source":"nc=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MDataFiles_Stage1/MNCAATourneyCompactResults.csv\",encoding='utf-8')\nnc[\"sum_score\"]=nc.WScore+nc.LScore\nnc[\"score_distance\"]=nc.WScore-nc.LScore\nn_points=pd.DataFrame()\ngroup_by=nc.groupby(by=[\"Season\"])\nn_points[\"avr_sumscore\"]=group_by[\"sum_score\"].mean()\nn_points[\"avr_scoredistance\"]=group_by[\"score_distance\"].mean()\nn_points[\"Season\"]=range(1985,2020)\nrc=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MDataFiles_Stage1/MRegularSeasonCompactResults.csv\",encoding='utf-8')\nrc[\"sum_score\"]=rc.WScore+rc.LScore\nrc[\"score_distance\"]=rc.WScore-rc.LScore\nr_points=pd.DataFrame()\ngroup_by=rc.groupby(by=[\"Season\"])\nr_points[\"avr_sumscore\"]=group_by[\"sum_score\"].mean()\nr_points[\"avr_scoredistance\"]=group_by[\"score_distance\"].mean()\nr_points[\"Season\"]=range(1985,2020)\n\nplt.figure(figsize=(16,8))\nplt.xlim(1984,2020)\nplt.xticks(np.arange(1985, 2020, 1))\nplt.title(\"Annual average sum points of games\")\nplt.xlabel(\"Season\")\nplt.ylabel(\"Points\")\nplt.plot(n_points[\"Season\"],n_points[\"avr_sumscore\"],label=\"Mad March\",color='blue')\nplt.scatter(n_points[\"Season\"],n_points[\"avr_sumscore\"],color='blue')\nplt.plot(r_points[\"Season\"],r_points[\"avr_sumscore\"],label=\"Regular\",color='red')\nplt.scatter(r_points[\"Season\"],r_points[\"avr_sumscore\"],color='red')\nplt.legend([\"March Madness\",\"Regular\"])\nplt.grid(c='gray')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Calculated the annual average *score differential of game* each year, this figure shows change of *score differential of game*. \n\nScore differential equals to the points win-team made minus the points lost-team made each game, which can provide a description of team strength distribution. \n\nSurprisingly, the regular session shows a stability while the competetion during the march madenss is more fluctuated. It suggests that in some years the good and bad are intermingled in the 64 selected. And the selection rules of those years are not so valid, since 64 selected teams experienced a large range of team strength than the entirety of hundreds."},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(16,8))\nplt.xlim(1984,2020)\nplt.xticks(np.arange(1985, 2020, 1))\nplt.title(\"Annual average score differential\")\nplt.xlabel(\"Season\")\nplt.ylabel(\"Score Differential\")\nplt.plot(n_points[\"Season\"],n_points[\"avr_scoredistance\"],label=\"Mad March\",color='blue')\nplt.scatter(n_points[\"Season\"],n_points[\"avr_scoredistance\"],color='blue')\nplt.plot(r_points[\"Season\"],r_points[\"avr_scoredistance\"],label=\"Regular\",color='red')\nplt.scatter(r_points[\"Season\"],r_points[\"avr_scoredistance\"],color='red')\nplt.legend([\"March Madness\",\"Regular\"])\nplt.grid(c='black')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"To clarify the reason in some years the score distance of March Madness is higher, we use boxplotS to research if there is a significant difference of score differential between March Madness and Regular games in those years. \n\n(The green triangle represents the median and the red line represents the average)\n\nThe boxplot show that there are few games with significantly high score differential each year. So we assert in some years, range of team strength of 64 teams in March Madness has more variation than of all 300 or more teams joining in the regular seasons. "},{"metadata":{"trusted":true},"cell_type":"code","source":"teaminfo=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MDataFiles_Stage1/MTeams.csv\",encoding='utf-8')\ndef outlierteams(yearlist):\n    fig = plt.figure(figsize=(36,6))\n    i=1\n    for item in yearlist:\n        nc_year=nc[nc.Season==item]\n        nc_year=nc_year[[\"WTeamID\",\"LTeamID\",\"score_distance\"]]\n        rc_year=rc[rc.Season==item]\n        rc_year=rc_year[[\"WTeamID\",\"LTeamID\",\"score_distance\"]]\n        ax1 = fig.add_subplot(1,9,i)\n        ax1.grid(axis='both',c='white')\n        ax1.set_ylabel(\"Score Distance\")\n        ax1.set_title(\"Score distance in \"+str(item))\n        ax1.boxplot([[x for x in list(nc_year.score_distance)],[x for x in list(rc_year.score_distance)]],showfliers=False,showmeans=True,widths = 0.6)\n        ax1.set_xlabel(\"March Madness     Regular\")\n        ax1.set_xticks([])\n        i=i+1\n    plt.show()\noutlierteams([1993,1996,1999,2001,2008,2009,2013,2016,2019])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"The five basic indexes of a basketball game are: Points, Rebounds, Assists, Steals and Blocks. \n\nAfter data uniformization, calculated the 5 annual indexes from 2003 to 2019 are shown below. \n\nIn all, this figure shows the collapse of the traditional body collision and the trend of new small-ball revolution. \nMost indexes undergo a decline 10 years ago, but also experience a rise in recent years. \n"},{"metadata":{"trusted":true},"cell_type":"code","source":"ncaadetail=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MDataFiles_Stage1/MNCAATourneyDetailedResults.csv\",encoding='utf-8')\nncaadetail[\"sumpoints\"]=ncaadetail.WScore+ncaadetail.LScore\nncaadetail[\"sumrebounds\"]=ncaadetail.WOR+ncaadetail.WDR+ncaadetail.LOR+ncaadetail.LDR\nncaadetail[\"sumblocks\"]=ncaadetail.WBlk+ncaadetail.LBlk\nncaadetail[\"sumsteals\"]=ncaadetail.WStl+ncaadetail.LStl\nncaadetail[\"sumast\"]=ncaadetail.WAst+ncaadetail.LAst\n\navr_ncaa=pd.DataFrame()\ngroup_by=ncaadetail.groupby(by=[\"Season\"])\navr_ncaa[\"avr_point\"]=group_by[\"sumpoints\"].mean()\navr_ncaa[\"avr_rebound\"]=group_by[\"sumrebounds\"].mean()\navr_ncaa[\"avr_block\"]=group_by[\"sumblocks\"].mean()\navr_ncaa[\"avr_steal\"]=group_by[\"sumsteals\"].mean()\navr_ncaa[\"avr_ast\"]=group_by[\"sumast\"].mean()\navr_ncaa[\"Season\"]=range(2003,2020)\nmax_min_scaler = lambda x : (x-np.min(x))/(np.max(x)-np.min(x))\navr_ncaa[\"avr_point\"]=avr_ncaa[['avr_point']].apply(max_min_scaler)\navr_ncaa[\"avr_rebound\"]=avr_ncaa[['avr_rebound']].apply(max_min_scaler)\navr_ncaa[\"avr_block\"]=avr_ncaa[['avr_block']].apply(max_min_scaler)\navr_ncaa[\"avr_steal\"]=avr_ncaa[['avr_steal']].apply(max_min_scaler)\navr_ncaa[\"avr_ast\"]=avr_ncaa[['avr_ast']].apply(max_min_scaler)\n\n\nfeature = np.array([u'points', u'rebounds', u'blocks',u'steals',u'assist']) \nnAttr=5\ni=1\nfig=plt.figure(figsize=(24,20),facecolor=\"white\")\nplt.axis('off')\nplt.grid()\nfor item in avr_ncaa.iterrows():\n    values=np.array(list(item[1])[:-1])\n    angles=np.linspace(0,2*np.pi,nAttr,endpoint=False)\n    values=np.concatenate((values,[values[0]]))\n    angles=np.concatenate((angles,[angles[0]]))  \n    ax1 = fig.add_subplot(4,5,i,polar=True)\n    ax1.set_title('Year '+str(int(item[1][-1])),loc=\"left\")\n    ax1.plot(angles,values,'bo-',color='g',linewidth=2)\n    ax1.fill(angles,values,facecolor='g',alpha=0.2)\n    ax1.set_thetagrids(angles * 180/np.pi, feature)\n    ax1.grid(True)\n    ax1.set_theta_zero_location(loc='E') \n    i=i+1","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Calculated the average total goals made and assists per game as shown below.\n\nSum of goals rises up in 2017 and goes down recently while num of Assists doesn't fluctuate so much. \nBasically, assists do not possess a high postion in goals. Only about 1/3 of goals accompanies according to assists in NCAA basketball games. From 2013-2019 the ratio of assists does not vary too much, suggests the stability of status of assists in NCAA basketball games. "},{"metadata":{"trusted":true},"cell_type":"code","source":"ncaadetail[\"sumgoals\"]=ncaadetail.WFGM+ncaadetail.LFGM+ncaadetail.WFGM3+ncaadetail.LFGM3+ncaadetail.WFTM+ncaadetail.LFTM\nncaadetail[\"sumattempts\"]=ncaadetail.WFGA+ncaadetail.LFGA+ncaadetail.WFGA3+ncaadetail.LFGA3+ncaadetail.WFTA+ncaadetail.LFTA\nncaadetail[\"3pointers\"]=ncaadetail.WFGM3+ncaadetail.LFGM3\nncaadetail[\"3pointersattempts\"]=ncaadetail.WFGA3+ncaadetail.LFGA3\nncaadetail[\"sumast\"]=ncaadetail.WAst+ncaadetail.LAst\ngroup_by=ncaadetail.groupby(by=[\"Season\"])\navr_ncaa[\"avr_ast\"]=group_by[\"sumast\"].mean()\navr_ncaa[\"avr_goal\"]=group_by[\"sumgoals\"].mean()\navr_ncaa[\"avr_attempts\"]=group_by[\"sumattempts\"].mean()\navr_ncaa[\"avr_3pointers\"]=group_by[\"3pointers\"].mean()\navr_ncaa[\"avr_3pointersattempts\"]=group_by[\"3pointersattempts\"].mean()\navr_ncaa[\"avr_3pointersratio\"]=avr_ncaa[\"avr_3pointers\"]/avr_ncaa[\"avr_3pointersattempts\"]\navr_ncaa[\"Season\"]=range(2003,2020)\navr_ncaa[\"avr_astratio\"]=avr_ncaa[\"avr_ast\"]/avr_ncaa[\"avr_goal\"]\navr_ncaa[\"avr_3pointsratio\"]=avr_ncaa[\"avr_3pointersattempts\"]/avr_ncaa[\"avr_attempts\"]\n\nplt.figure(figsize=(10,8))\nplt.xlim(2002,2020)\nmy_x_ticks = np.arange(2002, 2020, 1)\nplt.xticks(my_x_ticks)\nplt.ylim(0,120)\nplt.title(\"Annual average sum of ast and goals of NCAA\")\nplt.xlabel(\"Season\")\nplt.ylabel(\"Number of goals/asts\")\nplt.bar(x=list(avr_ncaa[\"Season\"]),height=list(avr_ncaa[\"avr_goal\"]),label=\"goals\",width=0.4)\nplt.bar(x=list(avr_ncaa[\"Season\"]),height=list(avr_ncaa[\"avr_ast\"]),label=\"ast\",width=0.4)\nplt.legend([\"goals\",\"ast\"],loc = 'upper left')\nplt.grid()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" Calculated annual average num of 3-pointers goals and attempts, counted the ration of 3-pointers as the proportion of 3-pointers in all attempts of goals. \n\nThe 3-pointers made-attempts ratio becomes higher in these years, which suggests the higher status of 3-pointers in game strategies.\nThe hit rate of 3-pointers fluctuates around 1/3, but only 20%-25% of attempts in NCAA games aims at 3-pointers. "},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(1,figsize=(20,16))\nplt.subplot(121)\nplt.xticks(np.arange(0, 60, 5))\nplt.yticks(np.arange(2002, 2020, 1))\nplt.ylim(2002,2020)\nplt.title(\"Annual average 3-pointer made and attempts of NCAA\")\nplt.ylabel(\"Season\")\nplt.xlabel(\"Number of 3-pointer made/attempts\")\nplt.barh(list(avr_ncaa[\"Season\"]),list(avr_ncaa[\"avr_3pointersattempts\"]),label=\"3-pointer attempts\")\nplt.barh(list(avr_ncaa[\"Season\"]),list(avr_ncaa[\"avr_3pointers\"]),label=\"3-pointer made\")\nplt.legend([\"attempts\",\"3 points\"],loc = 'upper left')\nplt.subplot(122)\nplt.xlim(2002,2020)\nplt.yticks(np.arange(0, 0.3,0.05))\nplt.xticks(np.arange(2002, 2020,1))\nplt.ylim(0,0.3)\nplt.title(\"Ratio of 3-poniters attempts\")\nplt.xlabel(\"Season\")\nplt.ylabel(\"Ratio of 3-pointers attempts\")\nplt.bar(list(avr_ncaa[\"Season\"]),list(avr_ncaa[\"avr_3pointsratio\"]),label=\"attempts\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Topic 2: Basics about tournament"},{"metadata":{},"cell_type":"markdown","source":"In this part we provide some basic inforamtion about NCAA teams like team age, game distribution and strong teams list."},{"metadata":{},"cell_type":"markdown","source":"Based on game data from 2010 till now, each state has averagely held 19 games during Madeness March. The state of Ohio held 70 games as the most popular game-host, while Minnesota and New Jersey almost held no games."},{"metadata":{"trusted":true},"cell_type":"code","source":"gamecity=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MDataFiles_Stage1/MGameCities.csv\",encoding='utf-8')\ncity_state=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MDataFiles_Stage1/Cities.csv\",encoding='utf-8')\ngamecity=pd.merge(gamecity,city_state,\"left\",on=\"CityID\")\ngamecityncaa=gamecity[gamecity.CRType==\"NCAA\"].copy()\ngamecityncaa[\"id\"]=range(1,668)\ngames_state=pd.DataFrame()\ngames_state=gamecityncaa.groupby(by=[\"State\"])[\"id\"].count().reset_index(name=\"count\")\n\nplt.figure(figsize=(15,12))\nplt.bar(games_state[\"State\"],games_state[\"count\"],color='red')\nplt.title(\"Races State Distribution\")\nplt.axhline(y=games_state[\"count\"].mean(),color=\"blue\")\nplt.axhline(y=games_state[\"count\"].max(),color=\"yellow\")\nplt.ylabel(\"Num of Games Hold\",fontsize=15)\nplt.xlabel(\"State\",fontsize=15)\nplt.annotate('average: 19', xy=(10,19.5), xytext=(8,25),\n            arrowprops=dict(facecolor='black', shrink=0.05))\nplt.annotate('max: 70', xy=(7,70), xytext=(4,65),\n            arrowprops=dict(facecolor='black', shrink=0.05))\nplt.grid(c='gray')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Calculated top4 teams each year and count the time each team stepping into senifinal. We found 13 teams which had stepped into senifinal of March Madness at least 4 times. AMong themDuck and North Carolina are the best, which deserve special attention as a rival."},{"metadata":{"trusted":true},"cell_type":"code","source":"ncaacompacttop4=nc[nc.DayNum==152].copy()\ntop4=pd.DataFrame()\nyear=[]\nteams=[]\nfor row in ncaacompacttop4.iterrows():\n    year.append(row[1][0])\n    year.append(row[1][0])\n    teams.append(row[1][2])\n    teams.append(row[1][4])\n\ntop4[\"Season\"]=year\ntop4[\"TeamID\"]=teams\n\nteaminfo=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MDataFiles_Stage1/MTeams.csv\",encoding='utf-8')\ntop4=pd.merge(top4,teaminfo,\"left\", on=\"TeamID\")\ntop4teams=top4.groupby([\"TeamName\"])[\"TeamID\"].count().reset_index(name=\"count\")\ntop4teams=top4teams[top4teams[\"count\"]>=4]\n\nplt.figure(figsize=(10,8))\nplt.xlim(0,15)\nplt.title(\"Strong Teams\")\nplt.ylabel(\"Teams\")\nplt.xlabel(\"Final Four times\")\nplt.barh(list(top4teams[\"TeamName\"]),list(top4teams[\"count\"]))\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" Most team(75%) join in the tournament at the first year of NCAA, only one fourth joined after the second season."},{"metadata":{"trusted":true},"cell_type":"code","source":"teaminfo[\"age\"]=teaminfo.LastD1Season-teaminfo.FirstD1Season\nteamage=teaminfo.groupby([\"age\"])[\"TeamID\"].count().reset_index(name=\"count\")\n\nteamage['panduan'] = teamage['age'].apply(lambda x: 1 if x==35 else 0)\nteamage=teamage.groupby([\"panduan\"])[\"count\"].sum().reset_index(name=\"count\")\nteamage.panduan=[\"Less than 35 years\",\"35 years\"]\n\nplt.figure(figsize=(10,8))\nplt.pie(teamage['count'],labels=teamage.panduan,autopct='%1.1f%%',startangle=150,explode=[0.1,0],shadow=True)\nplt.legend(loc=\"upper right\",fontsize=10,borderaxespad=0.3)\nplt.title(\"Team age\")\nplt.axis('equal')\nplt.show()  ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"The heatmap shows the area preference of actions on court. \n\nThe foul mostly occurs at area 1, 2 and 13, suggesting that the main reason of fouls are usually competetion under the basket and passing ball at half court. \n\nTurnover always happens at 2, 4, 6, 10, 13 areas, suggesting turnover always accompanies with filed goal attempts or passing ball at half court."},{"metadata":{"trusted":true},"cell_type":"code","source":"events2015=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MEvents2015.csv\",encoding='utf-8')\nevents2016=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MEvents2016.csv\",encoding='utf-8')\nevents2017=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MEvents2017.csv\",encoding='utf-8')\nevents2018=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MEvents2018.csv\",encoding='utf-8')\nevents2019=pd.read_csv(f\"../input/march-madness-analytics-2020/2020DataFiles/2020DataFiles/2020-Mens-Data/MEvents2019.csv\",encoding='utf-8')\nevents=pd.concat([events2015,events2016,events2017,events2018,events2019])\nevents_hasarea=events[events.Area!=0]\ncolumns=[\"foul\",\"made2\",\"made3\",\"miss2\",\"miss3\",\"turnover\"]\nevents_issues=pd.DataFrame(index=range(1,14),columns=[])\nfor item in columns:\n    events_issue=events_hasarea[events_hasarea.EventType==item]\n    events_issue=pd.DataFrame(events_issue.groupby(by=[\"Area\"]).size(),columns=[item])\n    events_issues=pd.concat([events_issues,events_issue],sort=True,axis=1)\n    \nevents_issues=events_issues.apply(lambda x: round((x - np.min(x)) / (np.max(x) - np.min(x)),2))\nevents_issues=events_issues.fillna(0)\n\nfig=plt.figure(figsize=(6,12))\nax = fig.add_subplot(111)\nim = ax.imshow(events_issues, cmap=plt.cm.summer)\nax.xaxis.set_ticks_position('top')\nax.set_xticks(np.arange(len(events_issues.columns)))\nax.set_yticks(np.arange(len(events_issues.iloc[:,0])))\nax.set_xticklabels(events_issues.columns)\nax.set_yticklabels(events_issues.index) \nbottom, top = ax.get_ylim()\nax.set_ylim(bottom, top)\nfig.colorbar(im,pad=0.03) \nax.set_title(\"Heatmap for areas and actions\",fontsize=16) \nplt.grid()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Topics 3: Networks of regular games"},{"metadata":{},"cell_type":"markdown","source":"Using the data of regular games record in 2019, we figured the network of team-team game in a way of times that two teams playing with each other during the whole year. For example, if team A has played with team B in 2019 3 times, then link an edge from node A to node B weighted as 3. \n\nThe left net removes edge weights less than 2. So it acts more like a net of conferences of all teams. The right one is moer complex with all edges and deserves more research, we always refer to this net when mention \"the net\" below."},{"metadata":{"trusted":true},"cell_type":"code","source":"regular_19=rc[rc.Season==2019]\nregular_19=regular_19.loc[:,[\"Season\",'DayNum','WTeamID','LTeamID']]\nregular_19_net=pd.DataFrame(regular_19.groupby(by=['WTeamID','LTeamID']).size(),columns=[\"num_of_games\"])\nallwteams=list(set(regular_19.WTeamID))\nalllteams=list(set(regular_19.LTeamID))\nallteams=list(set(allwteams+alllteams))\nlst=[]\nnodes=[]\nfor item in regular_19_net.iterrows():\n    if item[1][0]>=2:\n        lst.append((item[0][0],item[0][1],item[1][0]))\n        nodes.append(item[0][0])\n        nodes.append(item[0][1])\nnodes=list(set(nodes))\nG=nx.Graph()\nG.add_nodes_from(nodes)\nG.add_weighted_edges_from(lst)\nplt.figure(figsize=(20,12))             \nplt.subplot(121)           \nnx.draw_networkx(G,pos=nx.kamada_kawai_layout(G),with_labels=False,edge_color='black',node_size=10,alpha=0.5,node_shape='s',width=0.4)\nplt.title(\"In Conference games\")\nplt.legend([\"Team\"],loc='upper left')\n\nlst=[]\nnodes=[]\nfor item in regular_19_net.iterrows():\n    if item[1][0]>=0:\n        lst.append((item[0][0],item[0][1],item[1][0]))\n        nodes.append(item[0][0])\n        nodes.append(item[0][1])\nnodes=list(set(nodes))\nG=nx.Graph()\nG.add_nodes_from(nodes)\nG.add_weighted_edges_from(lst)\nplt.subplot(122)               \nnx.draw_networkx(G,pos=nx.kamada_kawai_layout(G),with_labels=False,edge_color='black',node_size=10,alpha=0.5,node_shape='s',width=0.2)\nplt.legend([\"Team\"],loc='upper left')\nplt.title(\"All games\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"The degree distribution figure shows that a node in the net usually has 10-20 edges accessible to others. After removing teams in the same conference, a team in NCAA usually has around 10 friend teams that frequently play with."},{"metadata":{"trusted":true},"cell_type":"code","source":"degree=nx.degree_histogram(G)\nx=range(len(degree))\ny=[z/float(sum(degree))for z in degree]\nplt.xlabel(\"Degree\")\nplt.ylabel(\"Frequency\")\nplt.title(\"Degree-distribution\")\nplt.loglog(x,y,color=\"blue\",linewidth=2)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"The degree assortativity coefficient shows the preference of nodes to generate new edges. As the figure shows, teams are more likely to play with teams that tend to play more with new teams. That's different from social network like facebook, suggesting higher effciency of information transition and a possibility of small world."},{"metadata":{"trusted":true},"cell_type":"code","source":"dac=nx.degree_assortativity_coefficient(G)\nx=list(G.degree())\ny=nx.average_neighbor_degree(G)\nx=[item[1] for item in x]\ny=[item[1] for item in y.items()]\nplt.xlabel(\"Degree\")\nplt.ylabel(\"Average-neighbor degree\")\nplt.title(\"degree_assortativity\")\nplt.scatter(x,y,color=\"blue\",s=1)\nplt.show()\nprint(\"degree assortativity coefficient of the network：\"+str(dac))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" The boxplots show the clustering coefficient and average shortest path length. Compared with 50 random-made networks using same nodes and setting random edges, the real net has a significant higher clustering coefficient and a lower average shortest path length. Therefore, the net of games of NCAA can be proved as a small world. Teams are active and aggressive in this time, it's easy to find a team to play during regular session."},{"metadata":{"trusted":true},"cell_type":"code","source":"cc=nx.average_clustering(G)\nasd=nx.average_shortest_path_length(G,weight='yes')\n\ncc_random=[]\nasd_random=[]\nfor i in range(50):\n    lst1=[(a,b,random.randint(1,6) if random.choice([0,1]) else 0) for a,b,c in lst]\n    lst1=[item for item in lst1 if item[2]!=0]\n    G_random=nx.Graph()\n    G_random.add_nodes_from(nodes)\n    G_random.add_weighted_edges_from(lst1)\n    cc_random.append(nx.average_clustering(G_random))\n    asd_random.append(nx.average_shortest_path_length(G_random,weight='yes'))\n\nplt.figure(figsize=(9,7))\nplt.subplot(121)\nplt.boxplot(cc_random)\nplt.scatter(x=1,y=cc,color='blue',s=2)\nplt.annotate(\"NCAA 2019\",xy=(1,cc),xytext=(0.5,cc-0.03),arrowprops=dict(facecolor='black', shrink=0.05))\nplt.xlim()\nplt.grid(c='white')\nplt.ylabel(\"clustering coefficients\")\n\nplt.subplot(122)\nplt.boxplot(asd_random)\nplt.scatter(x=1,y=asd,color='red',s=2)\nplt.annotate(\"NCAA 2019\",xy=(1,asd),xytext=(1.3,asd+0.1),arrowprops=dict(facecolor='black', shrink=0.05))\nplt.xlim()\nplt.ylabel(\"average shortest distance\")\nplt.grid(c='white')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"To clarify if the net was aged, this figure shows the node(team) age VS the probability making new edges of the node. As the figure shows, it looks like the front part of DM aged model curve. It shows the figure is middle-aged and tends to be stable in the next time. But now it's still active and available for nodes to make new edges with others."},{"metadata":{"trusted":true},"cell_type":"code","source":"def time_with_newedges(years):\n    results=[]  \n    dict_teamrivals={}\n    for year in years:\n        regular_year=rc[rc.Season==year]\n        regular_year=regular_year.loc[:,[\"Season\",'DayNum','WTeamID','LTeamID']]\n        lastyear=year-1\n        regular_lastyear=rc[rc.Season==lastyear]\n        regular_lastyear=regular_lastyear.loc[:,[\"Season\",'DayNum','WTeamID','LTeamID']]\n\n\n        allwteams=list(set(regular_year.WTeamID))\n        alllteams=list(set(regular_year.LTeamID))\n        allteams=list(set(allwteams+alllteams))\n        num_teams_year=len(allteams)\n\n\n        regular_year_net=pd.DataFrame(regular_year.groupby(by=['WTeamID','LTeamID']).size(),columns=[\"num_of_games\"])\n        lst=[]\n        nodes=[]\n        for item in regular_year_net.iterrows():\n            lst.append((item[0][0],item[0][1],item[1][0]))\n            nodes.append(item[0][0])\n            nodes.append(item[0][1])\n        nodes=list(set(nodes))\n        G1=nx.Graph()\n        G1.add_nodes_from(nodes)\n        G1.add_weighted_edges_from(lst)\n\n\n        regular_lastyear_net=pd.DataFrame(regular_lastyear.groupby(by=['WTeamID','LTeamID']).size(),columns=[\"num_of_games\"])\n        lst=[]\n        nodes=[]\n        for item in regular_lastyear_net.iterrows():\n            lst.append((item[0][0],item[0][1],item[1][0]))\n            nodes.append(item[0][0])\n            nodes.append(item[0][1])\n        nodes=list(set(nodes))\n        G2=nx.Graph()\n        G2.add_nodes_from(nodes)\n        G2.add_weighted_edges_from(lst)\n\n\n        for item in dict(G1.degree()).keys():\n            teambornyear=int(teaminfo[teaminfo.TeamID==item].FirstD1Season)\n            teamage=year-teambornyear\n            edges_lastyear=G2.edges([item])\n            rivals_lastyear=list(set([i[1] for i in edges_lastyear]))\n            if dict_teamrivals.get(item,\"Never\")==\"Never\":\n                dict_teamrivals[item]=rivals_lastyear\n            else:\n                s=dict_teamrivals[item]\n                if rivals_lastyear is None:\n                    s=s.extend(rivals_lastyear)\n                    dict_teamrivals[item]=s\n            edges_year=G1.edges([item])\n            if type(dict_teamrivals[item]) is not None:\n                num_rivals_new=len([j[1] for j in edges_year if j[1] not in dict_teamrivals[item]])\n            else:\n                num_rivals_new=len([j[1] for j in edges_year])\n            ratio=num_rivals_new/(num_teams_year-len(rivals_lastyear)-1)\n            results.append((item,teamage,ratio))\n          \n    return results\n\nresults=time_with_newedges(range(1986,2020))\n    \nages=[]\nprobs=[]\nfor i in range(1,35):\n    result_age=[c for a,b,c in results if b == i]\n    prob=sum(result_age)/len(result_age)\n    ages.append(i)\n    probs.append(prob)\n    \nplt.figure(figsize=(10,8))\nplt.plot(ages,probs,color='blue',label='True net')\nplt.scatter(ages,probs,s=20,marker='s')\nplt.title(\"Ages vs Newedges\")\nplt.xlabel(\"Team age\")\nplt.ylabel(\"Average probability of new edges\")\nplt.grid(c='black')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Topic 4: Impact of gender on team performance"},{"metadata":{},"cell_type":"markdown","source":"Add each statistic of both winning and losing team together in M/WNCAA TourneyDetailedResults dataset. \nAdd columns: Sex(M/N), FGP(FGM/FGA), FGP3(FGM3/FGA3), FTP(FTM/FTA) into NCAA TourneyDetailedResults dataset. \nExport the new dataset as csv file named: export_dataframe_M/WNCAA.\nCombine previous dataset together. Export the new altogether dataset as csv file named: export_dataframe_MNCAA&WNCAA.\nDue to a lack of data before Season 2010 in WNCAA TourneyDetailedResults, we only compare indexes between genders after 2010."},{"metadata":{"trusted":true},"cell_type":"code","source":"mdf = pd.read_csv(f\"../input/export-dataframe/export_dataframe_MNCAA.csv\")\nwdf = pd.read_csv(f\"../input/export-dataframe/export_dataframe_WNCAA.csv\")\ndfa = pd.read_csv(f\"../input/export-dataframe/export_dataframe_MNCAAWNCAA.csv\")\ndfa_since2010 = dfa[dfa.Season>=2010]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" According to the three plots based on field goal data, we can find an intersting fact that women's teams have way more field goal attempts than men's teams, which leads to another fact that women's team's feild goal percentage is lower than men's teams. The reason came to my mind is the finish ability difference due to the physical differnce between men and women. For example, when a male player drives into the paint, he can either dunk or layup, but more likely to dunk, which has a much higher chance to score. However, very few female players are able to dunk, which cause a lower chance to score the basket."},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, (axs0, axs1) = plt.subplots(ncols = 2, figsize = (18,6))\nsns.boxplot(x = 'Season', y = 'FGA', hue='Sex', palette = ['b' , 'r'] , data = dfa_since2010,ax=axs0)\nsns.boxplot(x = 'Season', y = 'FGP', hue='Sex', palette = ['b' , 'r'] , data = dfa_since2010,ax=axs1)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" We can tell from the plots that, men's teams shoot more 3-pointers than women's teams. And there is an obvious increasing trend for men's teams' 3-pointer attempts since year 2016, while there is not obvious change for women's teams' 3-pointer attempts. This indicates that more and more men's teams choose to score behind the three-point line, which proves that shooting more 3-pointers is more efficient to score based on nowadays modern basktball theory. Another point may be applied to this fact is the succsess of teams like Golden Sate Warriors and Houston Rockets in the NBA. These teams have their own fashion to shoot a lot of 3-pointers in the game. They have very good record during the season and even win a championship, which really set an example for the rest of the basketball world.\n  \n   Based on the plots that focusing on free throws, we can clearly see that men's teams usually have more free throw attempts than the women's teams. This will be easily explained beacuse male players are more likely to use their body and strength to score, which makes a male player to draw a foul more often than female players. In short, games between men's teams are more physical compared with games between women's teams."},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, (axs0, axs1) = plt.subplots(ncols = 2, figsize = (18,6))\nsns.boxplot(x = 'Season', y = 'FGA3', hue='Sex', palette = ['b' , 'r'] , data = dfa_since2010, ax=axs0)\nsns.boxplot(x = 'Season', y = 'FTA', hue='Sex', palette = ['b' , 'r'] , data = dfa_since2010, ax=axs1)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" Two concise correlation matrix in terms of MNCAA and WNCAA relatively are pretty similar. Every different correlation coefficients between men's and women's teams are very close to each other. Despite some very intuitively pairs with high correlation coefficient like, Feild goal made and Score; Free throw made and Free throw attempt; Personal foul and Free throw attempt. I choose another two pairs with moderate correaltion coefficient to do the scatter plot and statistical analysis."},{"metadata":{"trusted":true},"cell_type":"code","source":"r1 = pd.DataFrame(mdf,columns=['FGA','FGM','FGP','FGA3','FGM3','FGP3','Score','Ast','OR','DR'])\ncorr = r1.corr(method='spearman')\nmask = np.zeros_like(corr, dtype = np.bool)\nmask[np.triu_indices_from(mask)] = True\nf, ax = plt.subplots(figsize=(15,10))\nplt.title(\"Concise MNCAA Correlation matrix\")\nsns.heatmap(corr, mask = mask, cmap= 'BuPu', annot = True)\nbottom, top = ax.get_ylim()\nax.set_ylim(bottom + 0.5, top - 0.5)\nplt.show()\n\nr2 = pd.DataFrame(wdf,columns=['FGA','FGM','FGP','FGA3','FGM3','FGP3','Score','Ast','OR','DR'])\ncorr = r2.corr(method='spearman')\nmask = np.zeros_like(corr, dtype = np.bool)\nmask[np.triu_indices_from(mask)] = True\nf, ax = plt.subplots(figsize=(15,10)) \nplt.title(\"Concise WNCAA Correlation matrix\")\nsns.heatmap(corr, mask = mask, cmap= 'YlGnBu', annot = True)\nbottom, top = ax.get_ylim()\nax.set_ylim(bottom + 0.5, top - 0.5)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" Relation analysis between Total Team Filed Goal Attempt and Total Team Offensive Rebound\n   P-Value of the linear model is 1.16e-85, which shows that there is realtion between feild goal attempt and offesnisve rebound."},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, (axs0,axs1) = plt.subplots(ncols = 2, figsize = (14,6))\nsns.regplot(x='OR', y='FGA', data=mdf,ax=axs0,color='r').set(xlim = (0,60),ylim = (70,180),title = 'MNCAA FGA vs. OR')\nsns.regplot(x='OR', y='FGA', data=wdf,ax=axs1,color='b').set(xlim = (0,60),ylim = (70,180),title = 'WNCAA FGA vs. OR')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" Relation analysis between Total Team Filed Goal percentage and Total Team Assists P-Value of the linear model is 1.24e-63, which shows that there is realtion between feild goal percentage and assist."},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, (axs0,axs1) = plt.subplots(ncols = 2, figsize = (14,6))\nsns.regplot(x='Ast', y='FGP', data=mdf, ax=axs0,color='b').set(xlim = (5,55),ylim = (0.4,1.4),title = 'MNCAA FGP vs. Ast')\nplt.grid()\nsns.regplot(x='Ast', y='FGP', data=wdf, ax=axs1,color='r').set(xlim = (5,55),ylim = (0.4,1.4),title = 'WNCAA FGP vs. Ast')\nplt.grid()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":" The dataset used is reconstructed by calculating the average of field goal rate(FG%) and field goal attempts(FGA) of each team in 2019 matches. We try to compare FG, FG% and FGA between NCAA man teams and woman teams. From the figures, we found:\n\nBy conducting the Wilcoxon rank-sum test, except for area 5 and 10, mean FG% of men and women teams in all areas are significantly different. It is comprehensible that FGAs in area 3 and 13 have no significant differences cause few FG attempts were made in these areas. Except for area 3 and 13, area 1 also passes the Wilcoxon rank-sum test, which suggests that man and woman teams make same numbers of attempts in area 1 each match, but FG% of women teams are apparently lower. We count successful dunks in 2019 for man and woman games respectively, finding that male players made 6575 dunk successes while female players only made 15 in a year. It comes to us that FG rate of male and female diverge beacuse of the high success rate of dunks. To test this hypothesis, we subtract dunks from data and compare FG rate and FGA again. Wilcoxon rank-sum test are falied this time, proving that, other than dunking, average FG rate of male and female in area 1 has no difference."},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.set(style=\"ticks\", palette=\"pastel\")\nax = sns.violinplot(x=\"Area\", y=\"FG%\", hue=\"Sex\",data=pd.read_csv(f\"../input/boxplot/df_FG.csv\"), palette=\"Set\"+str(1),fliersize = 1)\nax.set_title(\"FG% in MEvents2019 & WEvents2019 in Different Area\")\nfig = ax.get_figure()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.set(style=\"ticks\", palette=\"pastel\")\nax = sns.violinplot(x=\"Area\", y=\"FGA\", hue=\"Sex\",data=pd.read_csv(f\"../input/boxplot/df_FGA.csv\"), palette=\"Set\"+str(1),fliersize = 1)\nax.set_title(\"FGA in MEvents2019 & WEvents2019 in Different Area\")\nfig = ax.get_figure()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Summary"},{"metadata":{},"cell_type":"markdown","source":"In topic 1 we presented changes of basketball games of NCAA with time. \n\nAs time went by, indexes always change as a principal like this: indexes of basketball games got inflated when a new game strategy appeared, then from season to season the defense methods to this strategy got mature with the shrink of indexes, until the next appearance of new game startegy. Many professional sport tournaments do own this phenomena, which suggests a healthy competetive process of progress of sport by tournament."},{"metadata":{},"cell_type":"markdown","source":"Topic 2 provides some basics information about the tuornament NCAA.\n\nWe shown a distribution of host place as state, a list of strong teams that are always competetive in March Madness, situation of team ages in tournament and information about area preference of actions on court. These inforamtion may help you make a basic description about the current NCAA."},{"metadata":{},"cell_type":"markdown","source":"Topic 3 analyzed the game-relation between teams in-and-out conferences.\n\nWe found that besides in-conference games, each team on average has about 7 to 10 partners-teams to paly with during the whole regular session.\nMoreover, teams tend to play with other outgoing teams which prefer to have more partners-teams. The network is a samll world, with high efficiency of information transition and teams are easily accessible to others. Finally, the net is not very aged with a high probability creating new edges between nodes, this suggests an uniformity and organized competetion of the tournament NCAA in the future."},{"metadata":{},"cell_type":"markdown","source":"In topic 4, We all know male and female differ in the strength, stamina, speed, and agility. So, there must be some differences in performances during the basketball game of the two genders. By analyzing the data, plotting appropriate graphs and using statistical test can help us understand the differences and relations in a more intuitive way. That’s exactly  what we do in the whole section. "}],"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":4,"nbformat_minor":4}