ようへいの日々精進XP

よかろうもん

ダイナミック!ダイナモー(DynamoDB tutorial)番外編 〜 Google Chart API でちょっとしたグラフを書いてみる 〜

tl;dr

DynamoDB にデータを溜めているのなら、そのデータを可視化しなければ...と思ったけど、さくっとグラフ書けないかなと思ったら Google Chart API なるものがあるらしいので、その Ruby ラッパーである mattetti/googlecharts と合わせて利用させて頂き各地点の PM2.5の値を可視化してみた。


googlecharts について

github.com

サンプルを参考に以下のようなコードを書くだけでサクッとグラフが書けた。

require 'gchart'

chart = Gchart.new( 
                    # グラフの種類を指定(折れ線グラフとか円グラフとか...)
                    :type => 'line',
                    # グラフのテーマを指定
                    :theme => :thirty7signals,
                    # グラフタイトルを指定
                    :title => "example title",
                    # グラフにプロットするデータを指定(最大値を 100 として指定)
                    :data => [[17, 80, 11, 50, 2], [10, 9, 3, 80, 30], [80, 49, 13, 2, 30]], :max_value => 100, 
                    # 凡例を指定
                    :legend => ['courbe 1','courbe 2','courbe 3'],
                    # X 軸、Y 軸にそれぞれラベルを指定する
                    :axis_with_labels => ['x', 'y'],
                    # X 軸、Y 軸の最小値、最大値、増分を指定
                    :axis_range => [[0,100,20], [0,100,10]],
                    # 出力するファイル名を指定
                    :filename => "chart0.png")
chart.file

まずは、以下のように googlecharts をインストールして...

$ gem install googlecharts --no-ri --no-rdoc

上記のサンプルスクリプトを実行すると...

f:id:inokara:20150916124535p:plain

おお。

詳細については README を。


各観測地点の PM2.5 濃度を可視化してみた

こんな感じ

f:id:inokara:20150917171330p:plain

以下のような流れで PM2.5 濃度をグラフ化した。

  • そらまめ君から一時間毎のデータを取得(24 個)
  • 取得したデータを解析して DynamoDB に突っ込む
  • 突っ込んだデータを利用して Google Chart API にリクエストしてグラフを生成
  • 生成したグラフを S3 に保存
  • S3 に保存すると同時に URL を取得
  • 取得した URL を利用して日毎のインデックスページを作成して S3 に保存

上記をスクリプト化して手動で実行した。せっかくなので Datapipeline を利用して一日一回回してみることにする。


ということで

Google Chart API について

Kibana や Grafana のようなイカした感じではないけどサクッとグラフ描けるのいいなあ。

DynamoDB の Provisioned throughput について

  • 当初は Write も Read も 1 に設定していたが処理がとにかく遅かった
  • 試しに Write を 10 に変更しただけで処理時間が半分程度におさまった
  • データを投入している最中でも変更出来るのは嬉しい