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


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

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

中身としてはこんな感じ、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/b2c80155-c4a6-6846-4fda-d67354027a26.png)

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


# カードの枚数確認
2022/3/10 時点のデータです。
## データ件数
```python
len(data)
11562
```
11562 件 あるようです。

# いろんなジャンル別の枚数確認
## 種類
```:python
data.groupby(["種類"]).count()[["cardid"]].sort_values('cardid', ascending=False).head(10)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/4bd93fae-a815-2642-ade1-44b47988d854.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/49785693-3b71-c7f1-735d-5df071023dd7.png)


ちなみ1種類しかいないレアな種類たちです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/9b42a48f-a68b-9629-242f-547a8a2cd3e9.png)


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/8960971c-aad7-17e8-a266-ee347993862e.png)

## 種族
```:python
data.groupby(["種族"]).count()[["cardid"]].sort_values('cardid', ascending=False).head(10)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/8c744009-a79a-47f4-b0f6-f349f9694965.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/8ab93b1f-f524-9f3b-cd95-8e0f0bd06216.png)

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

## レベル分布
```:python
data.groupby(["レベル"]).count()["cardid"]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/88cd0849-0ab1-66e7-0de7-4ee90480b1b5.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/62e0d579-8a65-1192-4faf-49154929e669.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610285/e8b7f676-c193-f28a-fab7-ce04e02ca005.png)

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

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