Header Logo
Ⓒ 2024- @itatibs
ポケモンのタイプ相性をPandasのデータフレームとして取得するサンプルコード

Category: tech
Tags(仮): Python,ポケモンSV
Date: 2024/11/4

はじめに

ポケモンのタイプ相性をpandasのデータフレームとして取得するサンプルコードです。
調べるとCSVファイルからの読み取り例が多いのですが、コードで直書きしたっていいじゃない、というのと先にタイプを定数として定義しておくと後々の処理でも扱いやすいかなと思い準備しました。

サンプルコード

どのpythonバージョンでも動くと思いますが、google colabにて動作確認をしています。

from enum import Enum import pandas as pd # ポケモンのタイプを定義 class PokemonType(Enum): NORMAL = "normal" FIRE = "fire" WATER = "water" ELECTRIC = "electric" GRASS = "grass" ICE = "ice" FIGHTING = "fighting" POISON = "poison" GROUND = "ground" FLYING = "flying" PSYCHIC = "psychic" BUG = "bug" ROCK = "rock" GHOST = "ghost" DRAGON = "dragon" DARK = "dark" STEEL = "steel" FAIRY = "fairy" # タイプ相性をDataFrameで定義 type_chart_list = [ PokemonType.NORMAL.value, PokemonType.FIRE.value, PokemonType.WATER.value, PokemonType.ELECTRIC.value, PokemonType.GRASS.value, PokemonType.ICE.value, PokemonType.FIGHTING.value, PokemonType.POISON.value, PokemonType.GROUND.value, PokemonType.FLYING.value, PokemonType.PSYCHIC.value, PokemonType.BUG.value, PokemonType.ROCK.value, PokemonType.GHOST.value, PokemonType.DRAGON.value, PokemonType.DARK.value, PokemonType.STEEL.value, PokemonType.FAIRY.value ] type_chart = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0, 1, 1, 0.5, 1], # ノーマル [1, 0.5, 0.5, 1, 2, 2, 1, 1, 1, 1, 1, 2, 0.5, 1, 0.5, 1, 2, 1], # ほのお [1, 2, 0.5, 1, 0.5, 1, 1, 1, 2, 1, 1, 1, 2, 1, 0.5, 1, 1, 1], # みず [1, 1, 2, 0.5, 0.5, 1, 1, 1, 0, 2, 1, 1, 1, 1, 0.5, 1, 1, 1], # でんき [1, 0.5, 2, 1, 0.5, 1, 1, 0.5, 2, 0.5, 1, 0.5, 2, 1, 0.5, 1, 0.5, 1], #くさ [1, 0.5, 0.5, 1, 2, 0.5, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 0.5, 1], #こおり [2, 1, 1, 1, 1, 2, 1, 0.5, 1, 0.5, 0.5, 0.5, 2, 0, 1, 2, 2, 0.5], #かくとう [1, 1, 1, 1, 2, 1, 1, 0.5, 0.5, 1, 1, 1, 0.5, 0.5, 1, 1, 0, 2], #どく [1, 2, 1, 2, 0.5, 1, 1, 2, 1, 0, 1, 0.5, 2, 1, 1, 1, 2, 1], #じめん [1, 1, 1, 0.5, 2, 1, 2, 1, 1, 1, 1, 2, 0.5, 1, 1, 1, 0.5, 1], #ひこう [1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0.5, 1, 1, 1, 1, 0, 0.5, 1], #エスパー [1, 0.5, 1, 1, 2, 1, 0.5, 0.5, 1, 0.5, 2, 1, 1, 0.5, 1, 2, 0.5, 0.5], #むし [1, 2, 1, 1, 1, 2, 0.5, 1, 0.5, 2, 1, 2, 1, 1, 1, 1, 0.5, 1], #いわ [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 0.5, 1, 1], #ゴースト [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 0.5, 0], #ドラゴン [1, 1, 1, 1, 1, 1, 0.5, 1, 1, 1, 2, 1, 1, 2, 1, 0.5, 1, 0.5], #あく [1, 0.5, 0.5, 0.5, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0.5, 2], #はがね [1, 0.5, 1, 1, 1, 1, 2, 0.5, 1, 1, 1, 1, 1, 1, 2, 2, 0.5, 1] # フェアリー ] df_type_chart = pd.DataFrame(type_chart, columns=type_chart_list, index=type_chart_list)

以下のようなデータフレームを取得できます。Indexが攻撃側、カラムが防御側です。

等倍は1、抜群は2、今一つは0.5、効果なしは0としているので、複合タイプの場合でも掛け算することで対応できるかと思います。