[PYTHON] Je veux obtenir les données de League of Legends ①

Je veux obtenir les données de League of Legends

Ceci est le premier article à commémorer.

introduction

Dans cet article, je voulais obtenir les données de "League of Legends" (ci-après LOL), qui est le jeu auquel je suis accro, et exprimer numériquement le taux de victoire et les champions dans lesquels je suis bon. (Eh bien, des sites comme OPGG et YOURGG existent déjà, mais le mien Pour étudier)

environnement

Au 29 janvier 2020 OS:windows10 Anaconda:4.8.1 python:3.7.6

Préparation préalable

Étant donné que l'API est officiellement fournie lors de la collecte des données LOL, nous l'utiliserons cette fois. Pour ce faire, tapez la commande ci-dessous pour installer *** riotwather ***.

python -m pip install riotwatcher

Puisque vous devez obtenir la clé API, connectez-vous depuis ici et souvenez-vous de la clé API DEVELOPMENT. (Cette clé API doit être mise à jour et réécrite si elle devient inutilisable en raison de la date d'expiration d'un jour.)

Obtenez des données

(https://qiita.com/hyo_07/items/f106efbde82aeb47c8a0) J'ai fait référence à cet article.

sample_1.py


from riotwatcher import RiotWatcher

API_KEY="{CLÉ API acquise plus tôt}"
wather = RiotWatcher(API_KEY)
region = "jp1" #Sélection du serveur: Japan Saba est jp1
name = "Macha-kun" #Entrez le nom de l'invocateur
summoner = watcher.summoner.by_name(region,name) #Acquisition des données des joueurs
print(summoner)

Quand ceci est exécuté, le contenu de l'invocateur de type dictionnaire peut être sorti. En fait, le contenu inclut des données telles que ["id": str, "accountId": str, "puuid": str, "fileIconId": int, "revisionDate": int, "summonerLevel": int].

sample_1.py


recentmatchlists = watcher.match.matchlist_by_account(region,summoner["accountId"]) #Obtenez une liste de données pour les 20 derniers matchs
matches = recentmatchlists["matches"]
match_data = watcher.match.by_id(region,matches[0]["gameId"]) #Extraire une seule correspondance
print(match_data)

Ajoutez-les au code précédent et affichez les données pour un jeu. image.png Comme vous pouvez le voir, il y a une énorme quantité de données même dans un jeu. (Je ne pouvais pas serrer parce que ça ne cadrait pas sur l'écran)

Examiner le contenu des données

Jetons un coup d'œil au contenu de ** match_data ** un par un.

Les données que je veux cette fois sont le nombre de victoires et de pertes, le nombre de victimes, le nombre de morts, le nombre de passes décisives, le taux d'implication des victimes, le champion utilisé, le champion qui a joué, le couloir, le CS, l'or gagné, les dégâts infligés au champion, le temps du match. Aller. Le mode de jeu est réduit au rang.

Trouvons l'élément qui vient d'être mentionné dans la sortie précédente. (C'est difficile à trouver avec beaucoup de lettres: D) Au fait, match_data est un type dict.

Nom de l'objet Moule Description des données
gameId int Numéro d'identification du jeu
platformId str Emplacement du serveur
gameCreation int Horodatage lorsque l'écran de chargement est affiché
gameDuration int Temps de jeu
queueId int 420=Rang, 430=Normal, 450=ARAM
mapId int
seasonId int 13=Season10
gameVersion str Version du jeu
gameMode str ARAM ou CLASSIQUE
gameType str
teams list Détails ci-dessous
participants list Détails ci-dessous
participantIdentities list Détails ci-dessous

Il ressemble à ce qui précède lorsqu'il est grossièrement divisé. Cependant, à ce stade, les informations que je souhaite ne sont claires que pour ** gameDuration ** et ** gameMode **. ** temas **, ** participants ** et ** identités partielles ** sont de * type liste *, il semble donc nécessaire de regarder de plus près.

Jetons donc un œil au contenu des ** équipes ** une par une.


match_data["teams"][0] #Équipe 1
match_data["teams"][1] #Équipe 2
Nom de l'objet Moule Description des données
teamId int 100=L'équipe bleue,200=Équipe rouge
win str "Win" or "Fail"
firstBlood bool Vrai si tu prends le premier sang
firstTower bool Vrai si tu prends la première tour
firstInhibitor boo Vrai si vous prenez le premier inhibiteur
firstBaron bool Vrai si tu prends le premier baron
firstDragon bool Vrai si vous prenez le premier dragon
firstRiftHerald bool Vrai si vous prenez le premier héraut d'ascenseur
towerKills int Nombre de tours cassées
inhibitorKills int Nombre d'inhibiteurs cassés
baronKills int Nombre de fois que Baron a été vaincu
dragonKills int Nombre de fois où le dragon a été vaincu
vilemawKills int Est-ce comme un personnage limité par une ligne d'arbre tordue? Nombre de défaites
riftHeraldKills int Nombre de fois où vous avez vaincu Lift Herald
dominionVictoryScore int
bans list Détails ci-dessous

** bans ** est un * type de liste *, alors creusons plus profondément.

match_data["teams"][0]["bans"] #Équipe 1 BAN
match_data["teams"][1]["bans"] #Équipe 2 BAN
Nom de l'objet Moule Description des données
championId int Numéro de champion
pickTurn int Choisissez l'ordre

Regardons maintenant les ** participants **.

match_data["participants"][0] #Prenez des données pour une personne
Nom de l'objet Moule Description des données
participantsId int 1~10 numéros d'identification des joueurs
teamId int 100=Équipe bleue, 200=Équipe rouge
championId int Numéro d'identification du champion
spell1Id int Sort d'invocateur 1
spell2Id int Sort d'invocateur 2
stats dict Détails ci-dessous
timeline dict Détails ci-dessous

Il existe des ** stats ** et ** timeline ** de * dict type *, donc vérifions les détails en suivant l'exemple.

match_data["participants"][0]["stats"] #Statistiques de sortie pour une personne
Nom de l'objet Moule Description des données
participantId int 1~10 numéros d'identification des joueurs
win bool Vrai si vous gagnez
item0 int Numéro d'identification de l'article
item1 int Numéro d'identification de l'article
item2 int Numéro d'identification de l'article
item3 int Numéro d'identification de l'article
item4 int Numéro d'identification de l'article
item5 int Numéro d'identification de l'article
item6 int Numéro d'identification de l'article
kills int Nombre de victimes
deaths int Nombre de décès
assists int Nombre de passes
largestKillingSpree int Spree de meurtre maximale
largestMultiKill int Multi-kill maximum
killingSprees int Nombre de tueries
longestTimeSpentLiving int
doubleKills int Nombre de doubles éliminations
tripleKills int Nombre de triples éliminations
quadraKills int Nombre de quadrakills
pentaKills int Nombre de pentakills
unrealKills int
totalDamageDealt int Total de tous les dégâts
magicDamageDealt int Dégâts magiques totaux
physicalDamageDealt int Dégâts physiques totaux
trueDamageDealt int Total des dommages confirmés
largestCriticalStrike int
magicDamageDealtToChampions int Dégâts magiques totaux au champion
physicalDamageDealtToChampions int Dégâts physiques totaux au champion
trueDamageDealtToChampions int Total des dommages confirmés au champion
totalHeal int Montant total de la récupération
totalUnitsHealed int
damageSelfMitigated int
damageDealtToObjectives int Dommages aux objets
damageDealtToTurrets int Dommages à la tour
visionScore int Score de visibilité
timeCCingOthers int Nombre d'obstacles
totalDamageTaken int Total des dégâts reçus
magicalDamageTaken int Total des dégâts magiques reçus
physicalDamageTaken int Total des dommages physiques reçus
trueDamageTaken int Total des dommages confirmés reçus
goldEarned int Gagner de l'or
goldSpent int
turretKills int Nombre de tours détruites
inhibitorKills int Nombre d'inhibiteurs cassés
totalMinionsKilled int Nombre d'unités vaincues
neutralMinionsKilled int Nombre de serviteurs vaincus
neutralMinionsKilledEnemyJungle int Nombre de fluage de la jungle de l'adversaire vaincu
totalTimeCrowdControlDealt int
champLevel int Niveau de champion
visionWardsBoughtInGame int
sightWardsBoughtInGame int
wardsPlaced int Nombre de mots placés
wardsKilled int Nombre de mots brisés
firstBloodKill bool Vrai si tu prends le premier sang
firstBloodAssist bool Vrai avec First Blood Assist
firstTowerKill bool Vrai si tu prends la première tour
firstTowerAssist bool Vrai si vous obtenez l'aide de la première tour
combatPlayerScore int
objectivePlayerScore int
totalPlayerScore int
totalScoreRank int
playerScore0 int
playerScore1 int
playerScore2 int
playerScore3 int
playerScore4 int
playerScore5 int
playerScore6 int
playerScore7 int
playerScore8 int
playerScore9 int
perk0 int
perk0Var1 int
perk0Var2 int
perk0Var3 int
perk1 int
perk1Var1 int
perk1Var2 int
perk1Var3 int
perk2 int
perk2Var1 int
perk2Var2 int
perk2Var3 int
perk3 int
perk3Var1 int
perk3Var2 int
perk3Var3 int
perk4 int
perk4Var1 int
perk4Var2 int
perk4Var3 int
perk5 int
perk5Var1 int
perk5Var2 int
perk5Var3 int
perkPrimaryStyle int
perkSubStyle int
statPerk0 int
statPerk1 int
statPerk2 int

Le montant est incroyable, et je n'ai aucune idée de ce que représentent les données du milieu.

Jetons un second regard et regardons la ** chronologie ** de la même manière.

match_data["participants"][0]["timeline"] #Chronologie de sortie pour une personne
Nom de l'objet Moule Description des données
participantsId int 1~10 numéros d'identification des joueurs
creepsPerMinDeltas dict 1 minute CS
xpPerMinDeltas dict Valeur d'expérience 1 minute
goldPerMinDeltas dict 1 minute d'or gagné
csDiffPerMinDeltas dict
xpDiffPerMinDeltas dict
damageTakenPerMinDeltas dict Dommages reçus en 1 minute
damageTakenDiffPerMinDeltas dict
role str SOLO,DUO_SUPPORT,DUO_CARRY,NONE
lane str TOP,JUNGLE,MIDDLE,L'un des BOTTOM

Lorsqu'il s'agit de * dict type *, les données à intervalles de 10 minutes tels que * "0-10" * et * "10-20" * sont stockées dans * float type *.

Enfin, examinons les ** identités partielles **.

match_data["participantIdentities"][0] #Sortie des identités partielles pour une personne
Nom de l'objet Moule Description des données
participantId int 1~10 numéros d'identification des joueurs
player dict Détails ci-dessous

Vérifiez le contenu de ** player **.

match_data["participantIdentities"][0]["player"] #Informations sur le joueur pour un joueur
Nom de l'objet Moule Description des données
platformId str L'emplacement du serveur sur lequel vous avez créé le compte pour la première fois
accountId str identifiant de compte
summonerName str Nom d'invocateur
summonerId str ID d'invocateur
currentPlatformId str Emplacement actuel du serveur
currentAccountId str ID de compte actuel
matchHistoryUri str URI de l'historique des enregistrements de bataille
profileIcon int Numéro d'identification de l'icône

finalement

Il faut beaucoup de patience pour vérifier cette quantité de données une par une. L'endroit où l'explication des données est vide est celui où cela n'est pas nécessaire cette fois. Je veux le remplir un jour: D

Ensuite, je voudrais passer au travail d'analyse à partir de ces données extraites.

Recommended Posts

Je veux obtenir les données de League of Legends ③
Je veux obtenir les données de League of Legends ②
Je veux obtenir les données de League of Legends ①
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
Keras Je veux obtenir la sortie de n'importe quelle couche !!
Je souhaite obtenir des attributs de données personnalisés de HTML sous forme d'éléments à l'aide de Python Selenium
Je veux obtenir le nom de la fonction / méthode en cours d'exécution
Quoi qu'il en soit, je veux vérifier facilement les données JSON
Je veux frapper 100 sciences des données avec Colaboratory
J'ai essayé d'obtenir des données CloudWatch avec Python
Je souhaite personnaliser l'apparence de zabbix
Je veux obtenir le chemin du répertoire où le fichier en cours d'exécution est stocké.
Je souhaite visualiser l'état des transferts de la J League 2020, que dois-je faire?
Je veux obtenir / exécuter des variables / fonctions / classes de fichiers externes à partir de Python
Une bibliothèque pour la science des données "Je veux faire ça" sur le bloc-notes Jupyter
Je veux détecter des images de chats d'Instagram
Je veux grep le résultat de l'exécution de strace
Je souhaite installer un package de Php Redis
[Python] J'ai essayé d'obtenir Json de squid ring 2
Je veux dire qu'il y a un prétraitement des données ~
Je souhaite augmenter la sécurité de la connexion SSH
Je veux résoudre SUDOKU
Je souhaite utiliser une source de données python dans Re: Dash pour obtenir les résultats de la requête.
Je veux pouvoir analyser des données avec Python (partie 3)
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
Je souhaite spécifier une autre version de Python avec pyvenv
Je veux pouvoir analyser des données avec Python (partie 1)
[Python] Je souhaite obtenir un ensemble commun entre numpy
Je veux démarrer beaucoup de processus à partir de python
Je souhaite utiliser uniquement le traitement de normalisation SudachiPy
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux colorier des photos en noir et blanc de souvenirs avec GAN
Je veux pouvoir analyser des données avec Python (partie 2)
Je veux déterminer l'authenticité d'un élément du tableau numpy
Je veux connaître la nature de Python et pip
Comment obtenir un aperçu de vos données dans Pandas
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc
J'ai envoyé les données de Raspberry Pi à GCP (gratuit)
Je veux comprendre à peu près systemd
Je veux gratter des images et les former
Je veux faire ○○ avec les Pandas
Je veux copier l'annotation de yolo
Je veux déboguer avec Python
[Pytorch] Je souhaite attribuer manuellement les paramètres d'entraînement du modèle
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
Je veux lire la version html de la version "OpenCV-Python Tutorials" OpenCV 3.1
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
Je souhaite acquérir et répertorier les données boursières japonaises sans grattage
Je veux vérifier la position de mon visage avec OpenCV!
Technique Python pour ceux qui veulent se débarrasser des débutants
Je veux connaître la population de chaque pays du monde.
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
Je souhaite convertir des données détenues verticalement (type long) en données détenues horizontalement (type large)
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc Préparation 1
Je veux épingler Spyder à la barre des tâches
Je veux me mettre en colère contre ma mère quand la mémoire est serrée
Je veux détecter des objets avec OpenCV