ゲレの工房

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

Jupyter Notebookでpandasを用い、csvのそれぞれの列の平均を出し、移動平均線を出すまでの作業


スポンサーリンク


前回の記事の続きです。
blog.gelehrte.com

やりたいことは、私のやっているゲームFF14の各ワールドの嗜好品(ピュアホワイト・ジェットブラック)の価格変動を、株価変動の表のように移動平均線で出したいということです。

このようになりました。

f:id:gelehrtecrest:20190802163240p:plain
ピュアホワイト
f:id:gelehrtecrest:20190802163252p:plain
ジェットブラック

移動平均線で5日線と10日線を出しましたが、どうやらどちらにしても価格上昇を表していますね。
移動平均線の読み方についてはここでは割愛するとして、ソースコードの解説をします。

ソースコード

CSV

連日、嗜好品の価格を調べています。
上記のグラフは執筆時2019年8月2日までの記録を使っていますが、リンク先のスプレッドシートはもっと先まで記述しているかもです。
docs.google.com

Jupyter Notebookでのソースコード

ソースコードをまずはぺたり。少し解説を加えます。

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt

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

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

# csv読み込み、1列目は日付型で読み込み、インデックスとする
# ピュアホワイト
df_white = pd.read_csv('20190802.csv', index_col=0, parse_dates=True,usecols=['date', 'Aegis_white','Atomos_white','Carbuncle_white','Garuda_white','Gungnir_white','Kujata_white','Ramuh_white','Tonberry_white','Typhon_white','Unicorn_white'])
# ジェットブラック
df_black = pd.read_csv('20190802.csv', index_col=0, parse_dates=True,usecols=['date', 'Aegis_black','Atomos_black','Carbuncle_black','Garuda_black','Gungnir_black','Kujata_black','Ramuh_black','Tonberry_black','Typhon_black','Unicorn_black'])


# 説明変数設定
X_white = df_white.index.to_frame()
X_black = df_black.index.to_frame()

# 全日の各ワールドの平均
Y_white = df_white.mean(axis='columns').to_frame()
Y_black = df_black.mean(axis='columns').to_frame()

# 移動平均線 5日
Y_white_5 = pd.Series(df_white.mean(axis='columns')).rolling(5).mean().to_frame()
Y_black_5 = pd.Series(df_black.mean(axis='columns')).rolling(5).mean().to_frame()

# 移動平均線 10日
Y_white_10 = pd.Series(df_white.mean(axis='columns')).rolling(10).mean().to_frame()
Y_black_10 = pd.Series(df_black.mean(axis='columns')).rolling(10).mean().to_frame()


plt.subplot(ITEM_NUM, 1,1) 
plt.title('white')
plt.plot(X_white, Y_white, label="average")
plt.plot(X_white, Y_white_5, label="5days moving average")
plt.plot(X_white, Y_white_10, label="10days moving average")
plt.legend()

plt.subplot(ITEM_NUM, 1,2) 
plt.title('black')
plt.plot(X_black, Y_black, label="average")
plt.plot(X_black, Y_black_5, label="5days moving average")
plt.plot(X_black, Y_black_10, label="10days moving average")

#凡例
plt.legend()
plt.show()

pythonソースコード解説

read_csv

# ピュアホワイト
df_white = pd.read_csv('20190802.csv', index_col=0, parse_dates=True,usecols=['date', 'Aegis_white','Atomos_white','Carbuncle_white','Garuda_white','Gungnir_white','Kujata_white','Ramuh_white','Tonberry_white','Typhon_white','Unicorn_white'])

pandasのread_csvで読むのですが、

1列目を日付として読む

index_col=0, parse_dates=True 部分です。0番目=1列目をindexとし、parse_datesを有効にして日付として読みます。

usecolsで読みたい列を指定

スプレッドシートでは読みたい列(ここでは嗜好品:ピュアホワイト)の各ワールドの情報が混ざっているので、列名を指定して読み込んでいます。

to_frame()でDataFrame型に変換

プロットの前に型を合わせます。X軸はこちら
X_white = df_white.index.to_frame()

Y軸も同じようにto_frame()で合わせます。
Y_white = df_white.mean(axis='columns').to_frame()

meanで平均を計算

引数なしだと、列での平均を計算するmean()関数。
ここでは行あたり(同じ日付での各ワールドの平均)を計算したいので、axis='columns'と指定します

pandas.Series.rolling()で移動平均線を計算

ソースコードではこちら
Y_white_5 = pd.Series(df_white.mean(axis='columns')).rolling(5).mean().to_frame()

df_white.mean(axis='columns')で日付ごとの平均を出しているので、その日数のうち5日をrollingで丸めます。
そのあと .mean()を使うことで5日分の平均を出します。
例えば .sum()などを使えば合計値などを出せます。

その他プロットについて

それ以外については以前の記事を参考にしてください。
blog.gelehrte.com

FF14としての考察

ここからはFF14のゲームの話をします。

ピュアホワイト・ジェットブラックについて

漆黒が始まってエデン零式も始まり、みなさん忙しい様子。
ピュアホワイト・ジェットブラック自体はリテイナーが掘り出し物で拾ってくるしかゲーム内では入手方法がないので、流通量自体が減っているのではないかなと思われます。
まぁ、モグステーションで買えるので、買う人は円で買っちゃうんでしょうね。

今後について

とりあえずあと数ヶ月ほど記録を残し、分析をしてみたいと思います。
まだまだピュアホワイトを集めたいですからね。

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


スポンサーリンク