1年は365日.1週間は7日間.1日は24時間.起源はどうあれ,多くの人は大なり小なり暦や時間の制約を受けて活動する.
ディスカッションの内容を参考に,曜日と時刻を軸としたヒートマップを作成する.
2つの手段
手段は主に2つある.
- 予めElasticsearchに曜日と時刻のデータを格納しておく
- KibanaのScripted fieldsを使って曜日と時刻のデータを追加する
1つ目の方法はElasticsearch側でデータを準備するため,オリジナルデータ自体,もしくは,Elasticsearchへのデータ格納時に曜日及び時刻データを追加する必要がある.
2つ目の方法はKibana側でデータを拡張する.Scripted fields機能でタイムスタンプとなる既存のデータから曜日と時刻データを取り出す.
今回は2つ目の方法を使ってヒートマップを作成する.
Kibanaを設定する
Scripted fields
Kibanaの設定画面からIndex Patternsを開いて,ヒートマップを作りたいインデックスのタイムスタンプとなっているフィールドを確認しておく.Scripted fieldsの設定もこの画面からアクセスできる.今回はRasPi用に作っていたインデックスからタイムスタンプとしてtimereportedのデータを使う.
Scripted fieldsの設定画面では,適当なフィールド名を入力して,Script部分を以下のように入力する.
doc['timereported'].value.hourOfDay
曜日フィールドも同様に作成する.
doc['timereported'].value.dayOfWeek
Heat Map
X-axisにはdayOfWeekのHistogram,Y-axisにはhourOfDayのHistogram,MetricsにはhumidityのAverageを設定.横軸は月曜日(1)から日曜日(7),縦軸は0から23時のヒートマップとなる.
まだデータが少ないのでなんとも言えない部分もあるが,今後データが増えてくれば,風呂上がり,洗濯,雨,その他諸々の要因で変動する湿度の値から生活パターンが読み取れるようになる(かもしれない).
おわりに
KibanaのScripted fieldsを設定してdayOfWeek vs hourOfDayなヒートマップを作成することが出来た.ヒートマップは人の行動分析以外にもパターン分析として様々な用途で活用できる.今後活用していきたい.
コメント