2
1

More than 3 years have passed since last update.

DQウォークのレベルアップに必要な経験値の数式モデルを求める(1)

Posted at

概要(TL;DR)

ドラクエウォークのレベルアップに必要な経験値を題材にpythonの数値計算ライブラリを練習してみたときの記録です。(1)はデータを確認するで(2)で数式モデルを算出しようと思います。
(現在 勉強中なので間違い等をどんどん指摘してもらえたら嬉しいです。)

1.データを読込み可視化する
2.データを数式モデル化する(回帰分析)

まずはデータを眺める

必要なライブラリを読み込む。今回は使わないのもあるが、次回使うので読み込んでおく。

import pandas as pd
import numpy as np
import scipy as sp

import matplotlib.pyplot as plt
import seaborn as sns

sns.set()
%matplotlib inline
%precision 3

参考URLからレベル毎に必要な経験値をテキストファイルに転記する。

zsh
% head data.csv
0
9
23
50
105
192
346
599
962
1397

よし早速、read_csv()だ。

df = pd.read_csv('data.csv')
df.head()

Screen Shot 2020-01-31 at 0.09.06.png

王様「おお、ヘッダー列が無いデータをそのまま読み込んでしまうとは何事だ。」

read_csv()のオプションでheader=Noneにするか、names=[]でカラム名を設定する。

df = pd.read_csv('data.csv',names=['EXP'])
df.head()

Screen Shot 2020-01-31 at 0.09.42.png

indexが0から始まっているので、このままだとレベル0からレベル1になるために必要な経験値が9になってしまう。そこで、indexに1を加える。

df.index = df.index+1
df.head()

Screen Shot 2020-01-31 at 13.49.06.png

これだけだと、レベルアップに必要な経験値はわかるが、そのレベルに到達するまでに必要な経験値がわからないので累積和(Cumulative Sum)も算出しておく。

df['CUMSUM_EXP'] = df['EXP'].cumsum()
df.head()

Screen Shot 2020-01-31 at 20.23.49.png

次のレベルアップまでに必要な経験値をグラフに

plt.plot(df.index,df['EXP'])
plt.xlabel('LEVEL')
plt.ylabel('EXP')
plt.grid(True)

image.png

レベル50前後で、明らかにモデルが違うような気が・・・・。

累計で必要な経験値を折れ線グラフに

plt.plot(df['CUMSUM_EXP'],'x')
plt.xlabel('LEVEL')
plt.ylabel('EXP')
plt.grid(True)

Screen Shot 2020-01-31 at 0.51.15.png

こっちはきれいな指数関数のグラフになりそうな気がする。

要約統計量を確認する

pandasのdescribe()を使って要約統計量(descriptive statistics value)を確認してみる。

pd.options.display.float_format = '{:.2f}'.format
df.describe()

Screen Shot 2020-01-31 at 13.50.40.png

早速、先程のグラフに分位数の水平線を入れてみる。
次のレベルに必要な経験値のグラフに、累積経験値の分位数を当てはめる。(ここに違和感があるが、結果として正しいと思う。)

plt.plot(df['EXP'],label = 'EXP')
plt.axhline(df['CUMSUM_EXP'].quantile(0.25), ls = "-.", color = "magenta",label="25%")
plt.axhline(df['CUMSUM_EXP'].quantile(0.50), ls = "-.", color = "green",label="50%")
plt.axhline(df['CUMSUM_EXP'].quantile(0.75), ls = "-.", color = "Orange",label="75%")

plt.xlabel('LEVEL')
plt.ylabel('EXP')
plt.legend()
plt.grid(True)

image.png

ん?75%の線があんな場所にあるので、レベル50から55までを抜き出してグラフ化してみる。

plt.plot(df['EXP'][49:55],label = 'EXP')
plt.axhline(df['CUMSUM_EXP'].quantile(0.75), ls = "-.", color = "Orange",label="75%")


plt.xlabel('LEVEL')
plt.ylabel('EXP')
plt.legend()
plt.grid(True)

image.png

レベル55までに必要な経験値の25%はレベル54から55になるまでに経験値とほぼ等しい・・・・・・。先日リリースされた上級職は、レベル55にしないと永続スキルがつかないので、これは悲報ですね・・・・。

つづく

参考URL

ドラクエウォーク攻略wiki
https://gamerch.com/dq-walk/entry/102321

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