年中アイス

いろいろつらつら

growthforecastで予想気温の推移をグラフ化してみる。

Ubuntu12.04LTS にて、cpanmについては入っているものとして。

growthforecastがCPANに登録されたそうで、cpanmで入ります。
Ubuntuは、公式にあるようにapt-getで関連ツールをインストールして、cpanmで完了。(ちょっと時間かかります)

$ sudo apt-get build-dep rrdtool
$ sudo cpanm install GrowthForecast

さて、growthforecastを使ってグラフ化しようにも、会社じゃないと試そうにも以下の問題が。。。

  • そんなにアクセスのあるWebサーバを持っていない
  • マシンリソースもあんまり使ってない
  • そもそも他のブログと同じようなことを書いても仕方ない

といった問題がありまして、何をグラフ化しようかなーと。

Pythonの勉強がてら、どこかのWebAPIからデータを取ってそれを使ってみようと思い調べてみると、Livedoorさんが提供している、天気予報のAPI*1があったので、それから予想最高気温、最低気温を取得して、それをグラフ化するようにしてみました。

Pythonスクリプト作成

Pythonスクリプトでデータを取ってきて、翌日*2の予想気温をgrowthforecastに投げてます。Python勉強し始めなので、コードは良くない部分がありそうなのと、エラー処理は入ってません。
urllib3を使っているので、pip等でインストールが必要です。*3

$ sudo pip install urllib3

WebAPIの参考に、なぜか福岡県久留米市が載っていたので、地元付近ということもありそのまま使いました。

growthforecastを使ってグラフ化

まず、growthforecastを起動。(dataディレクトリは任意の場所で)

$ growthforecast.pl --data-dir=/opt/growthforecast/data

まず一度、手動でスクリプトを動かしてデータをgrowthforecastに投げて、グラフのページを作ります。

$ python kurume_temp2gf.py

すぐは何も表示されません。しばらくすると、平らなグラフがでてきます。
http://localhost:5125/list/fukuoka/kurume


複合グラフ作成

複合グラフは、growthforecastのページに行って、右上の複合グラフの追加から以下を設定します。
これもAPIでできそうな雰囲気ですが、とりあえず手動。

系列1

タイプ 線グラフ(太線)
データパス tomorrow_max_temperture
モード 実績

2番目以降の系列

タイプ 線グラフ(太線)
データパス tomorrow_min_temperture
モード 実績
スタック しない

しばらくすると、こんな感じ。

作り終わったのが夕方だったので、それ以降気温は特に更新されず。。。

crontabを使って定期的に気温を更新

crontab使って、1日に数回実行して登録して行きます。予報が更新される時間とかは書いてないので、適当に6,9,12,15,18の5回流します。*4

$ crontab -e

5 6,9,12,15,18 * * * python /home/user/kurume_temp2gf.py

明日あたり、ちゃんとグラフになってるかなー。できてたら貼付けます。

2013/2/12追記

1週間グラフ化した結果。

福岡県久留米市は2013/2/6あたり*5は予想気温が高めから-2℃まで動いてて、その後は同じぐらいの予想気温でした。前の日の最低気温が次の日の最高気温とか下がり過ぎですね。グラフ化するとこういった変化が見えて面白いです。

複合グラフのUPDATE_ATが前なのは何だろう?複合グラフの定義修正したときかな。各データのグラフはcrontabの時間になってる。

*1:非商用の個人の利用範囲のみで提供されています。

*2:当日は最低気温がnullになることがあったので、エラー処理省くためにnullになっていない翌日予報を利用しました。

*3:本当はpythonbrewを使ってたんですが、crontabでのpythonbrewの動作がうまくいかなかったので、元の/usr/bin/pythonにurllib3入れてます。crontabでの実行はどこ見るんだったかな。

*4:5分にしているのは、毎時0分は集中するからずらすべきってどこかで見たので、ずらしてみてます。

*5:なんかグラフのx軸が文字化けてますが2013/2/5〜2/12の予想気温です