リアルタイムマイニングシステム 宅内に配置されたセンサや家電の状態をリアルタイムに解析して家電操作のレコメンドを行う
- Contents
- リアルタイムストリーム処理
- モジュールを細かく分割することにより様々なデータフォーマット・マイニングアルゴリズムを柔軟に追加できる
- pub/subアーキテクチャにより自由にモジュールを構成できる
- pythonで簡単な記述を行うだけでマイニングを実行できる
- supervisorによりシステムを動かしながらモジュールの追加や更新を行うことができる
- 後からパーサーやマイニング手法の追加をシステムを止めずに実行できる
- httpサーバ
- ルーティングを行う
- /dataにデータをpostすると対応するparserに渡す
{
"data_type": "sensor",
"data": {
temperature: ...
}
}
- postデータ
- data_type: parserの選択、unique制約(他のデータソースと名前がかぶらないようにする必要がある)
- data: データ本体、jsonデータ
- routerから受け取ったjsonデータを以下のフォーマットに変換してbufferに渡す
- フォーマットがバラバラなのでデータソース毎にparserを用意する必要がある
- pythonで簡単に実装できる
{
"key": "value"
}
- key: マイニングを行う際の変数名(列名)になる
- value: 文字か数値のみ、入れ子構造にはできない
例
{
"sparkcore-core00-temperature": 22
}
-
センサと家電の状態を保持し一定時間毎にoutput
-
parserからデータを受け取る
- sensor(説明変数)とappliance(目的変数)の二つの口がある
-
parserで処理されたデータを保持するディクショナリを持つ
-
一定時間毎にディクショナリのすべてのアイテムをjsonにダンプしてcoreモジュールとdatabaseモジュールに渡す
{
"timestamp": "2015-11-11 17:33:02.958697+09:00",
"sensor": {
"sparkcore-core00-temperature": 22,
"sparkcore-core00-humidity": 40.0,
...
},
"appliance": {
"viera": 0,
"tv": 1,
"fan": 1
}
}
- マイニングを行うモジュール
- bufferから渡されたjsonデータおよびdatabaseのデータを駆使してマイニングを行う
{
"appliance": "viera",
"method": "on"
}
- bufferから吐き出されたデータをDBに保存する
- マイニング結果を現実世界にフィードバックする
- mikuに結果を喋らせたり家電を操作する
- Python 3.4
- Pythonインストール
- pipインストール
- packageインストール
- git clone
- supervisor.conf
- config.ini
- 実行
./run.sh