丰满漂亮迷人人妻16P

当前位置: 哔哔新闻网 > 特鲁姆普大满贯 > 丁俊晖被甩10条街!特鲁姆普成就大满贯,小丁给80五虎拖...

python告诉你,四大分卫的常规赛表现,都不如哈登

来源:搜狐 时间:2019-07-22 05:54:35 | 特鲁姆普大满贯 3594

python戏说NBA


python戏说NBA,是一个用python来戏说NBA大事的系列栏目,这里将结合python开发技术,融合现今发生的NBA大事,做一些有趣的实验,让我们一起看热闹的同时,也能学到一些技术。分析结果仅供娱乐,缺乏专业论点支撑~

注意!!!作者只是个看热闹的球迷,并非篮球专业人士,再强调一遍,论证结果不够严谨,重要的是,大家可以通过这些有趣的研究带动自己学习技术的兴趣!!!

四大分位

很多80后、90后的朋友基本都是麦迪、科比、詹姆斯、艾佛森球迷。在绿军三巨头(加内特、皮尔斯、雷阿伦)组队之前,基本上每个球队都只有一个强点,跟我们现在强调的以一人一城来体现忠诚的观念非常吻合。今夏随着乔治和伦纳德入驻快船所引起的一系列效应,导致现如今NBA大都是双核球队,预计下赛季会非常精彩。而论起精彩程度,大家都会跟以前那个时代对比,因为那个时代基本上一个球队就只有一个明星球员,因此,这些明星球员就很吸粉了。而我们鼎鼎大名的四大分卫就是从那个时代脱颖而出的,他们分别是:

麦迪—— 银枪白马美少年!

麦迪的小腿非常销魂,而干拔姿势也是美如画,有35秒13分逆转马刺的神迹。还是2届得分王、2届最佳阵容、七次全明星,2次一阵,3次二阵,2次三阵,2001年荣获NBA进步最快球员奖。巅峰时期的麦迪征服了无数球迷,可惜的是生涯末期的他颠沛流离。

科比——最接近神的男人,乔丹之后最伟大的得分后卫!

科比,仅次于乔丹的二号位球员,他是一个篮球时代的标志。他拥有者非常强悍得分爆发力和最娴熟的进攻技巧,突破、投篮、罚球、三分球他样样都行,几乎没有进攻盲区。很多惊人得神迹,比如单场81分,三节62分,单赛季场均35.4分等。科比还有五座总冠军,1次MVP,2次FMVP,2次得分王,18次全明星,4次全明星MVP,历史得分榜第三位,10次一阵,2次二阵,2次三阵,9次防守一阵,2次防守二阵。

卡特——半人半神,UFO ,史上最强扣将!

卡特,他的扣篮是NBA得一个标志,基本到现在也没看到谁在扣篮上有超过他的天赋,在全明星扣篮大赛也留下了很多精彩画面--单臂挂筐,大风车……五记完美震撼的满分扣篮表演,卡特凭借一己之力拯救了危在旦夕的全明星扣篮大赛!

艾弗森——1996黄金一代状元郎!

地表最强183,标志性的crossover,晃过乔丹让人记住了这个敢于挑战神的小个子,并且以一己之力带76人进入了总决赛,面对湖人王朝的ok组合,毫不畏惧,并送给了湖人该季后赛唯一的一次败绩。

可以说四大分卫都很强~!

python告诉你,四大分卫的常规赛表现,都不如哈登

现役第一分卫--詹姆斯哈登

休斯顿火箭队当家球星--詹姆斯哈登,他是2018赛季的mvp,是现在除了詹姆斯之外的抗勇先锋。有非常多的个人荣誉,比如一阵、得分王、助攻王、单打王、mvp。带队拿过队史最好的65胜战绩,有场均36分超越科比的得分记录,多次入选全明星首发,带领美国国家队拿过奥运冠军,世界冠军等非常多出色的成绩。

但是,他一直被人诟病季后赛乏力,尽管他的数据是非常不错的。不过由于连年倒在勇士的脚下,引起了大家的质疑,认为他心气不足,抑或实力不行,担不起第一分卫的名号。因此,很多人都说,是现在没有好的得分后卫,才让他拿了这么多荣誉。换言之,就是时无英雄,使竖子成名。如果在四大分卫时代,哈登肯定就是以普通的首发。

结果真的是这样的吗?由于哈登和四大分位的巅峰不在同一个时代,我们没办法通过现实做出比较,但是,我们可以用数据来证实一下,哈登跟四大分卫比,真的不如吗?

python告诉你,四大分卫的常规赛表现,都不如哈登

温馨提示,如果你只对分析结果感兴趣,你可以直接跳到结果分析那块去看,如果你对分析过程也感兴趣,希望学点技术,或者找出作者的一些破绽开喷,那么就接着往下看。对于初学者也请放心,我的代码都是简单写的,通俗易懂,没用什么技巧,而且还有很多优化的余地,大家可以自己改进一下。

python告诉你,四大分卫的常规赛表现,都不如哈登

源代码在文章末尾有下载链接。

准备数据源

要想分析哈登和四大分卫的表现,首先我们要有数据做支撑。我们的数据从stat-nba,一个数据最全面的中文NBA网站获取。当然我们不是手动获取,我们利用简单的爬虫技巧来获取。在这里,我希望你有前端基础和python基础,不然看起来会有点吃力。

其中科比的数据网址是:

http://stat-nba.com/player/195.html

麦迪的数据网址是:

http://stat-nba.com/player/2421.html

卡特的数据网址是:

http://stat-nba.com/player/713.html

艾佛森的数据网址是:

http://stat-nba.com/player/1687.html

哈登的数据网址是:

http://stat-nba.com/player/1628.html

然后,我们分析他们的能力需要有指标做参考,作者以自己有限的篮球知识,筛选了6个指标,他们分别是:场均得分、场均助攻、场均篮板、胜利贡献值(ws)、球员效率值(per)、真实命中率。

由于哈登和四大分卫的巅峰是错开的,所以我们不以特定赛季进行对比,因为拿哈登的巅峰赛季和四大分卫的生涯末期进行对比,是没有意义的,所以我们按照职业年限来对比。即新秀年,那么大家都是新秀年,第二年那么大家都是第二年,以此论证,他们之间,谁到底是真正的王者。

抓取思路分析

抓取前,先准备必须的库,请安装requests、bs4、matplotlib、pandas。

爬取内容之前,我们首先要定位,定位什么呢,就是定位我们所需的数据的位置,更确切的说,包含所需数据的标签在哪里。

比如场均命中率这一项,我们可以发现,该页面有多个这样的表格,下图是威斯布鲁克的数据图,不过结构都是一样的,不影响我的解析:

python告诉你,四大分卫的常规赛表现,都不如哈登

而我们需要的需要的场均得分、篮板、助攻都在第一个表格。ws和per在倒数第二个表格。真是命中率在最后一个表格。所以,首先我们要定位到特定的表格,代码如下:

base_table = bs_obj.find_all("table", class_="stat_box")[0] # 第一个表用来获取场均篮板,场均助攻,场均得分

ws_table = bs_obj.find_all("table", class_="stat_box")[3] # 第四个表用来获取胜利贡献值以及球员效率

true_hit_table = bs_obj.find_all("table", class_="stat_box")[4] # 第五个表,获取真实命中率

接着,我们就需要寻找该数据项所在的标签了。寻找标签的思路是,鼠标移到我们需要的数据项,然后右击鼠标,点击检查,右边就会弹出该数据项对应的源码。以场均得分为示例:

首先网页打开四大分卫或者哈登的任一个统计数据页面,鼠标移到第一个表格的任一个得分数据上,鼠标右击,然后找到检查那项,光标已过去接着鼠标左击。会看到右边弹出如下所示窗口:

python告诉你,四大分卫的常规赛表现,都不如哈登

我们可以看到很多的td标签,但是我们要的是场均得分这个指标,通过观察,可以发现,只有场均得分这个指标才有pts这个class,其它td都没有,因此,我们可以通过这个class来获取场均得分指标。

其他指标也是这样操作的,大家自己联系一下,到此我们的页面标签定位就算完成了。

示例代码如下:

找出所需的表格--》定位到该表格获取需要的数据项--》解析出数据--》转换数据类型为浮点型,方便绘图--》将结果存起来返回

def get_content(url):

"""爬取数据"""

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'

} # 模仿一个标题头,这是爬虫最简单的策略

r = requests.get(url=url, headers=headers)

html = r.content

bs_obj = BeautifulSoup(html, 'html.parser')

base_table = bs_obj.find_all("table", class_="stat_box")[0] # 第一个表用来获取场均篮板,场均助攻,场均得分

ws_table = bs_obj.find_all("table", class_="stat_box")[3] # 第四个表用来获取胜利贡献值以及球员效率

true_hit_table = bs_obj.find_all("table", class_="stat_box")[4] # 第五个表,获取真实命中率

temp_result = []

temp_result.append(extract_data("pts", base_table)) # 得分

temp_result.append(extract_data("ast", base_table)) # 助攻

temp_result.append(extract_data("trb", base_table)) # 得分

temp_result.append(extract_data("ws", ws_table)) # ws

temp_result.append(extract_data("per", ws_table)) # 球员效率

temp_result.append(extract_data("tsper", true_hit_table)) # 真实命中率

return temp_result

def extract_data(class_tag, table):

"""

提取数据

"""

all_td = table.find_all("td", class_=class_tag) # 得分

rows = []

for td in all_td:

try:

ratio = float(td.text.strip()[:-1]) if td.text.strip()[-1] == "%" else float(

td.text.strip()) # 过滤调%符号并转换为浮点型

rows.append(ratio)

except Exception:

continue;

rows = rows[:-1]

rows = list(reversed(rows))

print(rows)

return rows

到这里,我们的数据基本上就爬下来了,有了准备好的数据,我们就可以进行绘图了,这里我将绘制柱状图进行各数据的对比,但是在绘制柱状图之前,我对数据进行了一个综合评分进行比较,比较该年份,谁的表现比较出色,然后输出控制台来得出结论,最后在绘制柱状图做辅助论证。

进行综合评分

前面说了,我们将取场均得分篮板助攻、ws、per、真实命中率作为指标,因此,通过前面的采集数据,我们已经有了四大分卫和哈登职业生涯的各项数据,为了方便我们比较以及论证结论,我做了简单的评分。评分思路如下:某位球星某项指标位于所有球星的第一名,那么他将得到5分,第二名得到4分。依次对所有指标进行排序对比,所有得分相加得出综合得分,综合得分越高的,表示他的表现越出色。

有一个辅助理解的输出:

第1年数据对比

得分:allen>vince>harden>kobe>tracy

助攻:allen>vince>harden>tracy>kobe

篮板:vince>tracy>allen>harden>kobe

ws:vince>harden>allen>tracy>kobe

per:vince>allen>tracy>kobe>harden

真实命中率:harden>kobe>vince>allen>tracy

综合排序:vince>allen>harden>tracy>kobe

上面的意思就是第一年科比的评分就是得分2+助攻1+篮板1+ws1+per2+真实命中率4。通过综合评分排序,第一年表现最出色的是卡特。综合评分代码如下代码如下:

def sort_index(core_data, label_list):

"""

对四大分位以及哈登的各项数据指标进行排序

:return:

"""

complex_dict = {}

ser = DataFrame(core_data, index=['kobe', 'tracy', 'allen', 'vince', 'harden'])

for i in range(len(label_list)):

ser.sort_values(by=i, inplace=True, ascending=False)

print("{5}:{0}>{1}>{2}>{3}>{4}".format(ser.index[0], ser.index[1], ser.index[2], ser.index[3], ser.index[4],

label_list[i]))

score = 5 # 各项数据的第一名将获取5分,依次递减。最后求的每个人的总分,得分最高者表示在该年是最优秀的

for index in ser.index:

if index in complex_dict:

complex_dict[index] += score

else:

complex_dict[index] = score

score -= 1

sort_result = sorted(complex_dict.items(), key=lambda item: item[1], reverse=True)

print("综合排序:{0}>{1}>{2}>{3}>{4}".format(sort_result[0][0], sort_result[1][0], sort_result[2][0],

sort_result[3][0], sort_result[4][0]))

绘制柱状图

由于我们需要绘制5个人的各项数据对比,所以绘制柱状图的过程会比较繁琐。首先我们需要组织数据,即将个球星对应年份的数据取出来组成一个列表。然后设置一下字体,避免中文乱码。接着绘制柱状图,柱状图要注意控制间隙,防止重叠了。最后绘制轴标签和数值变量标题啥的。我知道我这样说的太笼统,但我不知道该怎么描述比较好,毕竟绘图还是要实际看一下效果比较好。我直接给代码你看吧,代码如下:

def draw_bar(core_data, label_list, year):

"""

绘制条形图

:return:

"""

kobe_list, tracy_list, allen_list, vince_list, james_list = core_data

matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体和负号正常显示

matplotlib.rcParams['axes.unicode_minus'] = False

"""

绘制条形图

"""

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

x = range(len(kobe_list))

kobe_rects = plt.bar(x, height=kobe_list, width=0.15, alpha=0.8, color='red', label="kobe")

tracy_rects = plt.bar([i + 0.15 for i in x], height=tracy_list, width=0.15, alpha=0.8, color='green',

label="tracy")

allen_rects = plt.bar([i + 0.3 for i in x], height=allen_list, width=0.15, alpha=0.8, color='grey',

label="allen")

vince_rects = plt.bar([i + 0.45 for i in x], height=vince_list, width=0.15, alpha=0.8, color='black',

label="vince")

james_rects = plt.bar([i + 0.6 for i in x], height=james_list, width=0.15, alpha=0.8, color='brown',

label="harden")

plt.ylim(0, 70) # y轴取值范围

plt.ylabel("数值")

"""

设置x轴刻度显示值

"""

plt.xticks([index + 0.35 for index in range(len(kobe_list))], label_list)

plt.xlabel("数据项")

plt.title("第{0}年数据对比".format(str(year + 1)))

plt.legend() # 设置题注

# 编辑文本

for item in [kobe_rects, tracy_rects, allen_rects, vince_rects, james_rects]:

for rect in item:

height = rect.get_height()

plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha="center", va="bottom")

plt.show()

到了这一步,我们就做好了所有的步骤,从分析数据、抓取数据、清洗数据、准备数据、排序数据、绘图的过程,都做好了,要是不懂没关系,文章末尾有源码下载,可以慢慢研究。接着我们看结论,论证一下,谁才是真正的王者。

结果分析

这里再说一遍,给直接看结果的朋友看。我们分析他们的能力需要有指标做参考,作者以自己有限的篮球知识,筛选了6个指标,他们分别是:场均得分、场均助攻、场均篮板、胜利贡献值(ws)、球员效率值(per)、真实命中率。为了方便我们比较以及论证结论,我做了简单的评分。评分思路如下:某位球星某项指标位于所有球星的第一名,那么他将得到5分,第二名得到4分。依次对所有指标进行排序对比,所有得分相加得出综合得分,综合得分越高的,表示他的表现越出色。由于哈登目前只有10年的数据,所以我们只对比前十年的数据。

有一个辅助理解的输出:

第1年数据对比

得分:allen>vince>harden>kobe>tracy

助攻:allen>vince>harden>tracy>kobe

篮板:vince>tracy>allen>harden>kobe

ws:vince>harden>allen>tracy>kobe

per:vince>allen>tracy>kobe>harden

真实命中率:harden>kobe>vince>allen>tracy

综合排序:vince>allen>harden>tracy>kobe

上面的意思就是第一年科比的评分就是得分2+助攻1+篮板1+ws1+per2+真实命中率4。通过综合评分排序,第一年表现最出色的是卡特。

第一年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第一年的综合评分,卡特第一、艾佛森第二、哈登第三、麦迪第四、科比第五,最好的是卡特,最差的是科比。

第二年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第二年的综合评分,卡特第一、艾佛森第二、科比第三、哈登第四、麦迪第五,最好的是卡特,最差的是麦迪。

第三年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第三年的综合评分,卡特第一、艾佛森第二、哈登第三、科比第四、麦迪第五,最好的是卡特,最差的是麦迪。

第四年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第四年的综合评分,哈登第一、麦迪第二、科比第三、艾佛森第四、卡特第五,最好的是哈登,最差的是卡特。

第五年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第五年的综合评分,麦迪第一、哈登第二、科比第三、艾佛森第四、卡特第五,最好的是麦迪,最差的是卡特。

第六年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第六年的综合评分,麦迪第一、哈登第二、科比第三、艾佛森第四、卡特第五,最好的是麦迪,最差的是卡特。

第七年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第七年的综合评分,科比第一、哈登第二、麦迪第三、艾佛森第四、卡特第五,最好的是科比,最差的是卡特。

第八年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第八年的综合评分,哈登第一、卡特第二、麦迪第三、科比第四、艾佛森第五,最好的是哈登,最差的是艾佛森。

第九年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第九年的综合评分,哈登第一、科比第二、艾佛森第三、卡特第四、麦迪第五,最好的是哈登,最差的是麦迪。

第十年

柱状图对比:

python告诉你,四大分卫的常规赛表现,都不如哈登

文字输出:

python告诉你,四大分卫的常规赛表现,都不如哈登

结论:第十年的综合评分,哈登第一、科比第二、艾佛森第三、麦迪第四、卡特第五,最好的是哈登,最差的是卡特。

综合评定

注意,下面的次数是在5个人对应的年限进行对比,所以,是强者之间的对话,即使最差的表现在联盟也是非常优秀的。

综合十年的评定:

科比最好次数:1,最差次数:1。

麦迪最好次数:2,最差次数:3。

卡特最好次数:3,最差次数:5。

艾佛森最好次数:0,最差次数:1。

哈登最好次数:4,最差次数:0。

这个数据反映的对不对呢?

首先是科比,科比职业生涯只拿了一次mvp,除了夺冠那几年,基本都是季后赛边缘球队甚至没进季后赛,所以前十年对他来说最好只有一次和最差也只有一次,符合。

其次是麦迪,麦迪的魔术生涯是非常劲爆的,但火箭末期,真的很一般。恰好麦迪有两个得分王,而火箭末期经常受伤,最差次数有3次也正常。

接着是卡特,卡特最好的是新秀前几个赛季在猛龙,拿过最佳新秀,并且在篮网有打进过东部决赛,但是,前十年也有多次未进季后赛。所以他的最多次数3和最差次数5次,也基本符合。

嗯,艾佛森比较中规中矩,其实,我发现不了,这个数据跟他前十年的表现是不是符合,了解的太少。

然后是哈登,在雷霆新秀进最佳新秀阵容,拿过最佳第六人。然后在火箭时期,多次mvp第二,以及一次mvp。他的最好次数最多实属正常。

注意,上面的数据都是常规赛的场均数据,不包括季后赛。

最后的结果是,就常规赛而言,现役第一分卫并不逊色四大分卫,并且最好的表现次数高居第一,他生涯未缺席过季后赛,火箭生涯多次mvp排第二还拿了一次mvp,他的表现是最好的。他现在缺的是一个总冠军。

当然,科比在季后赛的表现,哈登还需要追逐很长的一段路。毕竟科比是神之后的最好得分后卫

python已经告诉我们,哈登并不是竖子成名,而是靠自己实力赢来的。就常规赛而言,四大分卫还没有表现比他好的。

如果大家对我的文章感兴趣,可以关注我的主页也可以关注我的公众号,顺带点个赞,可怜我写了这么多字。哈哈。

python告诉你,四大分卫的常规赛表现,都不如哈登

标签: 特鲁姆 条街 五虎 小丁 丁俊晖 成就 大满贯 满贯 80 10