node redでソーシャルデータ分析

24
Node-REDでソーシャルデータ分析

Upload: atsushi-kojo

Post on 16-Apr-2017

2.083 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Node-REDでソーシャルデータ分析

自己紹介氏名: 古城 篤(Atsushi Kojo)

所属: 株式会社ウフル / データサイエンス研究所

役割: 所長 / 主席研究員

特徴: 元営業マンの技術屋

ウフル技術ブログのメイン執筆者(現在)http://deferloader.blog.uhuru.co.jp/

Twitter: joeartsea

Blog: http://artsnet.jp/

Node-REDはIoT向け?http://nodered.org/

flowの例は以下にたくさんあるhttp://flows.nodered.org/

このflowをインポートするには…http://flows.nodered.org/flow/6c3b201624588e243f82

このJSONをコピー

以下のように貼付けると…

ここにペースト

こうなる(nodeがないとこうなる)

色々な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

Radian6 nodeを作りました(まだ公開してませんが公開予定)

作ってみたらこうなった…

よ、要約すると…

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がヒント)

これらを駆使すると…

こんなこともできますhttps://youtu.be/TrnUC3Xi164

nodeを作成する時の心がけ

まず最初に本当にnodeとして必要かどうか考える(例えばhttp headerに静的なAPI keyを含めるだけなら要らない)

ひとつのnodeが受け持つ役割を膨らませすぎない(他のnodeの役割を理解して汎用性を保つ)

nodeとflowの役割とユースケースを解りやすくする(これは今後コミュニティ全体として向上してほしい…)

使い込めば直面するloop問題• loopが枝分かれして増えていく…

• loopの終了判定は…?

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、プロダクト、コミュニティとして発展する

ここまでオープンだからこそ発展のスピードが上がる(と思う)

“ご清聴ありがとうございました”