###プログラムの概要
スマホゲームのAPIを用いて、対戦成績に関するデータを収集し、dataframeに入れます。
※ここでは、定期的に自動でプログラムを実行する部分は未設計です。
具体的には
①空のデータフレームを作る
②必要な情報を取得する
③②を用いてSeriesにまとめる
④③を空のフレームに追加
を行おうとしています。
分からないこと
関数を定期的に実行し、DateFrameにデータを蓄積するコードの書き方。
特に、1度目実行したのち一定時間後再度実行した際に、またデータフレームが空の状態になってしまっているため、データが蓄積できていません。
※コードの書き方にエラーがでているわけではありません。
実際のコード
python3.72
1def selfdeck_list(name): 2 3 columns1=["type","my","opponent","result","time"] # ①の部分 4 df = pd.DataFrame(columns=columns1) 5 6 ba = battle_info(name) # ここから②の部分 7 datalist = [] 8 for newnum in range(0,25): 9 10 mydecklist = [ ba[decknum]["team"][0]["cards"][numindeck]["name"] for decknum in range(0,25) for numindeck in range(0,8) ] 11 opodecklist= [ ba[decknum]["opponent"][0]["cards"][numindeck]["name"] for decknum in range(0,25) for numindeck in range(0,8) ] 12 decktype = [ ba[decknum]["type"] for decknum in range(0,25)] 13 mycrowns = [ ba[decknum]["team"][0]["crowns"] for decknum in range(0,25)] 14 opocrowns= [ ba[decknum]["opponent"][0]["crowns"] for decknum in range(0,25)] 15 time = [ ba[decknum]["battleTime"] for decknum in range(0,25)] 16 17 a = decktype[int(newnum)] 18 b = tuple(mydecklist[int(newnum*8):int(newnum*8+8)]) 19 c = tuple(opodecklist[int(newnum*8):int(newnum*8+8)]) 20 if mycrowns[int(newnum)] > opocrowns[int(newnum)]: 21 winorlose = "win" 22 elif mycrowns[int(newnum)] < opocrowns[int(newnum)]: 23 winorlose = "lose" 24 else: 25 winorlose = "draw" 26 d = winorlose 27 e = time[int(newnum)][:15] 28 data = [a,b,c,d,e] 29 datalist.append(data) 30 record = pd.Series(datalist) # ③の部分 31 df = df.append(record, ignore_index=True) # ④の部分 32 33
コード全体
Python
1 2import json 3import requests 4import pandas as pd 5import numpy as np 6 7access_key = "" 8 9URL = 'https://api.clashroyale.com/v1' 10 11#選手名とパスを結合する辞書を作成 12dic={"みかん坊や":"%232VYJYJ09","天GOD":"%232G0QUGLU","kota":"%23889VQ8JP","RAD":"%238QRCJQ9Y","ライキジョーンズ":"%2398Q8LPQ9", 13 "Jack":"%23YRVL9U98","きたっしゃん":"%23P8RLYOV9","だに":"%238LJVVGJP","けんつめし":"%23PQRR0CG9", 14 "Rorapolon":"%239JPRJ9R","焼き鳥":"%232Y8GL0V2","ユイヒイロ":"%23R2GRQPCJ","Blossom":"%238Q20LRC8Y","kk19212":"%23RU2CC2LG", 15 "れいや":"%232LRVG0C8","HANE×HANE":"%238Y088VU8U","Lewis":"%238Q020U0U","ピラメキ":"%232YGQGY92V","天ぷら":"%238Q2V2CGR","Scott":"%232Q98GVP9V"} 16 17# 選手名を含むリストを作成 18list= ["みかん坊や","天GOD","kota","RAD","ライキジョーンズ", 19 "Jack","きたっしゃん","だに","けんつめし", 20 "Rorapolon","焼き鳥","ユイヒイロ","Blossom","kk19212", 21 "れいや","HANE×HANE","Lewis","ピラメキ","天ぷら","Scott"] 22 23 24def battle_info(name): 25 target_api = URL + "/players/" 26 playerTag = dic[name] 27 url = target_api+playerTag+"/battlelog" 28 headers = { 29 "content-type": "application/json; charset=utf-8", 30 "cache-control": "max-age=60", 31 "authorization": "Bearer %s" % access_key} 32 r = requests.get(url,headers=headers) 33 data = r.json() 34 return data 35 36__name__ == '__battle_info__' 37 38 39 40 41 42def selfdeck_list(name): 43 44 columns1=["type","my","opponent","result","time"] 45 df = pd.DataFrame(columns=columns1) 46 47 ba = battle_info(name) 48 datalist = [] 49 for newnum in range(0,25): 50 51 mydecklist = [ ba[decknum]["team"][0]["cards"][numindeck]["name"] for decknum in range(0,25) for numindeck in range(0,8) ] 52 opodecklist= [ ba[decknum]["opponent"][0]["cards"][numindeck]["name"] for decknum in range(0,25) for numindeck in range(0,8) ] 53 decktype = [ ba[decknum]["type"] for decknum in range(0,25)] 54 mycrowns = [ ba[decknum]["team"][0]["crowns"] for decknum in range(0,25)] 55 opocrowns= [ ba[decknum]["opponent"][0]["crowns"] for decknum in range(0,25)] 56 time = [ ba[decknum]["battleTime"] for decknum in range(0,25)] 57 58 a = decktype[int(newnum)] 59 b = tuple(mydecklist[int(newnum*8):int(newnum*8+8)]) 60 c = tuple(opodecklist[int(newnum*8):int(newnum*8+8)]) 61 if mycrowns[int(newnum)] > opocrowns[int(newnum)]: 62 winorlose = "win" 63 elif mycrowns[int(newnum)] < opocrowns[int(newnum)]: 64 winorlose = "lose" 65 else: 66 winorlose = "draw" 67 d = winorlose 68 e = time[int(newnum)][:15] 69 data = [a,b,c,d,e] 70 datalist.append(data) 71 record = pd.Series(datalist) 72 df = df.append(record, ignore_index=True) 73 74 print(df) 75 76 77__name__ == '__selfdeck_list__' 78 79selfdeck_list("Scott") 80
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/18 12:12 編集
2019/05/18 12:18
2019/05/18 12:33