用python检索棒球数据
pybaseball的Python项目详细描述
棒球
1.0.2发布日期:2017年10月28日
pybarball
是一个用于棒球数据分析的python包。这个包会刮去basketball-reference.com和baseballsavant.com,所以您不必。到目前为止,该软件包主要执行四项任务:检索STATCAST数据、投球数据、击球数据和部门排名/球队记录。数据可以在单个音高级别获得,也可以在季节级别和自定义时间段进行聚合。
STATCAST:从美国职业棒球大联盟的STATCAST系统中提取高级指标
STATCAST数据包括俯仰水平特征,如感知速度(pv)、自旋速率(sr)、出口速度(ev)、俯仰x、y和z坐标等。函数statcast(start-dt,end-dt)
从baseballsavant.com提取此数据。
>>> from pybaseball import statcast
>>> data = statcast(start_dt='2017-06-24', end_dt='2017-06-27')
>>> data.head(2)
index pitch_type game_date release_speed release_pos_x release_pos_z
0 314 CU 2017-06-27 79.7 -1.3441 5.4075
1 332 FF 2017-06-27 98.1 -1.3547 5.4196
player_name batter pitcher events ... release_pos_y
0 Matt Bush 608070.0 456713.0 field_out ... 54.8585
1 Matt Bush 429665.0 456713.0 field_out ... 54.3470
estimated_ba_using_speedangle estimated_woba_using_speedangle woba_value
0 0.100 0.137 0.0
1 0.269 0.258 0.0
woba_denom babip_value iso_value launch_speed_angle at_bat_number pitch_number
0 1.0 0.0 0.0 3.0 64.0 1.0
1 1.0 0.0 0.0 3.0 63.0 3.0
[2 rows x 79 columns]
如果提供了start_dt
和end_dt
,它将返回这两个日期之间的所有statcast数据。如果没有,它将返回昨天的数据。参数team
还可以提供球队的城市缩写(即bos),以便仅获取包含该球队的比赛的观察结果。可选参数verbose
将控制库在提取数据时是否更新您的进度。
对于特定于玩家的STATCAST查询,使用STATCAST廑pull pitcher
和STATCAST廑batter
函数拉入投球或击球数据。它们采用与statcast函数相同的start_dt
和end_dt
参数,以及player_id
参数。这个id来自mlb advanced media,可以使用函数playerid\u lookup
获得。完整的示例:
>>> # Find Clayton Kershaw's player id
>>> from pybaseball import playerid_lookup
>>> from pybaseball import statcast_pitcher
>>> playerid_lookup('kershaw', 'clayton')
Gathering player lookup table. This may take a moment.
name_last name_first key_mlbam key_retro key_bbref key_fangraphs
0 kershaw clayton 477132 kersc001 kershcl01 2036
mlb_played_first mlb_played_last
0 2008.0 2017.0
>>> # His MLBAM ID is 477132, so we feed that as the player_id argument to the following function
>>> kershaw_stats = statcast_pitcher('2017-06-01', '2017-07-01', 477132)
>>> kershaw_stats.head(2)
pitch_type game_date release_speed release_pos_x release_pos_z
0 SL 2017-06-29 87.2 1.0865 6.4034
1 SL 2017-06-29 86.9 1.0195 6.4324
player_name batter pitcher events description
0 Clayton Kershaw 458913 477132 strikeout swinging_strike_blocked
1 Clayton Kershaw 458913 477132 null ball
... release_pos_y estimated_ba_using_speedangle
0 ... 54.5463 0.0
1 ... 54.7625 0.0
estimated_woba_using_speedangle woba_value woba_denom babip_value
0 0.0 0.00 1 0
1 0.0 null null null
iso_value launch_speed_angle at_bat_number pitch_number
0 0 null 57 6
1 null null 57 5
[2 rows x 78 columns]
投球统计:多赛季、单赛季或指定时间段内球员的投球统计
这个库包含两个获取俯仰数据的主要功能。对于全联盟赛季级的投球数据,请使用功能投球统计(赛季开始,赛季结束)
。这将在每个赛季为每位球员返回一行,并提供所有由Fangraphs提供的指标。
第二个是俯仰统计范围(起始点,结束点)。这允许您在特定的时间间隔内获取投球数据,允许您获得比fangraphs函数更细粒度的数据(例如,查看哪个投手的5月投球最强)。此查询从棒球引用中提取数据。请注意,所有日期都应采用yyyy-mm-dd
格式。
如果你更喜欢棒球参考资料而不是方格图,那么实际上还有第三个选项叫做投球统计(赛季)。这与Pitching_Stats
的工作原理相同,但从Baseball引用检索其数据。但是,通常不建议这样做,因为棒球参考查询当前每次请求只能检索一个赛季的数据。
>>> from pybaseball import pitching_stats
>>> data = pitching_stats(2012, 2016)
>>> data.head()
Season Name Team Age W L ERA WAR G GS
336 2015.0 Clayton Kershaw Dodgers 27.0 16.0 7.0 2.13 8.6 33.0 33.0
236 2014.0 Clayton Kershaw Dodgers 26.0 21.0 3.0 1.77 7.6 27.0 27.0
472 2014.0 Corey Kluber Indians 28.0 18.0 9.0 2.44 7.4 34.0 34.0
235 2015.0 Jake Arrieta Cubs 29.0 22.0 6.0 1.77 7.3 33.0 33.0
256 2013.0 Clayton Kershaw Dodgers 25.0 16.0 9.0 1.83 7.1 33.0 33.0
... wSL/C (pi) wXX/C (pi) O-Swing% (pi) Z-Swing% (pi)
336 ... 1.76 22.85 0.364 0.665
236 ... 2.62 NaN 0.371 0.670
472 ... 3.92 NaN 0.336 0.598
235 ... 2.42 NaN 0.329 0.618
256 ... 0.74 NaN 0.339 0.635
Swing% (pi) O-Contact% (pi) Z-Contact% (pi) Contact% (pi) Zone% (pi)
336 0.511 0.478 0.811 0.689 0.487
236 0.525 0.536 0.831 0.730 0.515
472 0.468 0.485 0.886 0.744 0.505
235 0.468 0.595 0.856 0.762 0.483
256 0.484 0.563 0.873 0.763 0.492
Pace (pi)
336 23.4
236 23.7
472 24.6
235 23.3
256 23.4
[5 rows x 299 columns]
击球统计:在赛季内或指定时间段内为球员击球统计
击球数据与投球数据类似。获取赛季级统计数据的函数调用是击球统计数据(开始赛季,结束赛季)
,对于特定的时间范围,它是击球统计数据范围(开始日期,结束日期)
。相当于赛季级数据的棒球参考是击球统计数据
>>> from pybaseball import batting_stats_range
>>> data = batting_stats_range('2017-05-01', '2017-05-08')
>>> data.head()
Name Age #days Lev Tm G PA AB R H ... HBP
1 Jose Abreu 30 69 MLB-AL Chicago 7 31 30 5 9 ... 0
2 Lane Adams 27 69 MLB-NL Atlanta 6 6 6 0 2 ... 0
3 Matt Adams 28 68 MLB-NL St. Louis 6 9 9 2 4 ... 0
4 Jim Adduci 32 69 MLB-AL Detroit 6 24 21 3 5 ... 0
5 Tim Adleman 29 72 MLB-NL Cincinnati 1 2 2 0 0 ... 0
SH SF GDP SB CS BA OBP SLG OPS
1 0 0 1 0 0 0.300 0.323 0.667 0.989
2 0 0 1 1 0 0.333 0.333 0.333 0.667
3 0 0 0 0 0 0.444 0.444 0.778 1.222
4 0 0 0 0 0 0.238 0.333 0.381 0.714
5 0 0 0 0 0 0.000 0.000 0.000 0.000
[5 rows x 27 columns]
每场比赛的结果和时间表
schedule_and_record
函数返回给定赛季球队的每场比赛结果,包括比赛日期、主客场球队、最终结果(w/l/tie)、得分、输赢/救球投手、出勤率和该日期所在的分区。函数的唯一两个参数是season
和team
,其中team是团队的缩写(即nyy代表纽约扬基队,sea代表西雅图水手队)。如果赛季参数设置为当前赛季,则查询返回过去比赛的结果以及那些尚未发生的事件的日程安排。
# Example: Let's take a look at the individual-game results of the 1927 Yankees
>>> from pybaseball import schedule_and_record
>>> data = schedule_and_record(1927, 'NYY')
>>> data.head()
Date Tm Home_Away Opp W/L R RA Inn W-L Rank \
1 Tuesday, Apr 12 NYY Home PHA W 8.0 3.0 9.0 1-0 1.0
2 Wednesday, Apr 13 NYY Home PHA W 10.0 4.0 9.0 2-0 1.0
3 Thursday, Apr 14 NYY Home PHA T 9.0 9.0 10.0 2-0 1.0
4 Friday, Apr 15 NYY Home PHA W 6.0 3.0 9.0 3-0 1.0
5 Saturday, Apr 16 NYY Home BOS W 5.0 2.0 9.0 4-0 1.0
GB Win Loss Save Time D/N Attendance Streak
1 Tied Hoyt Grove None 2:05 D 72000.0 1
2 up 0.5 Ruether Gray None 2:15 D 8000.0 2
3 Tied None None None 2:50 D 9000.0 2
4 Tied Pennock Ehmke None 2:27 D 16000.0 3
5 up 1.0 Shocker Ruffing None 2:05 D 25000.0 4
排名:最新或历史分区排名,w/l记录
Standings(Season)
函数给出给定季节的分区排名。如果选择本赛季,它将给出最新的一组排名。否则,它将给出所选季节的每个分区的季末排名。
此函数返回数据帧列表。每个数据帧都是MLB六个分区中的一个分区的列表。
>>> from pybaseball import standings
>>> data = standings(2016)[4]
>>> print(data)
Tm W L W-L% GB
1 Chicago Cubs 103 58 .640 --
2 St. Louis Cardinals 86 76 .531 17.5
3 Pittsburgh Pirates 78 83 .484 25.0
4 Milwaukee Brewers 73 89 .451 30.5
5 Cincinnati Reds 68 94 .420 35.5
完整文档
到目前为止,这提供了这个包可以做什么以及如何使用它的基本概述。有关可用函数及其参数的完整文档,请参阅文档文件夹。
那我该怎么办呢?
需要灵感吗?请参阅使用此软件包复制的经典棒球研究的一些示例,请参见此处的" rel="nofollow"
这个pacakge的灵感来源于bill petti的优秀r包baseballr,到目前为止,它还没有python等价物。我希望用这个图书馆来填补这个空白。
安装
要安装pybarball,只需运行
pip install pybaseball
或者,对于当前回购协议上的版本(有时可能更为最新):
git clone https://github.com/jldbc/pybaseball
cd pybaseball
python setup.py install
正在进行的工作:
向前看,我打算:
- 实施定制指标,如STATCAST边缘百分比、历史ELO评级、WOBA等。
- 确定这些查询失败的边缘情况(如果找到问题,请打开问题!)
- 添加更多示例
对贡献感兴趣?我在contribution.md中留下了一些想法。
依赖关系
此库取决于:熊猫、努比、BS4(靓汤)和请求。