CONTENTS コンテンツ

架空のポケモンを作ろう!(6)

生成AIを使おう!

2024.05.06

 生成AIで架空のポケモンを作るシリーズ。前回は草御三家として「桜の木」「精霊」モチーフのポケモン「サクラット」のイラストとH種族値を決定したところ。工程の手作業が多いのでなんかいい感じに自動化したい。まずはデータの集計から試してみよう。

入力:

ポケモンの種族名と、種族名に対応する6つの種族値をデータとしてもつデータベースをpythonで作成する場合、どのような機能を利用すべきでしょうか

出力:

ポケモンの種族名と対応する種族値を持つデータベースをPythonで作成する場合、以下のステップと機能が役立ちます:

  1. データベースの選択
    • SQLite: Pythonに組み込まれているため、別途サーバーを用意する必要がなく、簡単に始められます。
    • PostgreSQLMySQL: 大規模なデータや複数ユーザーのアクセスを想定する場合は、これらのフル機能を備えたデータベース管理システムが適しています。
  2. データモデリング
    • データベースに Pokemons という名前のテーブルを作成します。
    • 各ポケモンの 名前 (種族名)、HP攻撃防御特攻特防速度 といったカラムを用意します。
  3. Pythonライブラリの利用
    • SQLiteの場合は、標準ライブラリの sqlite3 を使用します。
    • SQLAlchemy: Pythonでのデータベース操作を抽象化して扱いやすくするORM (オブジェクトリレーショナルマッピング) ツールです。どのデータベースシステムにも対応しているため、柔軟性があります。
  4. データ挿入
    • Python スクリプトを用いてデータをデータベースに挿入します。これには、CSVファイルやJSONファイルからデータを読み込むことも含まれる場合があります。
  5. データ操作とクエリ
    • データの挿入、更新、削除のための関数を実装します。
    • 複数の種族値に基づいた検索や、特定の条件にマッチするポケモンを見つけるためのクエリを作成します。
  6. ユーザーインタフェースの提供(オプション):
    • コマンドラインツールやウェブアプリケーションを通じて、データベースへの簡単なアクセスを提供します。

以下に、sqlite3 を使用してシンプルなデータベースをセットアップし、ポケモンのデータを挿入する基本的なコード例を示します:

import sqlite3

# データベース接続を開く
conn = sqlite3.connect('pokemons.db')
c = conn.cursor()

# テーブルを作成する
c.execute('''
CREATE TABLE IF NOT EXISTS Pokemons (
    name TEXT,
    hp INTEGER,
    attack INTEGER,
    defense INTEGER,
    sp_attack INTEGER,
    sp_defense INTEGER,
    speed INTEGER
)
''')

# データを挿入する
pokemons = [
    ('ピカチュウ', 35, 55, 40, 50, 50, 90),
    ('イーブイ', 55, 55, 50, 45, 65, 55),
    # 他のポケモンデータ
]

c.executemany('INSERT INTO Pokemons (name, hp, attack, defense, sp_attack, sp_defense, speed) VALUES (?, ?, ?, ?, ?, ?, ?)', pokemons)

# 変更をコミットして接続を閉じる
conn.commit()
conn.close()

この例では基本的なセットアップを行っていますが、実際のアプリケーションではより多くの機能やエラーハンドリングが必要になるでしょう。

 「データベースとして用いる配列の構造聞きたいなー」くらいの感覚で聞いたら100倍くらい返ってきた。SQLはよくわからんから、手を出すかは置いといて今はわきに置いとくとして、配列の形は普通に(種族名、H~S)の7要素のリスト×種族数という感じか。これでいい感じに作成できないか

入力:以下のルールに従う、草御三家の種族値を格納した配列を作成してください。
1.配列の要素は、要素を7個持つリストとします。
2.それぞれのリストは、先頭から、種族名、HP種族値、攻撃種族値、防御種族値、特攻種族値、特防種族値、素早さ種族値のデータをもちます。
3.配列の各要素は、ポケモンの各世代で最初に貰える草タイプのポケモンとします。

PokedexGPT V3:

[
    ['bulbasaur', 45, 49, 49, 65, 65, 45],
    ['chikorita', 45, 49, 65, 49, 65, 45],
    ['treecko', 40, 45, 35, 65, 55, 70],
    ['turtwig', 55, 68, 64, 45, 55, 31],
    ['snivy', 45, 45, 55, 45, 55, 63],
    ['chespin', 56, 61, 65, 48, 45, 38],
    ['rowlet', 68, 55, 55, 50, 50, 42],
    ['grookey', 50, 65, 50, 40, 40, 65],
    ['sprigatito', 40, 61, 54, 45, 45, 65]
]

各行はそれぞれ、フシギダネ、チコリータ、キモリ、ナエトル、ツタージャ、ハリマロン、モクロー、サルノリ、ニャオハのデータを表しています。 ​

 簡単にできた。前回エラーを吐いたのは出力の様式を指定しなかったためか?なんにせよサクッとデータを取得できたのは素晴らしい。

入力:HP、攻撃、防御、特攻、特防、素早さ種族値の最小値、最大値、平均値、中央値をそれぞれ出力してください。

出力:

以下は、草タイプの御三家ポケモンの各種族値(HP、攻撃、防御、特攻、特防、素早さ)の最小値、最大値、平均値、中央値です:

HP:
- 最小値: 40
- 最大値: 68
- 平均値: 49.33
- 中央値: 45

攻撃:
- 最小値: 45
- 最大値: 68
- 平均値: 55.33
- 中央値: 55

防御:
- 最小値: 35
- 最大値: 65
- 平均値: 54.67
- 中央値: 55

特攻:
- 最小値: 40
- 最大値: 65
- 平均値: 50.22
- 中央値: 48

特防:
- 最小値: 40
- 最大値: 65
- 平均値: 52.78
- 中央値: 55

素早さ:
- 最小値: 31
- 最大値: 70
- 平均値: 51.56
- 中央値: 45

これらの値は、各御三家ポケモンの初期形態のデータを基に算出されています。

 「種族名、種族値の7要素のリストの形で種族を集計させる→リストの代表値を計算させる」の2ステップで種族値決定に役立つデータを簡単に集められそうだ。いい進捗感だ。

次回に続く

この記事をシェアする