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

Connectez-vous à la base de données et stockez les données

La dernière fois, j'ai pu extraire grossièrement les données que je voulais, alors cette fois, j'aimerais enregistrer ces données dans la base de données. (Cliquez ici pour l'article précédent https://qiita.com/mattya_527/items/9b90451e94de246525a4)

environnement

Au 08/02/2020 OS:windows10 Anaconda:4.8.1 python:3.7.6 MySQL:8.0.19

Paramètres de la base de données

Je me suis référé ici pour les paramètres initiaux tels que l'installation. (https://www.dbonline.jp/mysql/)

Créer une base de données

mysql -u root -p Entrez le mot de passe pour démarrer mysql. create database loldb; Créez une base de données nommée LOLdb dans. show databases; Vous pouvez consulter la liste des bases de données sur. OK avec LOLdb

Connectez-vous à la base de données

Tout d'abord, installez les modules requis. python -m pip mysql

J'écrirai le code Python immédiatement.

#Importer la base de données MySQL
import MySQLdb 

#Connectez-vous à la base de données et générez le curseur
connection = MySQLdb.connect(
    host="localhost",
    user="root",
    passwd="{Mot de passe défini dans mysql}",
    db="LOLdb",
    charset="utf8"
    )
cursor = connection.cursor()

Vous pouvez maintenant vous connecter à la base de données que vous venez de créer. Créez ensuite la table.

#Initialisation de la table
cursor.execute("DROP TABLE IF EXISTS match_data")

#Créer une table
cursor.execute("""CREATE TABLE match_data(
               id INT(10) AUTO_INCREMENT NOT NULL,
               sn VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
               wol VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
               kills INT(10) NOT NULL,
               deaths INT(10) NOT NULL,
               assists INT(10) NOT NULL,
               championId  INT(10) NOT NULL,
               roles VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
               cs INT(10) NOT NULL,
               gold INT(10) NOT NULL,
               damage INT(10) NOT NULL,
               side VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
               game_time INT(10) NOT NULL,

               PRIMARY KEY(id)
               )""")

Dans ce script, si une table appelée ** match_data ** existe, elle est supprimée et recréée. (Une fois terminé, commentez ce travail et ne le traitez pas.) Les articles du tableau doivent être ceux que vous avez ramassés la dernière fois.

#Ajouter des données(tester)
cursor.execute("INSERT INTO match_data(sn,wol,kills,deaths,assists,championId,roles,cs,gold,damage,side,game_time) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",data)


#Affichage d'une liste de données
cursor.execute("SELECT * FROM match_data")
for row in cursor:
    print(row)


#Exécuter la sauvegarde
connection.commit()
#Fermer la connexion
connection.close()

Modifié pour extraire de la liste ** données ** lors de l'ajout à la table. N'oubliez pas ** commit () **.

Vous pouvez désormais créer, ajouter et même afficher le tableau. J'écrirai le code des données à ajouter. Pour ce faire, je vais améliorer le code que j'ai écrit la dernière fois.

###Même partie que la dernière fois###
from riotwatcher import RiotWatcher

API_KEY = "{Clé API obtenue}"
watcher = 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
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 uniquement la dernière correspondance

#Le nom de l'invocateur est"Macha-kun"Extrait le joueur et renvoie ses partenairesId
for i in range(10):
    match_data["participantIdentities"][i]["player"]
    if match_data["participantIdentities"][i]["player"]["summonerName"] == name: #Le nom de l'invocateur correspond-il?
        par_Id = match_data["participants"][i]["participantId"]

###Partie jusqu'à la dernière fois###

###La partie améliorée cette fois###
data=[] #Préparation des données de liste à ajouter au tableau
data.append(name) #Ajouter un nom
# par_Sortir les données qui correspondent à l'ID
if match_data["participants"][par_Id-1]["stats"]["participantId"] == par_Id: #par_Id-1 correspond à l'index
    if match_data["participants"][par_Id-1]["stats"]["win"] == True:#Si la victoire ou la perte est vraie, gagnez,Si faux, perdez
        wol = "win"
    else:wol = "lose"
    data.append(wol) #Ajouter wol
    kills = match_data["participants"][par_Id-1]["stats"]["kills"] #Nombre de victimes
    data.append(kills) #Ajouter des éliminations
    deaths = match_data["participants"][par_Id-1]["stats"]["deaths"] #Nombre de décès
    data.append(deaths) #Ajouter des décès
    assists = match_data["participants"][par_Id-1]["stats"]["assists"] #Nombre de passes
    data.append(assists) #Ajouter des aides
    championId = match_data["participants"][par_Id-1]["championId"] #Champion utilisé
    data.append(championId) #Ajouter championId(Plus tard, convertissez l'ID de champion en nom de champion.)
    lane = match_data["participants"][par_Id-1]["timeline"]["lane"] #voie
    role = match_data["participants"][par_Id-1]["timeline"]["role"] #rouleau
    if role == "DUO_SUPPORT": #soutien
        roles = "SUP"
    elif role == "DUO_CARRY": #porter
        roles = "ADC"
    elif role == "SOLO": #Voie solo
        if lane == "TOP": #Haut
            roles = "TOP"
        elif lane == "MIDDLE": #Milieu
            roles = "MID"
    elif role == "NONE":
        roles = "JG" #jungle
    data.append(roles) #Ajouter des rôles(Tout d'abord, vous pouvez juger s'il s'agit de SUP, ADC, SOLO Lane ou jungle en regardant le rôle. Quand c'est SOLO, déterminez TOP ou MID.)
    cs = match_data["participants"][par_Id-1]["stats"]["totalMinionsKilled"] #CS **Y a-t-il autre chose que les sbires et le fluage de la jungle qui est nécessaire pour CS car ce n'est pas suffisant pour CS vu dans OPGG?
    data.append(cs) #Ajouter cs
    gold = match_data["participants"][par_Id-1]["stats"]["goldEarned"] #Gagner de l'or
    data.append(gold) #Ajouter de l'or
    damage = match_data["participants"][par_Id-1]["stats"]["magicDamageDealtToChampions"] + match_data["participants"][par_Id-1]["stats"]["physicalDamageDealtToChampions"] + match_data["participants"][par_Id-1]["stats"]["trueDamageDealtToChampions"] #Dommages au champion
    data.append(damage) #Ajouter des dégâts
    if match_data["participants"][par_Id-1]["teamId"] == 100: #100 est le côté bleu, 200 est le côté rouge
        side = "RED"
    else: side = "BLUE"
    data.append(side) #Ajouter un côté
    game_time = match_data["gameDuration"] #Temps de jeu(Secondes)
    data.append(game_time) #game_Ajouter du temps(Convertissez plus tard le temps de jeu en minutes.)

Vous pouvez l'ajouter à la fin d'un élément de liste en utilisant ** append () **. Écrivez ce code avant l'emplacement où vous créez la base de données.

*** Résultat de l'exécution *** image.png

*** Vérifiez avec MySQL *** image.png

Vous pouvez maintenant créer une table et enregistrer les données.

Expérimentez pour voir si plusieurs données peuvent être saisies

Avec cela, une donnée peut être stockée, mais elle ne peut pas fonctionner comme une base de données à moins que plusieurs données ne soient stockées. Alors, commentons et supprimons le code d'initialisation et de création de la table dans le code précédent.

*** Résultat de l'exécution *** image.png

J'ai essayé de changer l'index du match et de l'exécuter, mais j'ai pu le stocker correctement.

Résumé

J'ai aimé utiliser MySQL cette fois-ci et j'ai trouvé qu'il était assez facile de jouer avec du côté Python. J'avais envie d'étudier la base de données, mais je ne pouvais pas marcher dessus, c'était donc une bonne opportunité. Désormais, je souhaite créer une application WEB de type OPGG.

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 ①
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
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
Quoi qu'il en soit, je veux vérifier facilement les données JSON
Je veux frapper 100 sciences des données avec Colaboratory
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 donner un group_id à une trame de données pandas
Je veux grep le résultat de l'exécution de strace
Je veux bien comprendre les bases de Bokeh
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 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
Je veux connaître la légende du monde des technologies informatiques
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 me débarrasser des avertissements d'importation de Pyright et pylint dans VSCode
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 veux sortir le début du mois prochain avec Python
Comparaison des services informatiques GCP [Je souhaite l'utiliser sans serveur]
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)