redashによる移動平均線の可視化について

こんにちは。 @smdmts です。今回は Redash Advent Calendar 2017 13日目の記事を書かせて頂きます。

移動平均線について

移動平均とは時系列データにおける一定期間における平均値を連続で出すことで、曜日や季節に起因する変動を排除することが可能となります。DELISH KITCHENのアプリ分析でも曜日変動によるユーザ行動を平滑化するために、各KPIの7日移動平均・30日移動平均を重要な指標として利用しています。日経平均などのテクニカル分析では25日線や75日線が利用されているのでご存じの方もいるかと思います。(詳細な移動平均線の解説はwikipediaをご覧下さい。)

そこで今回はredashで移動平均線の算出方法について解説してみたいと思います。

データセットの準備

今回はテストデータとして、気象庁のサイトから東京都の平均気温を利用させていただき、移動平均線算出の仕組みを解説したいと思います。embulkを利用してPostgreSQLにバルクロードしてみましょう。なおデータには一部加工が必要となるため、このembulkスクリプトおよびデータセットはgithubでも公開しています。スクリプトの実装とデータは参照して下さい。

  • run.sh (Embulk実行スクリプト)
embulk gem install embulk-output-postgresql
embulk run ./config.yml
  • data.csv(日付,気温のCSVファイル)
2016/12/5,12.7
2016/12/6,10.8
2016/12/7,7.5
2016/12/8,8.6
-- 以下続く

データ取り出し用SQL

redashで以下のSQLを発行してみましょう。Window関数を利用して移動平均値を算出します。なお今回はPostgreSQLを対象としていますが、BigQuery/Redshift/Presto/Hiveのようなビッグデータ系のSQLエンジンでも同様の集計処理を書くことが可能です。

SELECT
date, -- 日付
temperature, -- 気温
-- 現在行から後方7レコードを取得するwindow関数を利用して加算平均を算出する
avg(sum(temperature))
OVER (
ORDER BY date_trunc('day', date) ASC
ROWS BETWEEN 7 PRECEDING AND CURRENT ROW )
AS moving_average_7_day
FROM temperature
GROUP BY 1,2
ORDER BY date

上記SQLを実行すると、X軸(日付)、Y軸(気温と移動平均)となる3個のデータが抽出されます。

redashの設定

それでは、データを取り出した後に、「NEW VISUALIZATION」で描画してみます。

X軸とY軸の設定

データを取り出した後は、SQLで取り出したカラムのサジェストが効くようになるので、以下のようにX軸(date(日付))、 Y軸(tempreture(気温)、moving_average_7day(7日移動平均))を追加します。


redashにより描画されたグラフ

以下のように気温(青)、移動平均(赤)の線グラフが描画されます。移動平均線(赤)は平滑化されて滑らかな線となったことが見て取れるかと思います。可視化された気象データから、東京は8月末が一番暑く1月末が一番寒いと分かるのが面白いですね。(個人的な感覚では、7月が一番暑く、2月が一番寒いと思っていたのですが、直感と反する結果となりました。)


まとめ

redashは前述の通りSQLの記述(RDBの場合)とほんの数クリックで、簡単にデータ可視化が出来るため、弊社のデータエンジニアやデータアナリストは業務時間のほとんどを分析SQLの実装に集中できています。このことからredashは、データ分析業務の効率が極めて高いことを実感しております。

みなさんも是非、redashを活用して、データを可視化してみて下さい。

株式会社エブリー's job postings
Anonymous
2e29a38d dc72 4b83 9654 049b719a0344
22552621 1177225069088645 5449462543199310911 n
067dc779 5ce5 4598 83cb a075b87afa53
07281186 f60a 4060 ac8d c5863130d80b?1527723893
E55fedea 9f92 419f 9e1f bae289b2049b
10 Likes
Anonymous
2e29a38d dc72 4b83 9654 049b719a0344
22552621 1177225069088645 5449462543199310911 n
067dc779 5ce5 4598 83cb a075b87afa53
07281186 f60a 4060 ac8d c5863130d80b?1527723893
E55fedea 9f92 419f 9e1f bae289b2049b
10 Likes

Weekly ranking

Show other rankings

Page top icon