データサイエンスをLeague of Legendで勉強しよう
前回までの記事でなんとなくRiotAPIで得られるデータがどんなものか分かってきたので、 このデータをいじりながらデータサイエンスに入門してみます。
はじめに
本記事ではRiotAPIで得られた各対戦データをみて、勝った試合と負けた試合でどこか違いがないかを探ります。
コード
APIでデータをとってくる方法については、前回の記事sorivid.hatenablog.comを参照してください。
#前回に加え、以下のモジュールをインポートします。 from time import sleep #ゲームのマッチリスト情報(自分のロールや、何のチャンプ使ったかとか。100戦分がリストになってます。)を手に入れてみます。 #DoAPIは、APIを使って得られるデータを返す関数です。前回までの記事を参照してください。 #accountIDも、API_KEYも前回までの記事を参照してください。 HundredMatchList = DoAPI(uri + "/lol/match/v3/matchlists/by-account/{0}?api_key={1}".format(accountID, API_KEY) ) # アッシュを使った試合のgameIDをリストにする。(アッシュで試合した数が半分以上のため。) gameIds = [] for match in HundredMatchList['matches']: if match['champion'] == 22: # アッシュのchampionIdは22 gameIds.append(match['gameId'])
これで、対象となる対戦のマッチIDをリストにすることができました。 APIを使って、このマッチID一つずつに対して詳細データ(stats)を受け取ります。 その詳細データをまたまたリストにします。
statsList = [] for ID in gameIds: OneMatch = DoAPI(uri+'/lol/match/v3/matches/{0}?api_key={1}'.format(ID,API_KEY) ) for i in range(10): if OneMatch['participants'][i]['championId'] == 22: statsList.append(OneMatch['participants'][i]['stats']) sleep(0.5) # 各APIには、一定時間にリクエストできる回数が決まっているので、sleepを入れてる。
statsListには、(今回の場合)68戦分のデータが詰まっています。それぞれに勝敗、visionScore、ワードを置いた数など様々な統計データが記録されています(たぶん試合後に見れる戦績に載っている項目)。
データが準備できたところで、グラフを見てキル数が勝敗と関係しているか確認してみます。
win_element = [] lose_element = [] for i in range(len(statsList)): if statsList[i]['win'] == True: win_element.append(statsList[i]['kills']) else: lose_element.append(statsList[i]['kills']) #ヒストグラムで描画します。 fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.hist(win_element, normed = True , alpha = 0.5, label = 'win', bins = 10) ax.hist(lose_element, normed = True, alpha = 0.5, label = 'lose', bins = 10) ax.legend() ax.set_title('The Amount of Kill')
結果
勝った試合の方が負けた方より、キル数のヒストグラムの中心が右寄りですね。
勝った試合ではキル数が多い傾向にあるといえます。
では、totalDamageDealtToChampionsというデータではどうでしょうか?多分トータルでチャンピオンに与えたダメージですね。
チャンピオンにダメージ与えてるほど勝率は上がりそうなものですがどうでしょうか。。。
なんかあまりヒストグラムの中心に差はないように見えますね。ダメージ与えてた方が勝てそうなものですが、あまり関係ないようです。
こんな感じで自分の勝ち負けはどこに起因しているのかを、データサイエンスを勉強しながらこのブログでさらせていけたらいいなと思っています。