Post on 16-Apr-2017
自己紹介氏名: 古城 篤(Atsushi Kojo)
所属: 株式会社ウフル / データサイエンス研究所
役割: 所長 / 主席研究員
特徴: 元営業マンの技術屋
ウフル技術ブログのメイン執筆者(現在)http://deferloader.blog.uhuru.co.jp/
Twitter: joeartsea
Blog: http://artsnet.jp/
色々なflowを見ていくとNode-REDは…
見た通りストリームデータを処理することができる
node(プラグイン)として拡張できるため各種APIに対応できる
Node-RED自体がWebサーバなのでWebインタラクションが可能
ex. Node-RED を使用してリアルタイムのチャット・アプリケーションを 5 分で作成するhttp://www.ibm.com/developerworks/jp/cloud/library/cl-rtchat-app/
言い換えると…
見た通りストリームデータを処理することができる→IoTやソーシャルなどのストリームデータとの親和性が高い
node(プラグイン)として拡張できるため各種APIに対応できる→ストリームデータの発生源を拡張できる→ストリームデータ処理の後続処理を拡張できる
Node-RED自体がWebサーバなのでWebインタラクションが可能→Webインタラクションもストリームデータになる
なんでもストリームデータ?そもそもセンサーやソーシャルデータやWebのトラッキングデータもストリームデータ
言わずもがなですが人や自動車の移動履歴データも解りやすいストリームデータ
IFTTT、Zapier、myThingsなどと連携したWebサービスのデータや操作もストリームデータ
kimonolabなどWebページを定期的にスクレイピングしてWeb API化するサービスと連携して取得したコンテンツもストリームデータ
毎秒数十人カメラの前を通過する人たちの性別や年齢を顔認識エンジンを使って推測して継続的に流していくデータもストリームデータ
CRMデータのデモグラフィック属性の変化や在庫システムの入出庫量などのスナップショット、つまりは変更履歴データもストリームデータ
そう考えると夢が拡がりますね!次ページからの事例もそんな考察から得た着想です
ソーシャルデータ分析事例の紹介
やりたいこと
ある製品についてのソーシャル上の言及を収集したい(Twitter、facebook、フォーラム、ニュース、ブログ)
ひとつの言及がソーシャル上で与えた影響度を知りたい
継続的に観測して影響度の高い言及者を知りたい
影響度の高い言及者の新たな言及をリアルタイムに補足したい
よ、要約すると…
Radian6から取得したデータを1件づつ処理するためにloopさせる
TwitterデータはさらにTwitter APIで本文データを取得
Twitterやfacebookで紹介された短縮URLを展開する(元に戻す)
対象のURLのソーシャル上での共有数などをSharedCountで取得
URLの言及者や属性情報をMySQLとTreasure Dataに投入
製品別、言語別、ランキング、影響度などの集計処理
独自実装したダッシュボードでURLや言及者を表現(非公開)
影響度の高い言及者(インフルエンサー)を特定しリアルタイムに観測
解決していった問題
Twitterデータの本文取得 → Twitter nodeで取得(API制限問題)
短縮URL問題 → URLを展開する(元に戻す)nodeを作成(公開予定)
影響度の算出 → SharedCount(非常に助かったサービス)
短期間集計 → MySQL nodeに対してストアドのcall文を流す
長期間集計 → 並行してTreasure Dataに投入してスケジューリングバッチ
影響度の判定 → システムは判定しやすくするだけ(判定は人)
nodeの作り方(基本)
input
module.exports = function(RED) { function LowerCaseNode(config) { RED.nodes.createNode(this,config); var node = this; this.on('input', function(msg) { msg.payload = msg.payload.toLowerCase(); node.send(msg); }); } RED.nodes.registerType("lower-case",LowerCaseNode); }
output
• メインのデータはmsg.payload
• グローバルはcontext.global
node(プラグイン)
nodeの作り方(発展)
Node-REDは簡単に他のWebサーバに組み込めるhttp://nodered.org/docs/embedding.html
Node-REDをnpm moduleとして組み込み上書き(デザインなど)
Node-REDの画面の一部を変更するnode(debug nodeがヒント)
これらを駆使すると…
nodeを作成する時の心がけ
まず最初に本当にnodeとして必要かどうか考える(例えばhttp headerに静的なAPI keyを含めるだけなら要らない)
ひとつのnodeが受け持つ役割を膨らませすぎない(他のnodeの役割を理解して汎用性を保つ)
nodeとflowの役割とユースケースを解りやすくする(これは今後コミュニティ全体として向上してほしい…)
sub flowを使えばシンプルになる?http://flows.nodered.org/flow/43501a1b424434de0ffb
配列の要素を分岐できるnodehttps://www.npmjs.com/package/node-red-contrib-splitter
Node-REDコミュニティ?
Node-REDは今後も色々なシチュエーションで利用される(願望)
色々なユースケースで想定していなかった問題に直面する
nodeやflowとしてオープンにすることでディスカッションできる
より良いnode、flow、プロダクト、コミュニティとして発展する
ここまでオープンだからこそ発展のスピードが上がる(と思う)