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

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

先免责,再写,哈哈哈,省的被喷的怀疑人生。

直戳主题

本章没有什么球星之间的讨论、对比、互相伤害,你们可以先放下刀听我说下主题。很简单,今天突然想看看历届得分王,谁的出手最多,谁的得分最高之类的数据,然后就去扒拉数据。嗯,很块就找到了。突然想到,我已经三天没更新文章了,不能任自己这么装咸鱼。好吧,虽然没什么可争论的点,但还是写吧,不然今晚睡不着了,老想着没更新。所以,我马上来一个鲤鱼打挺,赶紧开动。

今天的主题是,看一下最近20年来的得分王,各项数据之最。

嘈点

写这篇文章的时候我已经想到几个开喷的点了,我先开:搞这么复杂,这点数据我不会用excel更快吗?

你分析的这些数据有意义吗?这也写。

不同时代的数据含量不同,这么对比没意义啊。很多朋友认为以前防守强度大,所以现在的数据要打骨折。

你的代码写这样,还拿出来。这里其实可以这么写。

...

更多的欢迎大家去挖掘,作为一个厚脸皮的人,我就是不怕,你~们~喷~

温馨提示

平时大家上班生活都不容易,刷微博啊刷新闻啥的都是为了放松一下,我理解大家。所以如果看到这里对我的主题还感兴趣的,比如你也想看看得分王中谁出手最多、谁罚球最多、谁三分最准等等,可以直接跳到分析结果去看。如果你对编程有兴趣,不嫌弃枯燥的,可以接着往下看,顺便提示一下,文末有源码下载连接。并且由于我再写这段代码的时候,其实心也是比较烦闷的,注释啥的也没有很多,代码也写得比较简单,没有优化。有心的读者可以自己下来自己改一下。

我这些文章的目的不是为了讨论NBA,也不是为了显摆代码。我只是希望通过实际生活中感兴趣的事情,融入一点开发技术,大家学起来就没这么苦闷。

确立提取方案

首先要做的第一步是收集历届得分王的数据,很巧,有网站帮我们做好统计了,但是它缺少导出excel表的功能,其实如果我们只是看数据,可以通过网站肉眼观察。但既然为了学点技术,我们就不嫌弃麻烦,把这些数据搞下来,自己排序输出。这样观察的方便些。

首先我们观察一下该网站,打开网址后,是这样的一个页面:

网站已经列出了历届得分王的数据,比如我们要看谁的篮板最高,我们可以看到篮板那一列,逐行进行比较得出。其它的数据项类似,但我嫌弃这样太累了,不如试着把数据搞下来,排序输出。

第二步:确立数据项。准备数据之前,我们应该知道我们要什么数据,就上图而言,我们待取的数据项分别是球员名字、出场次数、场均出场时间、投篮命中率、场均出手、三分命中率、三分出手、罚球命中率、场均罚球、场均篮板、场均助攻、场均抢断、场均得分。怎么确定你需要取哪项数据呢,如果你想看得分王中谁的篮板最高,那你就取篮板那一列数据,其它的类推。

第三步:确认数据范围。首先观察网站的整体结构,我们发现该页面有两个表格,第一个是NBA的数据,第二个是ABA的数据。因此,我们确认只需要第一个表格就行了,因为我们观察的是近二十年的得分王数据。

第四步:确认提取标签。首先要做的是,我们要确认提取哪项数据,这里以提取出场次数为例。将鼠标移动到出场该列的任一位球员的出场次数上(以13-14赛季凯文杜兰特为例),鼠标右击弹出菜单之后,选择检查后左击鼠标。会弹出如下页面。

上述页面弹出的html标签中,可以看到有很多个td标签,那怎么选择我们要的标签呢。从页面可以看到13-14赛季杜兰特的出场次数是81场,我们找到有81的td标签,这个标签就是我们要的。为了唯一提取这个标签,我们需要观察这个标签跟其他标签有什么不同。通过观察可以得出,出场次数这个标签有一个g的class,这是其它td没有的,因此可以通过这个class来唯一获取这个数据。其它数据项类似,大家自己练习。

至此,我们的数据提取方案就确立了。

准备数据

既然已经确立好了提取方案,那么就可以开始提取数据了。这里用到python的requests、bs4进行抓取数据,所以大家要先安装这两个库。

抓取步骤是这样的:访问网页-->获取网站返回内容-->转往网页位beatifulsoup对象-->根据前面的提取方案提取数据-->将数据存储到变量中去。

代码如下:

tags = {"player_name_out": "球员名称", "g": "出场次数", "mp": "场均出场时间", "fgper": "投篮命中率", "fga": "场均出手",

"threepper": "三分命中率", "threepa": "三分出手", "ftper": "罚球命中率", "fta": "场均罚球", "trb": "场均篮板",

"ast": "场均助攻", "stl": "场均抢断 ", "pts": "场均得分"}

def get_content():

"""爬取数据"""

url = "http://stat-nba.com/award/item14.html"

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] # 获取得分王第一个表格

temp_result = []

for tag in tags.keys():

temp_result.append(extract_data(tag, base_table))

print(temp_result)

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 = td.text.strip()

ratio = float(ratio[-1]) if ratio[-1] == "%" else float(

ratio) # 过滤调%符号并转换为浮点型

except Exception:

continue;

finally:

rows.append(ratio)

rows = rows[:20] # 只需要近20年的数据

rows = list(reversed(rows))

return rows

通过上面的代码,就把历届得分王的数据拔下来了,然后我们可以对数据进行排序了。

排序数据

这里要比较的数据项比较多,所以为了简便,就借助了pandas库的dataframe的排序函数进行排序,因为它在排序的时候,可以把索引也排序好,我就省了找球员名字的步骤。其实有更好的办法,比如直接自己写一个冒泡排序,但是,我懒。。。

排序代码比较简单,直接看:

def get_max(core_data):

"""

获取各项数据之最

:return:

"""

i = 1

for k, v in tags.items():

if k == "player_name_out":

continue

print(v)

df = DataFrame(core_data[i], index=core_data[0])

df.sort_values(by=0, inplace=True, ascending=False)

print(df.index[0])

print(df[0][0])

print("\n")

i += 1

主要是用球员名字做索引,然后将待排序的数据做列。然后排序就可以得到该数据项的最大值了。最后输出索引就知道是谁的数据了。

分析结果

NBA历史上的得分王无疑都是顶级巨星,比如迈克尔乔丹、科比布莱恩特。我们对得分王的印象往往是得分很高效,能carry比赛,很少关注其它数据。恰巧今天我想看看这么多得分王中,各项数据之最,所以就顺带输出了这篇文章。

通过上面的代码,控制台已经将近20年来得分王中各项数据之最的结果排序好并输出了,如下,看热闹的看官,请看:

出场次数

凯文-杜兰特

82.0

场均出场时间

阿伦-艾弗森

43.7

投篮命中率

沙奎尔-奥尼尔

57.4%

场均出手

阿伦-艾弗森

27.8

三分命中率

斯蒂芬-库里

45.4%

三分出手

詹姆斯-哈登

13.2

罚球命中率

斯蒂芬-库里

90.8%

场均罚球

詹姆斯-哈登

11.0

场均篮板

沙奎尔-奥尼尔

13.6

场均助攻

拉塞尔-威斯布鲁克

10.4

场均抢断

阿伦-艾弗森

2.8

场均得分

詹姆斯-哈登

36.1

综合分析:出场次数最多的是凯文杜兰特,居然是满的82场,这个真没想到,我以为会是詹姆斯。毕竟阿杜受过大伤。

场均出产时间达到了43.7分钟,铁人艾佛森被操的够狠的。得分王也不能这么用吧,一场比赛歇4分钟,严重透支。

投篮命中率最高的是奥尼尔。这个真没想到,不查数据还不知道奥尼尔拿过得分王。既然他是内线,命中率高很正常。

场均出手最多的是艾佛森,看来艾佛森的确受身高限制,虽然利用时间差可以获得出手空间,但毕竟矮,只能用高出手换高分。

三分命中率最高的是库里,这个可以预料。库日天那个赛季太爆炸了。

三分出手最多的是哈登,这个嘛,嗯...没预料到,看了下是本赛季出手的,看来后撤步已经魔怔了。

罚球命中率还是库里,这个也没有预料到,以为是很稳的哈登。

场均罚球是哈登,哈哈这个没意义,造犯规好手,人间流传着非常多的称号,比如景德镇王子啥的哈哈

场均篮板是奥尼尔。嗯史诗级的内线,没什么好讨论的。

场均助攻是威少,威少这几年的三双确实牛逼。助攻也是好看的很。

场均抢断是艾佛森,居然有2.8个我的天,不亏是艾佛森。

场均得分是哈登,这个赛季的36.1分已经超过科比的35.4了,确实不可思议。

如果你喜欢我的文章,可以关注我的主页或者公众号:

或者直接搜索公众号代码艺术客户端。

另外,请顺手点个赞。可怜哟。

python选手的最后得分_python戏说NBA--NBA近二十年得分王各项数据之最相关推荐

  1. python 获取li的内容_Python开发案例:爬取四川省统计局数据Matplotlib绘图

    开发环境 Windows 10 企业版 Pycharm 2019.01 EAP Community Edition Python 3.7 前言 四川省统计局提供了过去若干月份的统计数据.统计局提供的数 ...

  2. python win32ui选取文件夹_Python爬虫基础之认识html和学习数据提取(上)

    我:我已经学会了基本的python,接下来可以学什么鸭? 惨绿青年:接下来可以学习制作python爬虫了,但还是需要学习相关的知识. 我:什么知识鸭? 惨绿青年:网页的相关知识.我们看到的网页一般是h ...

  3. python选手的最后得分_用Python进行体育竞技分析(预测球队成绩)!身家都下注了!...

    今天我们用python进行体育竞技分析,预测球队成绩 一. 体育竞技分析的IPO模式 : 输入I(input):两个球员的能力值,模拟比赛的次数(其中,运动员的能力值,可以通过发球方赢得本回合的概率来 ...

  4. python如何修改excel数据库_python学习笔记-day7-2-【python从mysql数据库导数据到excel,读excel,修改excel】...

    这节说下如何用python把数据库里的数据导出到excel里,并如何读取excel, 修必excel等操作. 一.用python把数据库里的数据导出到excel里 1.导入如下的模块,没有的话需要安装 ...

  5. python如何连接自己电脑服务器_Python远程连接windows服务器并上传数据

    [芝麻IP代理]大数据时代下,我们对于Python的应用真的是淋漓尽致,第一次玩服务器,电脑端远程连接能连上,可SSH却始终不行,后来才发现,这根本不是一种东西,SSH得在服务器上搭建SSH seve ...

  6. python 定时自动爬取_python实现scrapy爬虫每天定时抓取数据的示例代码

    1. 前言. 1.1. 需求背景. 每天抓取的是同一份商品的数据,用来做趋势分析. 要求每天都需要抓一份,也仅限抓取一份数据. 但是整个爬取数据的过程在时间上并不确定,受本地网络,代理速度,抓取数据量 ...

  7. python绘制三维图散点图_python matplotlib模块——绘制三维图形、三维数据散点图...

    分类: 计算机视觉 python matplotlib模块,是扩展的MATLAB的一个绘图工具库.他可以绘制各种图形,可是最近最的一个小程序,得到一些三维的数据点图,就学习了下python中的matp ...

  8. python实时监控redis队列_Python的Flask框架应用调用Redis队列数据

    任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大 ...

  9. python爬取收费素材_Python爬虫练习:爬取素材网站数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 在工作中的电子文案.ppt,生活中的新闻.广告,都离不开大量的素材,而素材 ...

最新文章

  1. python中itertools模块介绍---03
  2. [NOIP2009] 最优贸易 (最短路,分层图)
  3. three.js写的游戏
  4. VNC CentOS
  5. Java中的数据结构
  6. 游戏开发概要策划书的内容
  7. QT编程中遇到的问题总结
  8. 大公司or小公司,我该怎么选?
  9. java中三种常见内存溢出错误的处理方法(good)
  10. ARM CORTEX M0 程序镜像和启动逻辑
  11. 极速安装JumpServer - 官方文档版
  12. 用200行Go代码写一个自己的区块链!
  13. git push 出现 you are not allowed to upload merges 错误提示
  14. 通信原理 概念 笔记
  15. 网络编程在线英英词典之历史查询模块(六)
  16. Qt5设置应用程序图标报错Debug Error 1
  17. JavaScript hash 与 history 实现客户端路由的原理
  18. 打不开wifi是怎么回事 笔记本wifi无法开启
  19. Three.js 开启带动画模型的动画
  20. Android客户端与PC服务器如何实现Socket通信

热门文章

  1. windows 定时任务:schtasks,定时关闭网易云音乐
  2. python通过指定网卡发包_Python选择网卡发包及接收数据包
  3. 【C++】Big Five: 构造函数、拷贝构造函数、拷贝赋值函数、移动构造函数、析构函数
  4. 支付宝提现免手续费的方法步骤
  5. HTML5 语音搜索
  6. 渐进式web应用程序_为什么渐进式Web应用程序很棒,以及如何构建一个
  7. ohmyzsh用在mysql_oh-my-zsh git 命令缩写 以及macbook使用感受
  8. 令人躁动一时且令人不安的TCP BBR算法
  9. C语言中常量后缀,u或U,l或L,f或F问题
  10. 实现两个分数的加减法编写一个C程序,