ゲレの工房

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

Jupyter Notebookでプロットするプログラム書いたから、AWS EC2上で定期動作させるまでの話


スポンサーリンク


前回までで、Google スプレッドシートでまとめたデータをJupyter Notebookで直接実行し、移動平均線のプロットすることができるようになりました。
blog.gelehrte.com
プロットしている価格は、私が遊んでいるFF14というゲームの嗜好品のピュアホワイトとジェットブラックです。

今度はプロットを保存して、EC2上で定期的に実行するところまで。
プロットした画像はこちらになります。
http://www.gelehrte.com/codes/purewhite/figure.png

2019/08/26時点での画像はこちら
f:id:gelehrtecrest:20190826133937p:plain:w300

やりたいこと

Googleスプレッドシートにデータを書き込んだら、その結果が定期的にプロットを画像化して、ブラウザで見れるようにしたい。

やったこと

前回までのソースコードを修正

具体的には

  • %matplotlib inlineをコメントアウト
  • プロットを画像化するため、保存コードを作成 plt.savefig('figure.png')

ソースコード全体はこちらになります。

#%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('https://docs.google.com/spreadsheets/u/2/d/1Dhv9nZCDsnVvNQN1qCe6Y-YLbwEa6iH8pk9ik64gwIM/export?format=csv&gid=0', 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('https://docs.google.com/spreadsheets/u/2/d/1Dhv9nZCDsnVvNQN1qCe6Y-YLbwEa6iH8pk9ik64gwIM/export?format=csv&gid=0', 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()

# 移動平均線 20日
Y_white_20 = pd.Series(df_white.mean(axis='columns')).rolling(20).mean().to_frame()
Y_black_20 = pd.Series(df_black.mean(axis='columns')).rolling(20).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_20, label="20days 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_20, label="20days moving average")

#凡例
plt.legend()
#plt.show()
plt.savefig('figure.png')

AWS EC2環境にpython3環境を用意

こちらのサイトを参考にしました。
qiita.com

具体的にやったことはこちら

prevをインストール

# 関連ライブラリをヤムる
sudo yum update -y
sudo yum -y install git readline-devel zlib-devel bzip2-devel sqlite-devel openssl-devel
sudo yum -y groupinstall "Development Tools"

# pyenvとvirtualenvを持ってくる
git clone https://github.com/yyuu/pyenv.git /home/ec2-user/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git /home/ec2-user/.pyenv/plugins/pyenv-virtualenv

# 環境変数にpyenvを追加(viで書いてもOK)
echo 'export PYENV_ROOT="/home/ec2-user/.pyenv"' >> /home/ec2-user/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> /home/ec2-user/.bash_profile
echo 'eval "$(pyenv virtualenv-init -)"' >> /home/ec2-user/.bash_profile
echo 'eval "$(pyenv init -)"' >> /home/ec2-user/.bash_profile

# bashリロード
source /home/ec2-user/.bash_profile
exec $SHELL -l

python3と必要ライブラリをインストール

# インストールできるバージョンの確認
pyenv install -l | less

# 今回は3.7.4を入れました
pyenv install 3.7.4

# virtualenv作成
pyenv virtualenv 3.7.4 v374

pythonコードを自動実行する環境を用意

mkdir /home/ec2-user/pure_white
# Jupyter Notebookのソースコードをコピーして上記の修正を行う
vim /home/ec2-user/pure_white/pure_white.py
# cron用にシェルスクリプトを書く
vim /home/ec2-user/pure_white/pure_white.sh
chmod 755 /home/ec2-user/pure_white/pure_white.sh

pure_white.shのソースコードはこちら

cd /home/ec2-user/pure_white
source /home/ec2-user/.bash_profile
pyenv activate v374
python pure_white.py
pyenv deactivate
cp /home/ec2-user/pure_white/figure.png /var/www/html/codes/purewhite/

最後のcpで、公開できる場所にコピーしています。

今後の予定

ひとまず、ブラウザで画像が見れるようにできました。
今後はLaravelなどを使って、綺麗にプロットを表示できるようにしたいですね。

FF14の人への話:ピュアホワイトとジェットブラック

漆黒が始まって数ヶ月たち、嗜好品の値段も下がる傾向にありますね。
物価自体も下がり傾向なのかな。
このまま値下がって
ピュアホワイトが安く手に入るようになるといいなぁ・・・・w


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


スポンサーリンク