ゲレの工房

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

Google スプレッドシート共有URLを利用し、直接CSVダウンロードして Jupyter Notebookに読み込ませてみた


スポンサーリンク


以前までの記事はこちら
blog.gelehrte.com
私がやっているゲーム、FF14の嗜好品、ピュアホワイトとジェットブラックというアイテムの価格動向です。
移動平均線を出すところまではやっていましたが、CSVファイルを一旦ローカルPCにダウンロードしてから動かしていました。
今回は、URLを指定し、直接プログラム内でCSVファイルを使用しています。
そのやり方について紹介します。

使用するスプレッドシートの共有URL

以前までの記事ではURLを別名で書いていましたが、今回はURLそのものを書きます。
https://docs.google.com/spreadsheets/d/1Dhv9nZCDsnVvNQN1qCe6Y-YLbwEa6iH8pk9ik64gwIM/edit?usp=sharing

共有URLから直接CSVをダウンロードするURLに書き直す

ここで重要なのは上記URLのうち、「edit?usp=sharing」の部分です。
これを「export?format=csv&gid=0」と書き直します。
つまり
https://docs.google.com/spreadsheets/u/2/d/1Dhv9nZCDsnVvNQN1qCe6Y-YLbwEa6iH8pk9ik64gwIM/export?format=csv&gid=0
というURLになります。

解説

export?format=csvの部分はわかりやすいと思います。
そのままCSVをエクスポートするという意味です。

gid=0は何番目のシートをCSVダウンロードするかです。
1番目のシートはgid=0となります。
2番目のシートはgid=1、3番目のシートはgid=2・・・・・という感じになります。

Jupyter Notebookのソースコード

前回までとの変更点

CSVをURLから直接読み込む

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'])
というように、read_csvの第一引数をファイル名からURLに書き直しました。
これでも動作するようです。

移動平均線を10日から20日

細かい話ですが、前回の記事から十数日経ったので、移動平均線の平均間隔を10日から20日にしました。

実際のソースコード

%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()

結果

このようになりました

ピュアホワイト

f:id:gelehrtecrest:20190821075705p:plain

ジェットブラック

f:id:gelehrtecrest:20190821075805p:plain

ピュアホワイトもジェットブラックも値下がり傾向にあることがわかりますね。
今後も値下がりしてくれると嬉しいなぁ。

終わりに

CSVをローカルにダウンロードせずに直接Jupyter Notebookで読み込む方法について書きました。
この方法を使えば、毎日cronでプログラムを回せば、Webブラウザ上でプロットを自動的に更新表示できるシステムができるんじゃないかなと思っています。
もう少し、プログラムをいじってみたいものですね。


スポンサーリンク