[GCP] PythonでBigQueryからグローバルウェイTMCNの価格を取得してmatplotlibで2軸で表示

まず、GCPにBigQueryにTMCNの価格を入れます。

1. nomics.comというサイトからFree CSVをdownload
https://nomics.com/assets/tmcn-timecoin-protocol

直近100日分のデータを取得できる。timestamp, open, hight, low, close, volumeなど、一般的なデータ形式。

2. GCPのBigQueryにDownloadしたtmcnのデータをimport

3. PythonでGCP BigQueryからデータを取得して、matplotlibで2軸の折れ線グラフを作る

from google.cloud import bigquery
import matplotlib.pyplot as plt

client = bigquery.Client.from_service_account_json('./client_credentials.json')

QUERY = (
    'SELECT * FROM `gce-test-331622.test.tmcn` ORDER BY timestamp ASC LIMIT 100')
query_job = client.query(QUERY)  
rows = query_job.result()

x = []
y1 = []
y2 = []
for row in rows:
    print(str(row.timestamp)[0:10] + " close:" + str(row.close) + " volume:" + str(row.volume))
    date = str(row.timestamp)[0:10]
    x.append(date)
    y1.append(row.close)
    y2.append(row.volume)

plt.figure(figsize=(10,8))
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

plt.title("tmcn 2021/08/13-2021/11/21")

ax1.plot(x, y1, marker=".", color = "magenta", linestyle = "--")
ax1.set_ylabel('$close-price(pink)$')
ax2.plot(x, y2, marker="o", color = "cyan", linestyle = ":")
ax2.set_ylabel('$trade-volume(blue)$')

plt.savefig('img/tmcn.jpg',dpi=100)

4. 作成した画像をHTMLで表示

	<h1>timcoin protocol</h1>
	<a href="https://github.com/TimeCoinProtocol/timecoin">TimeCoinProtocol / timecoin</a><br>
	<img src="img/tmcn.jpg" width="400" height="300">
// 省略

5. Githubにpushして、Google Cloud DeployでGCEにデプロイする

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args: ['compute', 'scp', '--recurse', 'img', 'instance-1:/var/www/html/img' , '--zone','asia-northeast1-a']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args: ['compute', 'scp', '--recurse', 'index.html', 'instance-1:/var/www/html/index.html' , '--zone','asia-northeast1-a']

cloudbuild.yamlで以下のように書くと、argsは下のargsしか実行されないので、2回書かなければならないので注意が必要

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args: ['compute', 'scp', '--recurse', 'img', 'instance-1:/var/www/html/img' , '--
  args: ['compute', 'scp', '--recurse', 'index.html', 'instance-1:/var/www/html/index.html' , '--zone','asia-northeast1-a']

うーむ、データ量が多い時などはBigQueryは使えそうだにゃーーーーーーーー