ゲレの工房

ゲーム好きの中の人が、自分が作りたいアプリを作る記録です

Jupyter Notebookを使ってFF14内の嗜好品のデータ分析:全日数の線形回帰と直近5日分の線形回帰の練習


スポンサーリンク


現在私はFF14というゲームをやっているのですが、以前このような記事を書きました。
blog.gelehrte.com

FF14の中で出てくる競売商品をJupyter Notebookで分析しようという試みです。
前回の記事と同じく、以下の雑誌を参考にしました。プログラムも引用しています。

日経ソフトウエア 2019年 7 月号

読み込ませたデータ

こちらも以前の記事にも書いたのですが、再掲します。
また読む時期によっては引き続きデータを更新しているため値が変わっているかもしれませんが、本記事を書いたのは2019/07/27で、そこまでのデータを用いています。
docs.google.com

上記スプレッドシートのデータの読み方

雑誌に書いてあったやり方とデータの取り方が違うため少し補足。
FF14内の競売があるワールドは10個。
それぞれ、Aegis、Atomos、Carbuncle、Garuda_、Gungnir、Kujata_white、Ramuh、Tonberry、Typhon、Unicornです。
探している商品はピュアホワイトとジェットブラック。
スプレッドシートでは_white、_blackで表記しています。

テスト環境

Jupyter Notebook

今回はJupyter Notebookの使い方の勉強の一環として触りました。

動作させたプログラム

雑誌に書かれていたプログラムを一部改変して使用しました。
一応添付します。

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
from sklearn import linear_model

SERVICE_NUM = 10 # エレメンタルDCのワールド数
ITEM_NUM = 2 # 分析対象の商品の個数(ピュアホワイトとジェットブラック)
RECENT_DAYS = 5 # 直近5日で分析

register_matplotlib_converters()

# グラフのサイズ設定
plt.figure(figsize=(15, 18))

# 線形回帰モデルの生成
clf = linear_model.LinearRegression()

# csv読み込み、1列目は日付型で読み込み、インデックスとする
df = pd.read_csv('20190727.csv', index_col=0, parse_dates=True) # 今回は20190727.csv

# 説明変数設定
X = df.index.to_frame() # 全日
X_recent = X.tail(RECENT_DAYS) # 直近

# プロット先の番号の初期化
no = 1

# 商品ごとにDC内のワールドのデータ分析とグラフの生成
for i, (col_name, Y) in enumerate(df.iteritems()):
    # 商品同じグラフにプロット
    if i % ITEM_NUM == 0:
        no = 1; # 1つ目のプロットに
        plt.subplot(ITEM_NUM, 1,no) # プロット先を設定
        plt.title('item' + str(no))
    else:
        no += 1 # プロット先を1つ進める
        plt.subplot(ITEM_NUM, 1,no) # プロット先を設定
        plt.title('item' + str(no))
        
    # 全日のグラフ作成
    plt.plot(X, Y, label=col_name)
    
    # 全日で分析
    clf.fit(X, Y)
    plt.plot(X, clf.predict(X.values.astype(float)),linestyle='dashed', label=col_name + '_reg') # 回帰直線描画
    
    #直近で分析
    clf.fit(X_recent, Y.tail(RECENT_DAYS)) # 学習
    label_recent = f'{col_name}_reg_recent_{RECENT_DAYS}days'
    plt.plot(X_recent, clf.predict(X_recent.values.astype(float)), linestyle='dotted', label=label_recent) # 回帰直線描画
    
    plt.legend() # 凡例表示
    
plt.show()

プログラムの実行

Jupyter Notebook上で動作させます。

f:id:gelehrtecrest:20190727134238p:plain

結果

ピュアホワイト

計測し始めたのが漆黒アーリーの時期からなので、アーリーから嗜好品がどのように動いたのかがわかるかと思います。
f:id:gelehrtecrest:20190727134602p:plain

分析

全体的に値上がり傾向にあります。特にTonberryワールドは高値をキープしていますね。最安値はGungnirでしょうか。
いずれにせよ、値上がり傾向です。
漆黒が始まって安定してから、みんな比較的ギルの使い道がなくなって、嗜好品に手を出すようになってきたのかもしれませんね。

ただここ直近5日間に関してはGarudaワールドで値下がり

ジェットブラック

f:id:gelehrtecrest:20190727134813p:plain

分析

こちらは比較的値動きが少ないですね。ピュアホワイトに比べて使用用途が少ないのでしょうか。

終わりに

今回は練習として線形回帰での分析を行いました。
本当なら各ワールドの比較より全ワールドの平均から、値下がりしそうな日にちを探し出したり、株価変動のような移動平均線を出せればいいのかなとか思っていたりします。
この辺りはまだまだ勉強不足ですね。
もっとJupyter Notebookになれる必要がありそうです。

それでは今回はここまで。


スポンサーリンク