用于访问实时曲棍球数据以帮助分析师和爱好者的库。

hockeydata的Python项目详细描述


曲棍球数据

增强分析能力

Build StatusPyPI version fury.ioPyPI statusLicense: MITPyPI pyversionsDownloadsDownloads

从NHL游戏收集实时数据的库和CLI工具。在

所有数据都可以通过pythonapi或命令行工具以相同的方式访问。在

鼓励捐款

功能

  • 为NHL游戏生成丰富的游戏数据。包括所有冰上选手, 事件的坐标、游戏状态以及标准元数据。在
  • 为游戏生成数据。在
  • 为计划范围创建游戏ID列表
  • 实时游戏抓取(开发中)

安装

与Python3.5+兼容。在

使用pip

python3 -m pip install hockeydata

或来源:

^{pr2}$

这将向您的系统添加一个新命令hockeydata。在

此工具是什么

这个工具是出于对NHL实时数据的可靠数据管道的需要而创建的 kind of提供了,但不是真的。从多个公共源中获取数据,检查错误,并在 可能。在

由于NHL中统计报告的动态性质,此工具中的数据可能丢失/不正确 输出。我写这篇文章时的哲学是不输出比输出错误好—因为 我希望下游应用程序能够相信我的输出是正确的,并且为了分析缺失的目的 数据点通常比错误的数据点好。在

解析错误会被记录下来,并且可以在事后由我或贡献者修复。在

游戏ID

NHL统计数据的关键是“gameid”,一个唯一标识每个游戏的ID。 它是一个10位数的数字代码,格式如下:

2019020565

此工具使用游戏ID获取特定游戏的数据。您可以使用list_gamespython函数或list-gamesCLI 获取游戏ID的命令

用法-库

假设你想写一个每天运行一次的脚本,它将找到在给定日期玩的所有游戏,并将每个游戏的所有逐局数据下载到一个带有游戏ID的CSV文件中

fromhockeydataimportget_game_shifts,get_season_play_by_play,get_play_by_plays,list_games# get a full year of games idgame_list=list_games('2018-01-01','2019-01-01')# get play by play data for a gamedf=get_play_by_plays('2018021000')# get shift data for a gamedf=get_game_shifts('2018021000')# get play by play data for an entire season. WARNING this will take a while...approx. 20 seconds per game on my machine.df=get_season_play_by_play(2017)
格式化程序

输出包将数据格式化为几种不同的格式,例如CSV、JSON或a 基于文本的表格。每个格式化程序都有一个dumpdumps函数,其工作原理与Python的json模块类似。 如果要将数据保存为JSON,例如:

fromhockeydataimportlist_gamesfromhockeydata.outputimportjsonplays=list_games('2018021000')withopen('file.json','w')asf:json.dump(plays,f)

用法-CLI

Usage: hockeydata [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  list-games  Gets game_ids for a date range
  scrape      Scrape a game/list for all of its live data.
  shifts      Scrape a game for its shift data.

使用--output-format-o以您选择的格式格式化数据:csv、json、pretty(这是一个很好的表), 或文本(这是一个基本表)。在内部,数据通常作为数据帧收集,因此您可以添加额外的 输出格式使用Pandas的漂亮格式功能。在

nhl list-plays 2019020406 --output-format csv > 2019020406.csv  # create a new file
nhl list-plays 2019020406 --output-format csv >> plays.csv  # append result to plays.csv
列出游戏
Usage: hockeydata list-games [OPTIONS][START_DATE][END_DATE]

  Gets game_ids for a date range

Options:
  -o, --output-format [text|csv|json|pretty]
  --help                          Show this message and exit.
游戏信息
hockeydata game-info --help
Usage: hockeydata game-info [OPTIONS][GAME_IDS]...

  Get high-level data about a game

Options:
  -o, --output-format [text|csv|json|pretty]
  --help                          Show this message and exit.
刮伤
$ hockeydata scrape --help
Usage: hockeydata scrape [OPTIONS][GAME_IDS]...

  Scrape a game/list for all of its live data.

Options:
  -o, --output-format [text|csv|json|pretty]
  --help                          Show this message and exit.
轮班
hockeydata shifts --help
Usage: hockeydata shifts [OPTIONS][GAME_IDS]...

  Scrape a game for its shift data.

Options:
  -o, --output-format [text|csv|json|pretty]
  --help                          Show this message and exit.

格式化程序

当前可用的格式化程序是csvjsonpretty和{}。在

使用text输出格式,我们得到一个打印得很好的表,其中包含以下数据:

        GAME_ID  PERIOD TEAM            PLAYER  PLAYER_ID   START     END  DURATION
0    2018021000       1  CHI      DUNCAN KEITH    8470281     0.0    49.0      49.0
1    2018021000       1  L.A      DION PHANEUF    8470602     0.0    47.0      47.0
2    2018021000       1  L.A      DUSTIN BROWN    8470606     0.0    47.0      47.0
3    2018021000       1  CHI    BRENT SEABROOK    8470607     0.0    49.0      49.0
...
763  2018021000       3  L.A          MATT ROY    8478911  1190.0  1200.0      10.0

使用csv格式化程序,我们可以得到类似csv的输出:

,GAME_ID,PERIOD,TEAM,PLAYER,PLAYER_ID,START,END,DURATION
0,2018021000,1,CHI,DUNCAN KEITH,8470281,0.0,49.0,49.0
1,2018021000,1,L.A,DION PHANEUF,8470602,0.0,47.0,47.0
2,2018021000,1,L.A,DUSTIN BROWN,8470606,0.0,47.0,47.0
3,2018021000,1,CHI,BRENT SEABROOK,8470607,0.0,49.0,49.0
...
763,2018021000,3,L.A,MATT ROY,8478911,1190.0,1200.0,10.0

使用json格式化程序,我们得到类似json的输出:

[{"GAME_ID":"2018021000","PERIOD":1,"TEAM":"CHI","PLAYER":"DUNCAN KEITH","PLAYER_ID":8470281,"START":0.0,"END":49.0,"DURATION":49.0},{"GAME_ID":"2018021000","PERIOD":1,"TEAM":"L.A","PLAYER":"DION PHANEUF","PLAYER_ID":8470602,"START":0.0,"END":47.0,"DURATION":47.0},{"GAME_ID":"2018021000","PERIOD":1,"TEAM":"L.A","PLAYER":"DUSTIN BROWN","PLAYER_ID":8470606,"START":0.0,"END":47.0,"DURATION":47.0},...]

使用pretty格式化程序,我们得到一个漂亮的表:

+-----+------------+----------+--------+------------------+-------------+---------+-------+------------+
|     |    GAME_ID |   PERIOD | TEAM   | PLAYER           |   PLAYER_ID |   START |   END |   DURATION |
|-----+------------+----------+--------+------------------+-------------+---------+-------+------------|
|   0 | 2018021000 |        1 | CHI    | DUNCAN KEITH     |     8470281 |       0 |    49 |         49 |
|   1 | 2018021000 |        1 | L.A    | DION PHANEUF     |     8470602 |       0 |    47 |         47 |
|   2 | 2018021000 |        1 | L.A    | DUSTIN BROWN     |     8470606 |       0 |    47 |         47 |
...
| 763 | 2018021000 |        3 | L.A    | MATT ROY         |     8478911 |    1190 |  1200 |         10 |
+-----+------------+----------+--------+------------------+-------------+---------+-------+------------+

确认

这些项目极大地促进了这一工具的发展:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java重写父类中的特定行   java Apache Commons CLI订购帮助选项?   java如何将数据添加到网格视图   java如何在Apache Camel批处理后移动文件?   java如何为日期范围的between子句编写hql查询?   雅加达ee开始Java编程,我应该从哪里开始?   排序Java8+流:检查我的objectinstances的两个字段的列表顺序是否正确   java如何将json转换为Map<String,Object>确保整数为整数   java不能在Spring数据JPA批处理过程中创建TransactionException   java损坏的PDF文件从FTP下载到使用Apache Common Net的设备   java无法使用Spring批处理和Wso2为XML架构命名空间找到Spring NamespaceHandler   java Android ImageView未显示在SherlockFragment中   Maven在构建时出错=无法识别Java路径   java如何使用批处理文件调用关闭处理程序?   java admob广告横幅重叠我的游戏屏幕安卓