離れた場所のデーターを測定する場合、場所ごとにセンサー端末を設置し、それぞれのセンサー端末に別のチャネルを割り当てます。端末ごとにそれぞれのチャネルにデーターを送信し、後で複数チャネルのデーターを比較するなどの処理をします。

2チャネルからのデーター

 

PythonでAmbientの複数チャネルに蓄積されたデーターをグラフ化する

Ambientのグラフ化機能は一つのチャネルに蓄積されたデーターをグラフ化する機能です。一つのチャネルに、例えば温度、湿度、気温などのように複数のデーターが含まれる場合は、それぞれのデーターを別のグラフにしたり、複数のデーターを一つのグラフに表示したりといったことができます。

複数チャネルに蓄積されたデーターを一つのグラフに表示して比較するためには、Ambientからデーターを取り出し、処理する必要があります。ここではPythonを使って複数チャネルからデーターを読み込み、一つのグラフに表示する方法を紹介します。

まず、必要なライブラリーをインポートします。

In [1]:
import ambient
import pandas as pd
import numpy as np
 

複数のチャネルからデーターを読み込むので、チャネルを指定してデーターを読み込み、pandasのDataFrameに変換する処理を関数にしておきます。ここでは期間を指定してデーターを読むようにしていますが、必要に応じて日付を指定したり、データー件数を指定したりに変えることもできます。

Ambientから読み込んだデーターは辞書形式のリストなので、それをpandasのDataFrameにします。さらにデーターの生成時刻’created’が文字列なので、それをあとの処理で扱いやすいようにTimestamp形式に変更し、indexに設定しておきます。

In [2]:
def readAmbient(ch, readKey, start, end):
    am = ambient.Ambient(ch, '', readKey)
    d = am.read(start=start, end=end)
    df = pd.DataFrame(d)
    df['created'] = pd.to_datetime(list(df['created'])).tz_localize('GMT').tz_convert('Asia/Tokyo').tz_localize(None)
    df = df.set_index('created')
    return df
 

作った関数を使い、二つのチャネルから期間指定でデーターを読み込み、二つのDataFrameを作ります。この事例ではとある建物の外部と内部に設置した温度・湿度・気圧センサーのデーターを1週間分読んでいます。

In [3]:
dfOut = readAmbient(チャネル1, 'リードキー1', '2017-03-02 00:00:00', '2017-03-09 00:00:00')
dfIn = readAmbient(チャネル2, 'リードキー2', '2017-03-02 00:00:00', '2017-03-09 00:00:00')
 

グラフ表示に必要なライブラリーを読み込みます。matplotlibはそのままだと日本語が表示できないので、3、4行目で日本語フォントファイルを指定します。フォントファイルの場所はお使いの環境に合わせて変更してください。

In [4]:
%matplotlib inline
import matplotlib.pyplot as plt
from matplotlib import font_manager
fontprop = font_manager.FontProperties(fname="/Library/Fonts/Osaka.ttf")
 

チャネル1とチャネル2の温度(d1)を一つのグラフに表示してみます。

In [5]:
fig, ax = plt.subplots(figsize=(8,6))
ax.plot(dfOut['d1'])
ax.plot(dfIn['d1'], 'r')
plt.legend([u'室外',u'室内'], prop = fontprop)
plt.show()
 
 

こんな感じでグラフ化できました。青い線が外気温です。測定したのが3月ですので2℃から17℃ぐらいの幅で上下しています。それに対して赤い線の室温は小さな変動幅であることが確認できます。

次に建物の外部と内部の湿度を比較してみます。

In [6]:
fig, ax = plt.subplots(figsize=(8,6))
ax.plot(dfOut['d2'])
ax.plot(dfIn['d2'], 'r')
plt.legend([u'室外',u'室内'], prop = fontprop)
plt.show()
 
 

外部の湿度は大きく変化しているのに対し、内部の湿度は比較的安定していることが見て取れます。

 

まとめ

Ambientはマイコンから送ったセンサーデーターを簡単に確認したり、モニタリングできるサービスです。機能をシンプルに保つために、一つのチャネルのデーターをグラフ化する機能に留めています。一方、建物の外部と内部の気温と湿度のように、関連する複数のデーターを比較することは非常に有用です。その場合、ここで紹介したようにそれぞれのデーターを別チャネルに蓄積し、Pythonで読み込んで一つのグラフに合わせて表示する方法が便利です。是非、お試しください。