NBA這三十年發生了什麼,Python告訴你

2021-09-20 04:31:08 字數 4611 閱讀 4860

通過nba近三十年的資料來看:

。匯入所需包

# -*- coding: utf-8 -*-

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

from matplotlib.font_manager import fontproperties

import numpy as np

import matplotlib as mpl

import warnings

import re

warnings.filterwarnings('ignore')

plt.rcparams['font.family'] = ['microsoft yahei']

匯入資料

匯入資料並生根據比賽比分生成一列分差:

data_team = pd.read_csv('/home/kesci/input/nbadata/team_season.csv',encoding ='utf-8')

# 根據比分生成一列分差

data_team[u'分差'] = (data_team[u'比分'].str.extract(r"(\d+\.?\d*)-(\d+\.?\d*)", expand=false)[0].astype('int')

- data_team[u'比分'].str.extract(r"(\d+\.?\d*)-(\d+\.?\d*)", expand=false)[1].astype('int'))

資料相關性

解析來我們看下各項統計資料之間有何相關性,使用的是pandas的內建函式dataframe.corr()來計算資料之間的皮爾遜相關係數,絕對值越接近1表明相關性越強。

data_corr = data_team.corr()

plt.figure(figsize = (15,12))

sns.heatmap(data = data_corr,cmap = 'blues',linewidths=0.25,annot=true)

plt.show()

我們通過seaborn的heatmap來展示:

我們能看到什麼:

三十年,風格變了嗎

可能看了很多年的球迷都在感嘆:

但事實真的是這樣的嗎或者說這些變化又是怎麼體現到資料之中的,我們接下來看一看。

# 對比賽時間處理,取年份用於分組

data_team[u'年份'] = data_team[u'時間'].str.split('-').str[0]

data_team[u'月份'] = data_team[u'時間'].str.split('-').str[1]

data_grouped_years = data_team.groupby(data_team[u'年份']).mean().reset_index()

plt.figure(figsize=(15, 12))

for i, column in enumerate(data_grouped_years.iloc[:, 1:19].columns, 1):

plt.subplot(6, 3, i)

plt.plot(data_grouped_years[u'年份'], data_grouped_years[column], 'r')

my_x_ticks = ['1985', '1990', '1995', '2000', '2005', '2010', '2016']

plt.xticks(my_x_ticks)

plt.ylabel(column)

plt.show()

通過繪製折線圖我們看下各項資料在三十年間的變化:

我們能看到什麼:

總體來說,防守型的資料都是在下降,無論是籃板,搶斷還是蓋帽,外線出手暴漲。以前是內線的時代,現在是小球時代,中鋒作用被弱化。畢竟nba是乙個商業聯盟,更多的是迎合市場,乙個更能得分的球員總是會比乙個更能搶籃板的球員更受歡迎。

三分的變化

前文中我們也看到了,三分球這些年越來越被重視,我們接下來更加直觀來展現下這些年三分選擇的變化:

data_team[u'三分佔比'] = data_team[u'三分命中']*3/data_team[u'得分']

data_team_3ps_grouped = data_team[u'三分佔比'].groupby(

[data_team[u'年份'], data_team[u'月份']]).mean().reset_index()

data_team_pivot = data_team_3ps_grouped.pivot(u'月份', u'年份', u'三分佔比')

plt.figure(figsize=(20, 5))

with sns.axes_style("white"):

sns.heatmap(data=data_team_pivot, annot=true, linewidths=.5, cmap='reds')

plt.ylabel(u'月份')

plt.show()

我們統計來這些年來三分球佔比的情況,通過seaborn的heatmap做如下展示:

我們能看到什麼:

現在都這麼拼命的扔三分,真的就很合理嗎?

在討論三分合理性之前,我們先引入乙個概念——有效命中率

efg%(effective field goal percentage)通常翻譯為「有效命中率」,該資料優化了三分球對於球員命中率的影響。 考慮到每乙個三分球實際上相當於命中了1.5個兩分球,因此,efg%的計算公式為:efg% = ( fg + 0.5 * 3p ) / fga,其中: fg:投籃命中數; 3p:三分命中數 fga:投籃出手總數

其實簡單來說,投中乙個三分,算1.5個投籃命中數,下面我們來看下近三十年來,有效命中率是怎麼在變化。

data_team[u'有效命中率'] = (data_team[u'命中']+0.5 *

data_team[u'三分命中'])/data_team[u'出手']

data_team_efg_grouped = data_team.groupby(

[u'年份'])[u'有效命中率', u'投籃'].mean().reset_index()

plt.figure(figsize=(15, 5))

plt.plot(data_team_efg_grouped[u'年份'], data_team_efg_grouped[u'有效命中率'], 'r')

plt.plot(data_team_efg_grouped[u'年份'], data_team_efg_grouped[u'投籃'], 'g')

my_x_ticks = ['1985', '1990', '1995', '2000', '2005', '2010', '2016']

plt.xticks(my_x_ticks)

plt.legend(loc='best')

plt.show()

我們使用折線圖來看這些年真實命中率的變化:

我們可以看到,這些年整體命中率雖然是在下降,不過真實命中率反而要高於以前了,可能對於很多老球迷來說,這樣的nba少了很多對抗,觀賞性不如以前,不過我們還是可以看到,進攻效率卻更高了,當然這樣的變化是好是壞,就因人而異了。

結論性的東西就不說了,前文都已經說了很多了。

nba這麼多年變化不少,作為乙個球迷的我來說,變化其實也不小,想著以前高中大學的時候,為了自己喜歡的球星,跟同學爭的面紅耳赤也爭不出個好歹,大學的時候只要上午有比賽,鐵定是逃課去看比賽的,漸漸的參加工作之後,看nba的時間沒那麼多了,搞得現在好多新生輩的球員都不認識了,關注的永遠只有老詹,有時候看到一些說老詹不好的話,也沒那麼生氣了,現在希望的就是老詹還能多打幾年,等老詹退役了,我也應該就不再年輕了。

peace~

《激盪三十年》

上冊 1.從改革開放元年開始寫,那重點就是中國改革,不錯,吳曉波確實這麼幹,主要講述了中國的制度改革及其發生的種種大事記。2.很多領導需要有no1,但是不是誰都敢上的,也許你想的比誰都早,並且比誰都早做,但不一定最後成功的是。比如 info hightway,比如飯否 題外話,不過王興說的確實很對,...

三十年河東三十年河西

長安.書生 夜空的煙火劃過 聽聞這一屆的學子出了個學識驚人的狀元,著一身粗布衣裳的書生站在榜文不遠處眸子黯淡了下來。十載苦讀,仍是落榜了,卻是因為他沒有錢財去打點,這讓他如何自處。榜首之人的文章原是自己所書,如今被盜用。想到母親殷切等待的神色,他垂眸神傷。想起昨夜來找自己的人,他內心暗自掙扎了一番,...

三十年一開花 三十年一結果

就在剛才,中國男子足球國家隊創造了乙個新的歷史 三十年來首次戰勝宿敵南韓隊!而且是3 0完勝!作為一名 老 準球迷,在全場 我愛你 的助威聲中心潮澎湃,更是在終場哨音響起的時候,禁不住落淚!無數的辛酸,使現在 中國隊的比賽已經是有一搭無一搭的事情,下午無意中看到女足的比賽,才知道稍後有男足。但是,今...