前言
作为一个看了多年篮球的 NBA球迷,一直在想用 python 和篮球一起来写点什么
加上最近在学习 pyecharts ,所以就有了下面这篇文章:
根据输入的球队和球员名字,自动生成该球员职业生涯数据曲线图!
✨ 效果
火箭哈登
勇士格林
我只挑了两个球员,感兴趣的朋友可以在后台回复 “nba” 获取源码。
输入自己喜爱的球队和球员名称即可
通过这些曲线图,球星的职业生涯的数据一目了然:
不得不说登哥每年数据都在上升
而勇士的格林自从拿了大合同,数据全面下滑,哈哈
怎么做的?
1.首先需要了解 pyecharts 的折线图用法
2.基本的爬虫
因为坚持原创,精力也有限,所以程序暂时只支持湖人,火箭,勇士这三支比较热门的球队
如果对其他球队也有需求,可以联系我添加进去。
Line:折线/面积图
折线图是用折线将各个数据点标志连接起来的图表,用于展现数据的变化趋势。
折线/面积图对应的模块是 Line
可以配置折线的形式,颜色,标注最大值,最小值等
具体请看下面的 add_yaxis 的详细说明
Line 模块对应的函数使用说明:
1def add_yaxis( 2 # 系列名称,用于 tooltip 的显示,legend 的图例筛选。 3 series_name: str, 4 5 # 系列数据 6 y_axis: Sequence, 7 8 # 是否选中图例 9 is_selected: bool = True, 10 11 # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。 12 xaxis_index: Optional[Numeric] = None, 13 14 # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。 15 yaxis_index: Optional[Numeric] = None, 16 17 # 系列 label 颜色 18 color: Optional[str] = None, 19 20 # 是否显示 symbol, 如果 false 则只有在 tooltip hover 的时候显示。 21 is_symbol_show: bool = True, 22 23 # 标记的图形。 24 # ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 25 # 'diamond', 'pin', 'arrow', 'none' 26 # 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。 27 symbol: Optional[str] = None, 28 29 # 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高, 30 # 例如 [20, 10] 表示标记宽为 20,高为 10。 31 symbol_size: Union[Numeric, List] = 4, 32 33 # 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。 34 stack: Optional[str] = None, 35 36 # 是否平滑曲线 37 is_smooth: bool = False, 38 39 # 是否显示成阶梯图 40 is_step: bool = False, 41 42 # 标记点配置项,参考 `series_options.MarkPointOpts` 43 markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None, 44 45 # 标记线配置项,参考 `series_options.MarkLineOpts` 46 markline_opts: Union[opts.MarkLineOpts, dict, None] = None, 47 48 # 提示框组件配置项,参考 `series_options.TooltipOpts` 49 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None, 50 51 # 标签配置项,参考 `series_options.LabelOpts` 52 label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(), 53 54 # 线样式配置项,参考 `series_options.LineStyleOpts` 55 linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(), 56 57 # 填充区域配置项,参考 `series_options.AreaStyleOpts` 58 areastyle_opts: Union[opts.AreaStyleOpts, dict] = opts.AreaStyleOpts(), 59 60 # 图元样式配置项,参考 `series_options.ItemStyleOpts` 61 itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None, 62) 63
示例代码:
1# coding: utf-8 2from pyecharts import options as opts 3from example.commons import Faker 4from pyecharts.charts import Line 5 6 7def line_base() -> Line: 8 c = ( 9 Line() 10 .add_xaxis(Faker.choose()) 11 .add_yaxis("商家A", Faker.values(), color="blue", is_smooth=True, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")])) 12 .add_yaxis("商家B", Faker.values(), is_smooth=True, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")])) 13 .set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例")) 14 ) 15 return c 16 17 18if __name__ == "__main__": 19 line_base().render("line.html") 20 pass
运行之后在本地目录,会生成一个 line.html 的文件
效果图如下:
折线图
程序用法
在输入球队和球员的时候,请使用空格分开
另因为每个人对 NBA 球员的叫法可能会不一样,所以做了一下统一,输入的时候请注意!
比如, 以下火箭球员的名称集合
1rocket_mapping = { 2 "保罗": "克里斯-保罗", 3 "哈登": "詹姆斯-哈登", 4 "卡佩拉": "卡佩拉克林特-卡佩拉", 5 "戈登": "埃里克-戈登", 6 "香珀特": "伊曼-香珀特", 7 "塔克": "PJ-塔克", 8 "内内": "内内", 9 "格林": "杰拉德-格林", 10 "法里埃德": "肯尼思-法里德", 11 "小李": "奥斯汀-里弗斯", 12 "豪斯": "丹纽尔-豪斯", 13 "克拉克": "加里-克拉克", 14 "杜瓦尔": "特雷旺-杜瓦尔", 15}
后台回复 “nba” 获取该程序