2
0

More than 1 year has passed since last update.

遊戯王カードを分析してみたかった。

Last updated at Posted at 2022-03-11

データセット作成

取得元

データセットを公式サイトのデータから作成。
ブルーアイズの場合
https://www.db.yugioh-card.com/yugiohdb/card_search.action?ope=2&cid=4007

データセットの中身

cardid
カード名
ふりがな
CardName
属性
レベル
ペンデュラムスケール
ペンデュラム効果
種族
種類
攻撃力
守備力
効果
規制
最古リリース
最新リリース
収録回数
url

中身としてはこんな感じ、
image.png

モンスターも魔法もトラップも、全て同じ表に入力した。固有のものはNaNが入力されている。
魔法カードの場合は、攻撃力とかがNanと表示。

カードの枚数確認

2022/3/10 時点のデータです。

データ件数

len(data)
11562

11562 件 あるようです。

いろんなジャンル別の枚数確認

種類

python
data.groupby(["種類"]).count()[["cardid"]].sort_values('cardid', ascending=False).head(10)

image.png
モンスターカードがかなり細分化されてしまっているので・・・。合体して再度確認・・・。

python
tempdata = data.copy(deep=True)
tempdata["種類"][tempdata["種類"].str.contains('魔法')] = "魔法"
tempdata["種類"][tempdata["種類"].str.contains('罠')] = "罠"
tempdata["種類"][~tempdata["種類"].str.contains('罠|魔法')] = "モンスター"
tempdata.groupby(["種類"]).count()[["cardid"]].sort_values('cardid', ascending=False)

image.png

ちなみ1種類しかいないレアな種類たちです。
image.png

属性

python
data.groupby(["属性"]).count()[["cardid"]].sort_values('cardid', ascending=False)

image.png

種族

python
data.groupby(["種族"]).count()[["cardid"]].sort_values('cardid', ascending=False).head(10)

image.png

属性×種族

python
zoku_syu = data.groupby(["属性","種族"]).count()[["cardid"]].sort_values('cardid', ascending=False)
zokusei_heat = zoku_syu.pivot_table(index='種族', columns='属性',values='cardid').fillna(0).astype("int")
zokusei_heat = zokusei_heat.sort_values('闇属性')
zokusei_heat = zokusei_heat.reindex(columns=['水属性', '炎属性', '風属性','地属性','闇属性','光属性','神属性'])
f, ax = plt.subplots(figsize = (20, 10))
ax = sns.heatmap(data=zokusei_heat, cmap="Reds", annot=True, fmt="d")
ax.set_title("属性×種族")

image.png

種族単体では戦士が1番多かったですが、組み合わせでは、闇×悪魔の組み合わせが一番多いようです。
神属性は特別だとしても、それ以外の属性で、1件しかないレアな組み合わせのモンスターもいるみたいですね。

レベル分布

python
data.groupby(["レベル"]).count()["cardid"]

image.png

レベル4が一番多く、レベル0,レベル13は、ほぼないですね・・・!

2022年3月12日追記:0と13のデータを公式で調べてみると、レベルと言うよりランクでしたね。
カードの種類ごとに調べてみるのもおもろそうなので次回編集時に調査。

カード種類別のレベル分布

python
tempdata = data.copy(deep=True)
tempdata["種類"][tempdata["種類"].str.contains('エクシーズ')] = "エクシーズ"
tempdata["種類"][tempdata["種類"].str.contains('融合')] = "融合"
tempdata["種類"][tempdata["種類"].str.contains('儀式')] = "儀式"
tempdata["種類"][tempdata["種類"].str.contains('ペンデュラム')] = "ペンデュラム"
tempdata["種類"][tempdata["種類"].str.contains('リンク')] = "リンク"
tempdata["種類"][tempdata["種類"].str.contains('シンクロ')] = "シンクロ"
tempdata["種類"][tempdata["種類"].str.contains('チューナー')] = "チューナー"
tempdata["種類"][~tempdata["種類"].str.contains('エクシーズ|融合|儀式|ペンデュラム|リンク|シンクロ|チューナー')] = "通常"

pivot_table = tempdata.groupby(["レベル","種類"]).count()[["cardid"]].sort_values('レベル', ascending=True)
pivot_table = pivot_table.pivot_table(index='レベル', columns='種類',values='cardid').fillna(0).astype("int")

f, ax = plt.subplots(figsize = (20, 10))
ax = sns.heatmap(data=pivot_table, cmap="Reds", annot=True, fmt="d")
ax.set_title("カード種類別レベル")

image.png

カードの種類毎に、分布が違いますね。

収録回数ランキング

python
#収録回数ランキング
countable = data.sort_values('収録回数', ascending=False).head(10)
x = countable["カード名"][::-1]
y = countable["収録回数"][::-1]

# グラフの描画
plt.barh(x, y)
plt.show()
display(countable[["カード名","収録回数"]].head(3))

image.png

サイクロンが圧倒的1位でした。

今日はここまで。また暇なときに記事を更新します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0