棒球数据与Python分析
pybbda的Python项目详细描述
皮布达
pybbda
是的包
Python棒球数据与分析。在
数据
pybbda
旨在为
从各种来源访问棒球数据。
数据公开为pandas
DataFrames
它目前支持的数据源有:
- 在
拉曼数据
在 - 在
棒球参考战
在 - 在
Fangraphs排行榜和公园因素
在 - 在
追溯事件数据
在 - 在
Statcast逐节距数据
在
分析
pybbda
还提供分析工具。在
目前支持:
- 在
马塞尔投影
在 - 在
击球轨迹
在 - 在
基于马尔可夫链的运行期望
在
计划在将来的版本中提供以下内容:
- 在
模拟
在 - 在
还有更多。。。!在
在
安装
此软件包在PyPI上可用,因此您可以使用
pip
$ pip install -U pybbda
或者您可以安装最新的主分支
直接从github repo使用
pip
或者下载源代码
$ git clone git@github.com:bdilday/pybbda.git
$ cd pybbda
$ pip install .
要求
此包显式
支持Python 3.6
和{Python 3.8
,但这不是保证。
它显式地不支持任何版本
在Python 3.6
之前,包括Python 2.7
。在
安装数据
这个包裹没有任何数据。相反,它提供了工具 从各种来源获取和存储数据。在
要安装数据,您可以使用update
工具中的pybbda.data.tools
子模块。在
例如
$ python -m pybbda.data.tools.update -h usage: update.py [-h][--data-root DATA_ROOT] --data-source {Lahman,BaseballReference,Fangraphs,retrosheet,all}[--make-dirs][--overwrite][--min-year MIN_YEAR][--max-year MAX_YEAR][--num-threads NUM_THREADS] optional arguments: -h, --help show this help message and exit --data-root DATA_ROOT Root directory for data storage --data-source {Lahman,BaseballReference,Fangraphs,retrosheet,all} Update source --make-dirs Make root dir if does not exist --overwrite Overwrite files if they exist --min-year MIN_YEAR Min year to download --max-year MAX_YEAR Max year to download --num-threads NUM_THREADS Number of threads to use for downloads
数据将下载到--data-root
,默认为
PYBBDA_DATA_ROOT
详细说明是provided in the documentation
示例用法
安装部分或全部数据后,可以开始使用 包裹。在
下面是访问Lahman数据的一个例子。 更多examples are included in the documentation
拉曼数据
>>>frompybbda.dataimportLahmanData>>>lahman_data=LahmanData()>>>batting_df=lahman_data.battingINFO:pybbda.data.sources.lahman.data:data:searchingforfile/home/bdilday/.pybbda/data/Lahman/Batting.csv>>>batting_df.head()playerIDyearIDstintteamIDlgIDGABRH2B3BHRRBISBCSBBSOIBBHBPSHSFGIDP0abercda0118711TRONaN14000000.00.00.000.0NaNNaNNaNNaN0.01addybo0118711RC1NaN25118303260013.08.01.040.0NaNNaNNaNNaN0.02allisar0118711CL1NaN29137284045019.03.01.025.0NaNNaNNaNNaN1.03allisdo0118711WS3NaN271332844102227.01.01.002.0NaNNaNNaNNaN0.04ansonca0118711RC1NaN251202939113016.06.02.021.0NaNNaNNaNNaN0.0>>>batting_df.groupby("playerID").HR.sum().sort_values(ascending=False)playerIDbondsba01762aaronha01755ruthba01714rodrial01696mayswi01660...mcconra010mccolal010mccluse010mcclula010aardsda010Name:HR,Length:19689,dtype:int64
CLI工具
运行预期
有一个cli工具用于计算运行预期 马尔可夫链。在
$ python -m pybbda.analysis.run_expectancy.markov.cli --help
这个马尔可夫链使用了 9个击球手,而不是假设每个击球手都有相同的特征。 也可以指定运行概率,尽管它们适用于 所有击球手都一样。在
你可以使用一系列的
概率,或参考球员赛季
格式{playerID}_{season}
,其中playerID是
拉赫曼的身份证和季节是4位数的一年。例如,到
参考Rickey Henderson的1982赛季,使用henderi01_1982
。在
配置列表是通过在列表槽后加上 5个概率,或一个球员赛季id。0号线槽是一个代码 把所有九个击球手都赋给这个值。任何其他特定插槽 将按说明填写。在
默认情况下,要建模的输出数为3。可以通过设置
环境变量PYBBDA_MAX_OUTS
。在
Example:对所有9个插槽使用默认的概率集,而不使用额外的基数
$ python -m pybbda.analysis.run_expectancy.markov.cli -b 00.08 0.15 0.05 0.005 0.03 --running-probs 0000 mean score per 27outs=3.5227 std. score per 27outs=2.8009
Example:对所有9个插槽使用默认概率集,并使用默认概率获取额外基数
$ python -m pybbda.analysis.run_expectancy.markov.cli -b 00.08 0.15 0.05 0.005 0.03 mean score per 27outs=4.2242 std. score per 27outs=3.0161
Example:对所有9个插槽使用默认的概率集,但是 Rickey Henderson 1982年击球领先(使用27次出局,而不是3次)
$ PYBBDA_MAX_OUTS=27 python -m pybbda.analysis.run_expectancy.markov.cli -b 00.08 0.15 0.05 0.005 0.03 -i 1 henderi01_1982 WARNING:pybbda:__init__:Environment variable PYBBDA_DATA_ROOT is not set, defaulting to /home/bdilday/github/pybbda/pybbda/data/assets INFO:pybbda.data.sources.lahman.data:data:searching for file /home/bdilday/github/pybbda/pybbda/data/assets/Lahman/Batting.csv mean score per 27outs=4.3628 std. score per 27outs=3.0999
Example:对所有9个插槽使用默认的概率集,但是 里基·亨德森1982年击球领先,贝比鲁斯1927年击球清理(使用27次出局,而不是3次)
$ PYBBDA_MAX_OUTS=27 python -m pybbda.analysis.run_expectancy.markov.cli -b 00.08 0.15 0.05 0.005 0.03 -i 1 henderi01_1982 -i 4 ruthba01_1927 WARNING:pybbda:__init__:Environment variable PYBBDA_DATA_ROOT is not set, defaulting to /home/bdilday/github/pybbda/pybbda/data/assets INFO:pybbda.data.sources.lahman.data:data:searching for file /home/bdilday/github/pybbda/pybbda/data/assets/Lahman/Batting.csv mean score per 27outs=5.1420 std. score per 27outs=3.3996
贡献
欢迎社会各界捐款。 参见contributing guide。在
许可证
- 项目
标签: