実現したいこと
エラーを直し、実行できるようにしたい
前提
サッカーのオープンデータとしてStatsBombが提供しているものを扱っている。そのデータをダウンロードして分析しようとしている。
発生している問題・エラーメッセージ
/usr/local/lib/python3.10/dist-packages/kloppy/infra/datasets/core/loading.py in load(dataset_name, options, **dataset_kwargs) 71 deserializer = builder.deserializer_cls(**options) 72 dataset = deserializer.deserialize( ---> 73 inputs=builder.inputs_cls(**file_handlers) 74 ) 75 finally: TypeError: StatsBombInputs.__new__() missing 1 required positional argument: 'three_sixty_data
該当のソースコード
python
1!pip install statsbomb 2!pip install kloppy==3.12.0 3 4import requests 5import math 6import itertools 7 8import numpy as np 9import pandas as pd 10 11import statsbomb as sb 12from kloppy import datasets 13 14BASE_URL = 'https://raw.githubusercontent.com/statsbomb/open-data/master/data' 15 16comps_df = sb.Competitions().get_dataframe() 17 18def get_matches_df(competition_id, season_id=None, comps_df=None): 19 """試合情報を返すメソッド 20 Args: 21 - competition_id(int) : 大会id 22 - season_id(int, default=None) : シーズンid 23 - comps_df(pd.DataFrame, default=None) : 大会情報 24 Returns: 25 pd.DataFrame : 試合情報 26 """ 27 # if文、season_idがあれば、シーズンを指定してjson形式のデータをdataframe形式に変換する 28 # season_idが指定されなければ、大会情報からseason_idをfor loopで回しながらダウンロード、変換する 29 if season_id: 30 matches_df = pd.DataFrame(requests.get(f'{BASE_URL}/matches/{competition_id}/{season_id}.json').json()) 31 else: 32 # リストの内包表記 33 matches_df = pd.concat([pd.DataFrame(requests.get(f'{BASE_URL}/matches/{competition_id}/{season_id}.json').json()) for season_id in comps_df[comps_df.competition_id==competition_id].season_id.tolist()]) 34 35 # ここでのmatches_dfは、エクセルで言うセルの中に辞書形式(dict)で値が入っていて分析しづらいので、それらをカラムに分解する 36 c_list = ['competition', 'season', 'home_team', 'away_team', 'stadium', 'competition_stage'] 37 if competition_id == 53: 38 c_list.remove('stadium') 39 for c in c_list: 40 if c in ['stadium', 'competition_stage']: 41 key_list = ['id', 'name'] 42 c_fixed_list = [f'{c}_{k}' for k in key_list] 43 44 else: 45 key_list = [f'{c}_{k}' for k in ['id', 'name']] 46 c_fixed_list = key_list 47 48 for k, c_fixed in zip(key_list, c_fixed_list): 49 matches_df[c_fixed] = matches_df[c].apply(lambda x: x[k] if type(x)==dict else None) 50 51 # 必要なカラムのみを残して最終形とする 52 matches_df = matches_df.drop(c_list+['metadata','referee'], axis=1).sort_values('match_date').reset_index(drop=True) 53 54 return matches_df 55 56competition_id = 53 57season_id = 106 58 59get_matches_df(competition_id=competition_id, season_id=season_id, comps_df=comps_df) 60 61match_id = 3835319 62dataset = datasets.load(dataset_name='statsbomb', match_id=match_id)
試したこと
loadin.pyを見てみたが、StatsBombInputsのクラスがなかった。また、kloppyのgithubを確認してみたが見つけられなかった。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください
kloppy のサイトにある Statsbomb の使用例とは使い方が異なるようですが、コードは何を参考にしましたか?
https://kloppy.pysport.org/getting-started/statsbomb/
また、「該当のソースコード」は、エラーが出たところを示すのではなく、全体を示す方がよいです。
まだコードの方は見てないのですが、参照しているページでは anaconda3-5.3.0 を使っているようなので
バージョンが古すぎて現行とは使い方が異なっているのかもしれません。
新しめのページを参考にするのがよいと思います。

回答1件
あなたの回答
tips
プレビュー