pythonでLeague of Legendsの統計データを表示してみる【その2】
チームごとのゴールドの変遷を見る
前回に引き続き、今度はゴールドの時系列データを表示してみます。 今回表示するものは、OPGG内でTeamAnalysisから見れるデータです。スクショしてきました。
流れ
ほとんど前回と変わりません。
- 自身のサモナーネームを使いユーザ情報を取得
- 100戦分のリストを取得して、データを表示したい対戦のID(マッチID)を取得
- 対戦のタイムラインを取得し、各チームのゴールド変遷をグラフ化
ユーザ情報の取得
Riotの開発者ページでAPI_KEYを取得します。
APIを使うというとなんか難しそうですが、ただWeb上にあるデータをURLを使って保存するだけです。(たぶん)
RiotのAPIではJSONデータを使用しているので、jsonモジュールを使い、Pythonの組み込み型であるディクショナリ型に変換します。これでデータの操作が簡単になりました。
from urllib import request import matplotlib.pyplot as plt import json %matplotlib inline #APIKEYと、APIのURL共通部分の準備 API_KEY = '????-??????-????-????-????-????' name = "じぶんのなまえ" region = "jp1" uri = "https://{0}.api.riotgames.com".format(region) #APIを指定するとreadして辞書型で返してくれる関数 def DoAPI(API_URI): return json.loads(request.urlopen(API_URI).read()) #requestモジュールでファイル風オブジェクトとやらを返し、それをjsonモジュールで辞書型として返してあげる。 #ユーザ情報を取得 UserInfo = DoAPI(uri + "/lol/summoner/v3/summoners/by-name/{0}?api_key={1}".format(name, API_KEY))
これでユーザ情報を取得できました。ユーザ情報から得られるアカウントIDは、ほかのAPIを使用するために必要になってくるので、保存しておきます。
マッチIDの取得
次はデータを表示したい対戦のマッチIDを取得します。
#ゲームのマッチリスト情報(100戦分のリスト)を手に入れる。 accountID = UserInfo['accountId'] #自分のユーザー情報からアカウントIDを手に入れる。 HundredMatchList = DoAPI(uri + "/lol/match/v3/matchlists/by-account/{0}?api_key={1}".format(accountID, API_KEY) ) #マッチIDを取得する TargetGameId = HundredMatchList['matches'][0]['gameId']
関心のある対戦が100戦分リストのうちの何戦目かを指定しますが、上記ではHunderedMatchList['matches'][0]['gameId']となっており、0戦目のマッチIDを取得しています。(インデックスは0~99)
ゴールド変遷をグラフ化
#対戦のタイムラインを取得 MatchTimeLine = DoAPI(uri + '/lol/match/v3/timelines/by-match/{0}?api_key={1}'.format(TargetGameId,API_KEY) ) #ゴールドの変遷をリストのリスト[f:id:Sorivid:20180121201402p:plain]で返す def getTotalGoldTimeLine(TimeLine): TotalGoldList = [[],[]] for i in range(len(TimeLine['frames'])): OneTotalGold = 0 for key in TimeLine['frames'][i]['participantFrames']: if int(key) < 6: OneTotalGold += TimeLine['frames'][i]['participantFrames'][key]['totalGold'] TotalGoldList[0] += [OneTotalGold] OneTotalGold = 0 for key in TimeLine['frames'][i]['participantFrames']: if int(key) >5: OneTotalGold += TimeLine['frames'][i]['participantFrames'][key]['totalGold'] TotalGoldList[1] += [OneTotalGold] return TotalGoldList GoldTimeLine = getTotalGoldTimeLine(MatchTimeLine) #ゴールドの変遷をプロット plt.plot(GoldTimeLine[0]) plt.plot(GoldTimeLine[1])
OPGGからスクショした画像と全く同じゴールドの変遷が見れますね。
また、OPGGでゴールドの変遷をみると1分単位でしかデータの変遷を追えないのですが、今回実際にデータを見てそもそもAPIで取得できるデータが1分間隔なのだということを知りました。
次はデータ分析的なことができたらいいなと思います。