[PYTHON] Visualisez le centre de l'environnement de combat de rang à partir de l'API Pokemon Home

Quel est l'environnement Pokemon?

Le terme environnement utilisé dans les batailles Pokemon fait référence au type de Pokémon, de stratégie et de construction utilisés dans la bataille de rang de Pocket Monster Sword Shield. On peut dire que le vrai frisson de Pokemon Battle est de créer une structure facile à gagner dans l'environnement actuel en connaissant l'environnement et en considérant la méta pour cela.

Le centre de l'environnement

Dans Character Rank Maker exploité par Pokemon Soldier, un site de partage d'informations sur les combats Pokemon pour apts. Les évaluations des rangs S à E peuvent être définies personnellement, et les classements des personnages qui sont évalués subjectivement par des commentateurs célèbres et des contributeurs de vidéos de commentaires sont mentionnés.

Pokemon Soldier publie lui-même régulièrement son rang de personnage. https://youtu.be/TMXQ497foRg

スクリーンショット 2020-11-24 172842.png

Le rang S de ce rang de personnage est défini dans la vidéo comme "le centre de l'environnement" par Pokemon Soldier. Par contre, je pensais que le problème était que l'évaluation du centre de l'environnement était subjective et qu'une méthode d'évaluation quantitative était nécessaire.

Cible

Le but est «d'évaluer quantitativement le centre de l'environnement». Dans cet article, j'aimerais autant que possible considérer le centre de l'environnement en fonction des données.

Accueil Pokémon

Pokemon Home est une application de gestion Pokemon qui peut être utilisée sur les smartphones et Switch. Le nombre de Pokémon pouvant être stockés dans le logiciel étant limité, vous pouvez l'utiliser en stockant temporairement des Pokémon inutiles ici.

En plus de cela, cette Pokemon Home est également équipée d'une fonction d'échange, des informations environnementales de Pokemon dans les batailles classées, d'une fonction de classement des joueurs, etc., et est fréquemment utilisée pour des enquêtes environnementales auprès de personnes aptes.

API Comme présenté dans l'article ici, Pokemon Home utilise directement l'API utilisée dans l'application en déguisant l'User-Agent. Vous pouvez obtenir des données json en cliquant dessus. L'API suivante est utilisée cette fois. Veuillez consulter le lien pour plus de détails.

#Obtenez des informations sur les conditions de la saison
https://api.battle.pokemon-home.com/cbd/competition/rankmatch/list
#Acquisition des données de combat pour la saison / trimestre concerné
https://resource.pokemon-home.com/battledata/ranking/$id/$rst/$ts2/pokemon
#Données Pokémon pour la saison concernée
https://resource.pokemon-home.com/battledata/ranking/$id/$rst/$ts2/pdetail-$j

Méthode d'évaluation

Afin de traiter l'environnement sous une forme visuellement facile à comprendre et à analyser, nous envisagerons cette fois une évaluation à l'aide de graphiques. Veuillez vous reporter à ici pour les graphiques que j'ai écrits dans le passé.

Dans cet article, nous avons décidé d'évaluer le taux élevé d'adoption simultanée avec Pokemon, qui a le taux d'utilisation le plus élevé. C'est parce que je pensais que l'environnement devrait se concentrer sur l'impact sur les autres Pokémon et la facilité de l'incorporer dans la fête, plutôt que sur les performances d'une seule unité. Compte tenu du top 10 des Pokémon avec un taux d'adoption simultanée élevé des 30 meilleurs classements de taux d'utilisation de Pokemon Home, nous visualiserons la relation avec un graphique non orienté.

Nœuds et arêtes

Dans un graphe non orienté, vous devez définir des nœuds et des arêtes.

Cette fois, nous allons créer un graphique avec des nœuds comme Pokémon et des arêtes comme la présence ou l'absence du taux d'adoption simultanée le plus élevé.

Par exemple, si nous considérons 10 animaux qui ont un taux d'adoption simultanée élevé avec Aceburn, nous étendrons 10 arêtes du nœud Aceburn à chaque nœud Pokemon.

図1.png

Cela a été répété pour les 30 meilleurs Pokémon, et il a été supposé que le Pokémon qui règne sur le nœud avec le plus haut ordre est le Pokémon qui a une relation mutuelle forte avec le Pokémon au sommet de l'environnement.

Collecte de données

Les données requises sont les suivantes.

Livre illustré Pokemon

Quand j'ai cherché un livre d'images Pokémon compatible avec 8 générations, il y avait une personne qui le distribuait sous forme de fichier json, alors j'ai emprunté ici. .. Étant donné que les informations sur Pokémon telles que Ulaos Brizapos ajoutées après que l'île isolée de l'armure n'a pas encore été mise à jour, si vous l'essayez dans le dernier environnement, le résultat sera un peu bruyant à cause du Pokémon qui ne figure pas dans le livre d'images.

> git clone https://github.com/dayu282/pokemon-data.json
import json

pokedex = {}
for i in range(8):
  #Pokémon ajouté pour toutes les générations
  j = i + 1
  with open("pokemon-data.json/en/gen" + str(j) + "-en.json", "r", encoding = "utf-8") as f:
    pokemons = json.loads(f.read())
    for pokemon in pokemons:
      pokedex[pokemon["no"]] = pokemon["name"]

Informations d'identification du terme de saison

#Obtenez toutes les informations de saison et enregistrez-les au format json
> curl https://api.battle.pokemon-home.com/cbd/competition/rankmatch/list \
  -H 'accept: application/json, text/javascript, */*; q=0.01' \
  -H 'countrycode: 304' \
  -H 'authorization: Bearer' \
  -H 'langcode: 1' \
  -H 'user-agent: Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Mobile Safari/537.36' \
  -H 'content-type: application/json' \
  -d '{"soft":"Sw"}' \
  -o season.json
with open("season.json", "r", encoding = "utf-8") as f:
  data = json.load(f)["list"]

#Organisez uniquement les informations nécessaires pour chaque terme
terms = []
for season in data:
  for id in data[season]:
    terms.append({"id" : id, "season" : data[season][id]["season"], "rule" : data[season][id]["rule"], "rst" : data[season][id]["rst"], "ts1" : data[season][id]["ts1"], "ts2" : data[season][id]["ts2"]})

Informations sur l'environnement de combat et Pokémon pour la saison et la durée

En incorporant des variables dans la commande à l'aide de Jupyter, elle est acquise à l'aide d'une boucle. Les informations sur Pokémon sont divisées en 5 parties, alors récupérez tous les pdetail- {1 à 5} et concaténez-les.

for term in terms:
  if term["rule"] == 0:
    #Acquisition de l'environnement de combat
    id = term["id"]
    rst = term["rst"]
    ts1 = term["ts1"]
    ts2 = term["ts2"]
    pokemons_file = str(id) + "-pokemons.json"
    !curl -XGET https://resource.pokemon-home.com/battledata/ranking/$id/$rst/$ts2/pokemon -H 'user-agent: Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Mobile Safari/537.36'  -H 'accept: application/json' -o $pokemons_file
    for i in range(5):
      #Obtenez des informations sur Pokemon pour le terme
      j = i + 1
      pokeinfo_file = str(id) + "-pokeinfo-" + str(j) + ".json"
      !curl -XGET https://resource.pokemon-home.com/battledata/ranking/$id/$rst/$ts2/pdetail-$j -H 'user-agent: Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Mobile Safari/537.36'  -H 'accept: application/json' -o $pokeinfo_file
id = 10011 #Bataille unique de la saison 1

#Liste des meilleurs Pokémon
with open(str(id) + "-pokemons.json", "r", encoding = "utf-8") as f: 
  top_pokemons = json.load(f)[:30]

#Informations Pokémon
pokemons_info = {}
for i in range(5):
  j = i + 1
  with open(str(id) + "-pokeinfo-" + str(j) + ".json") as f:
    data = json.load(f)
    for index in data.keys():
      pokemons_info[index] = data[index]

Dessiner des graphiques et créer des classements d'ordre

Maintenant que nous avons les données nécessaires, nous allons dessiner un graphique.

nodes = [] #Liste des nœuds
edges = [] #Liste des bords

#Considérez le top 30
for pokemon in top_pokemons:
  #Ajouter le Pokémon au nœud
  nodes.append(pokedex[pokemon["id"]])
  #Pokémon ajouté à adopter ensemble
  with_poke_list = pokemons_info[str(pokemon["id"])][str(pokemon["form"])]["temoti"]["pokemon"]
  for with_poke in with_poke_list:
    nodes.append(pokedex[with_poke["id"]])
    if (pokedex[with_poke["id"]], pokedex[pokemon["id"]]) not in edges: #Élimine la duplication par commande
      edges.append((pokedex[pokemon["id"]], pokedex[with_poke["id"]]))

nodes = list(set(nodes)) #Convertissez une fois en ensemble et rendez-le unique
import networkx as nx
import matplotlib.pyplot as plt
from matplotlib import font_manager

#Création de graphique non valide
G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)

#Calculez l'ordre moyen de l'ensemble du réseau
average_deg = sum(d for n, d in G.degree()) / G.number_of_nodes()
#La taille doit être proportionnelle au degré du nœud
sizes = [2500*deg/average_deg for node, deg in G.degree()]

plt.figure(figsize=(15, 15))
nx.draw(G, with_labels=True, node_color = "lightblue", node_size = sizes, edge_color = "black")
plt.axis('off')
plt.savefig(str(id) + '-graph.png')
plt.show()
#Trier les nœuds par ordre décroissant
nodes_sorted_by_degree = sorted(G.degree(), key=lambda x: x[1], reverse=True)
print(nodes_sorted_by_degree)
 
#Sortie du classement des commandes
x, height = list(zip(*nodes_sorted_by_degree))
plt.figure(figsize=(15, 15))
plt.xlabel("Number of degrees")
plt.ylabel("Name of node")
plt.barh(x, height)
plt.savefig(str(id) + '-degs.png')
plt.show()

résultat

Je vais les montrer dans l'ordre de la saison 1. Il y a du bruit après la levée de l'interdiction de l'île isolée de l'armure.

Saison 1

L'environnement du bouclier d'épée s'ouvre. En termes d'ordre, Mimikyu, Rotom, Drapart, Drews, etc. sont très majoritairement au centre de l'environnement. En regardant le graphique, 9 Pokémon sont solidifiés au centre et d'autres Pokémon sont dessinés de manière à l'entourer, vous pouvez donc penser que 9 Pokémon sont au rang S au centre de l'environnement.

10011-graph.png

10011-degs.png

Saison 2

L'environnement commence à changer. La nouvelle ligne approchant du bord est intéressante. Nuruant, Brimond Saidon, Nuodehide, etc. pénètrent dans l'environnement.

10021-graph.png

10021-degs.png

Saison 3

Kyodai Max Cavigon et Kyodai Max Laplace ont été dévoilés. Entrez immédiatement dans l'environnement. À ce stade, Laplace a un taux d'adoption élevé, mais le taux d'adoption simultanée avec Pokemon, qui est dans le haut de l'environnement, n'est pas si élevé, donc en fait, compte tenu de ce graphique, il est évalué comme A ou B au lieu du rang S.

10031-graph.png

10031-degs.png

Saison 4

Certains nouveaux Pokémon Kyodai Max ont été levés, mais il n'y a pas beaucoup de changement. Cortus Lizardon entre dans l'environnement.

10041-graph.png

10041-degs.png

Saison 5

Aucun changement particulier.

10051-graph.png 10051-degs.png

Saison 6

Natrey commence à devenir populaire. Aucun autre changement.

10061-graph.png

10061-degs.png

Saison 7

Levée de l'interdiction des îles isolées en armure. Avec la levée de l'interdiction des caractéristiques de rêve d'Aceburn Gorilander et la levée de l'interdiction de Kyodai Max, nous allons plonger immédiatement au centre de l'environnement. Cavigon Armor Gaa commence à sortir du centre de l'environnement. Hold est un peu populaire.

10071-graph.png

10071-degs.png

Saison 8

Pokemon Home levé. Les Pokémon avec un tempérament de boucle de réception tel que l'air armé, le bonheur, le nutray et le dohideide pénètrent dans l'environnement. Cavigon est accepté et est hors de l'environnement. Au centre de l'environnement où le polygone 2 fait rage. La valeur de Cabaldon pour créer un point de départ augmente et Cabaldon devient le centre de l'environnement. Au fait, Charizard-1 est Ulaos, qui a un problème avec les livres illustrés.

10081-graph.png

10081-degs.png

Saison 9

La frontière au centre de l'environnement commence à devenir claire. Galados et Drews descendent un peu. La boucle de réception commence également à apparaître en dehors de l'environnement.

10091-graph.png

10091-degs.png

Saison 10

L'environnement a radicalement changé en raison de la règle d'interdiction de Pokémon de haut rang. Ulaos, Patchragon, Lizardon, Natrey, Rotom et Achilleine sont au cœur de l'environnement. Cavigon et Iron reviennent dans l'environnement. Morobarrel Pixie vient à l'environnement.

10101-graph.png

10101-degs.png

Saison 11

Genger est au centre de l'environnement. Aucun autre changement.

10111-graph.png

10111-degs.png

Saison 12

Levée de l'interdiction sur le champ de neige de la couronne. Les semi-légendes telles que Landros, Tekkaguya, Cap, Rehile, Thunder et Uturoid occupent la majeure partie de l'environnement. D'après les données de la saison 12, on peut dire que le centre de l'environnement actuel se trouve autour de Mimikyu, Aceburn, Polygon 2, Gorilander, Tekkaguya, Caprehille, Landros, Thunder et Utsuroid.

10121-graph.png 10121-degs.png

finalement

J'ai défini le rang du personnage à partir de la saison 12 comme suit en fonction de l'ordre. Veuillez vous y référer. Il est peut-être plein de théorie, mais j'espère qu'il vous sera utile comme index. Ayons une bonne vie Pokémon! 20201124 Saison 12 Graph Environmental Rank.png

Post-scriptum: quelqu'un faisait quelque chose de similaire https://qiita.com/b_aka/items/9020e3237ff1a3e676e4

Recommended Posts

Visualisez le centre de l'environnement de combat de rang à partir de l'API Pokemon Home
Utilisé depuis l'introduction de Node.js dans l'environnement WSL
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Visualisez le nombre de plaintes des compagnies d'assurance-vie
J'ai analysé les données de combat de rang du bouclier d'épée Pokemon et je les ai visualisées sur Tableau
Visualisez la trajectoire de Hayabusa 2
Utilisez l'API Flickr de Python
Visualisez l'état de la réponse du recensement national 2020
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress
Affichez le résultat de l'analyse vidéo à l'aide de l'API Cloud Video Intelligence de Colaboratory.
Pokemon x Data Science (3) - Réflexion sur la construction de partie du bouclier d'épée Pokemon à partir de l'analyse du réseau Où est le centre du réseau?