LoginSignup
1
1

More than 3 years have passed since last update.

ドラクエウォークのモンスターをk-meansでクラスタリングしてみた

Posted at

YouTubeのゲーム実況などを見てると「このモンスターはあのモンスターと似てますね」という発言を聞くことがあるが、そのたびに、よく頭に入ってるなぁと感心する。ドラクエウォークはモンスターを倒すと稀に「こころ」を入手でき、身につけるとHPが高くなるなど効果があるが、この8つのパラメータをk-meansでクラスタリングすると、似たようなことができるんじゃないだろうか。

まず、こんなCSVファイルを用意する。(別に作ったやつの流用なので、ちょっと古い)

name,cost,color,hp,mp,power,defense,attack,recover,speed,skill
フレイザードA,99,紫,90,85,15,26,64,25,47,69
暴嵐天バリゲーンA,99,黄,110,44,51,79,29,29,28,44
アカイライS,99,青,79,47,55,52,25,23,72,72
ホロコーストS,99,紫,74,87,14,46,72,29,54,63
ガーゴイルA,98,赤,73,31,68,41,11,11,60,53

これをpandasで読み込みscikit-learnのKMeansでクラスタリングする。とりあえず10個に分類してみた。

import pandas as pd
import pprint
from sklearn.cluster import KMeans

n_cluster = 10

monsters = pd.read_csv("monster.txt", sep=',', na_values=".")
df = monsters.drop('name',axis=1).drop('color',axis=1)
kmeans_model = KMeans(n_clusters=n_cluster).fit(df.iloc[:, 1:])
labels = kmeans_model.labels_

monster_type = []
for i in range(n_cluster):
    monster_type.append([])

n = 0
for i in labels.tolist():
    name = names.iloc[n]['name']
    monster_type[i].append(name)
    n = n + 1

pprint.pprint(monster_type)

これを見やすく整形してみたのがこちら。ちょっとクラスタ数が10だと大雑把すぎるかもしれない。

スクリーンショット 2021-03-22 18.05.13.png

参考にした記事で色分けして表示していたので、同じように表示してみた。
https://qiita.com/maskot1977/items/34158d044711231c4292

# https://www.color-site.com/separate_hues
color_codes = {
    0:'#BA7836',
    1:'#ADBA36',
    2:'#5EBA36',
    3:'#36BA5E',
    4:'#36BAAD',
    5:'#3678BA',
    6:'#4336BA',
    7:'#9236BA',
    8:'#BA3692',
    9:'#BA3643',
}
colors = [color_codes[x] for x in labels]

import matplotlib.pyplot as plt
from pandas import plotting

plotting.scatter_matrix(
    df[df.columns[1:]],
    figsize=(6,6),
    color=colors,
    alpha=0.8, 
    diagonal='kde'
)
plt.show()

スクリーンショット 2021-03-22 17.48.06.png

データ一式は下記に置いているので試したかったらgit cloneしていただければ。

1
1
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
1
1