tech#ポケモンSV#Python

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

CSV読み取りではなくコードとしてポケモンのタイプ相性をデータフレームとして取得します

はじめに

ポケモンのタイプ相性を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が攻撃側、カラムが防御側です。

ss_2024-11-04_23_05_37.png

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

ポケモンのタイプ相性をPandasのデータフレームとして取得するサンプルコード | Shanari