SlideShare a Scribd company logo
1 of 10
Download to read offline
R でスマホの加速度センサーデータ処理
を試してみた
        第25回 Tokyo.R LT 発表資料

          アドファイブ(株)代表取締役 CEO
                      礒部正幸
背景と動機
●   人と会う → 連絡先を交換 → Facebook!
●   ユーザ ID を検索するの面倒くさい

    → FB 連絡先の交換をもっと手軽にしたい



●   赤外線や Bluetooth を使うのは機種依存
●   HTML5 を使って Web アプリで作りたい

    → 加速度センサーをうまく使ってお互いを認識したい!

           ビジネスコネクションを、よりスムーズに!

                 ※ ナンパツールではありません。
イメージ




2台のスマホを重ねて振る


   動きの一致判定
  アルゴリズムが必要          センサーの時系列データをサーバに記録
       ↓             → ペアになっていない
    (現在未完成)           データ同士からペアを
                      見つけられるか?
 アルゴリズム開発支援環境は
R+MongoDB で簡単に作れる!
                     (※グラフは開発中のものなので
                      既にペアのデータが表示されてる)
システム構成
                                                   サーバ

        Facebook
        ID 名                   Apache / Perl
                    ①
  ブラウザ
                                        ②
                   JSON
  HTML5 の
                                 MongoDB
 加速度センサ            FB ID 名
API(Javascript)


                                   ③               3次元
                                               ④
                                                   折れ線
                                                   グラフ
                             rmongodb       rgl


 スマホ


                                                    開発用 PC
プログラム: Javascript@ スマホ
window.addEventListener(
    "devicemotion",
    function(e){
        aCount++;
        var x = e.accelerationIncludingGravity.x;
        var y = e.accelerationIncludingGravity.y;
        var z = e.accelerationIncludingGravity.z;
        var ad = { x:x, y:y, z:z };
       // 中略
       sendToServer(bData);
    }, true);

function sendToServer(v) {
   var req = new XMLHttpRequest();
   req.open('POST','http://jiot.net/715/ajax/'+yourRole+'/'+yourName);
   req.onreadystatechange = function() {
     if (req.readyState==4) {
         lab3.text = req.responseText;
     }
   }
   req.setRequestHeader("content-type","application/x-www-form-urlencoded");
   var json = JSON.stringify(v);
   req.send("json="+escape(json));
}
プログラム: Perl@ サーバ
use MongoDB;
use JSON qw/encode_json decode_json/;


my $connection = MongoDB::Connection->new; # localhost
my $database = $connection->match;
my $collection = $database->evs;


# Perl/Dancer を使用


( 略)


post '/715/ajax/:role/:name' {
 my $role = params->{'role'};
 my $name = params->{'name'};
 my $json = params->{'data'};
 my $time=time();


 my $data=decode_json($json);
 $collection->insert({role=>$role,name=>$name,time=>$time,data=>$data});


 // この辺でセンサーデータを分析する処理が入る
 if ( マッチングに成功した ) {
   redirect 'FB の ID 名を交換して表示するページ ';
 }
};
プログラム: R@ 開発用 PC
  library(rmongodb)
                                                     } else {
  library(rgl)
                                                         col='red';
  mongo <- mongo.create('jiot.net')
                                                         x<-lapply(data,function(a) {-a[[1]]})
  one <- function() {
                                                         y<-lapply(data,function(a) {a[[2]]})
   cur <- mongo.find(mongo, 'match.evs')                 z<-lapply(data,function(a) {-a[[3]]})
   add=F
                                                     }
   while (mongo.cursor.next(cur)) {
                                                     plot3d(x,y,z,type="l",col=col,add=add)
    e <- mongo.cursor.value(cur)                     add=T
    role <- mongo.bson.value(e,"role")
                                                 }
    data <- mongo.bson.value(e,"data")
                                                 mongo.cursor.destroy(cur)
    if (role==1) {                           }
      col='blue';
      x<-lapply(data,function(a) {a[[1]]})
      y<-lapply(data,function(a) {a[[2]]})
      z<-lapply(data,function(a) {a[[3]]})
                                             role <- 値

{ role: 値 , name:”hoge”, time: 値 ,           x <- [ 1番目の x, 2番めの x,...]
 data:[{x: 値 ,y: 値 ,z: 値 },                  y <- [ 1番目の y, 2番めの y,...]
        {x: 値 ,y: 値 ,z: 値 }, … ] }           z <- [ 1番目の z, 2番めの z,...]
demo
まとめ
◯ 不定型なセンサーデータは JSON にして
MongoDB に流しこむとスキーマ不要で便利
◯ R から MongoDB に直接つないでグラフ描画
は簡単
◯ アルゴリズム開発環境として R+MongoDB は
使える
△ R で開発したアルゴリズムを元のアプリ上に
実装しなおすところをどうするかは課題
ご静聴ありがとうございました!
●   アドファイブ株式会社のご紹介                    お気軽に連絡ください!
                                  ( FB 友だち申請は即承認します)
    ★ 仕事の面白さ                       Facebook: masayuki.isobe.14
                                   Twitter: @chiral
      * 純粋なテックベンチャーです              E-mail: isobe@adfive.net

      * 最新のアドテクノロジーを開発し、

         広告代理店や販路/営業部隊を持った企業とアライアンスを組んで収益化

        * オーディエンスデータの分析、コンテンツマッチアルゴリズムの開発、

         クリエイティブの動的生成、アトリビューションモデルと指標の可視化、

      などおもしろテーマがもりだくさん

    ★ 弊社事業の特徴

    - 電子書籍、スマート TV 、 Web カーナビなど新しい Web メディア上の広告に注力

    - デジタルマーケティング担当者にメディアを横断した統合 PR プランニングを提供

    - 数理&コンピュータサイエンス&ビジネスの融合させて未来を開拓することが指名

More Related Content

What's hot

Python for Data Analysis: Chapter 2
Python for Data Analysis: Chapter 2Python for Data Analysis: Chapter 2
Python for Data Analysis: Chapter 2智哉 今西
 
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Makoto Kawano
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-uedayou
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Hiro H.
 
地理空間とOSGeoとPostGISとを簡単に紹介してみます
地理空間とOSGeoとPostGISとを簡単に紹介してみます地理空間とOSGeoとPostGISとを簡単に紹介してみます
地理空間とOSGeoとPostGISとを簡単に紹介してみますboiledorange73
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806swkagami
 
SQL勉強会 初級編
SQL勉強会 初級編SQL勉強会 初級編
SQL勉強会 初級編Kazuma Hidaka
 
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法についてオープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法についてRyousuke Wayama
 

What's hot (9)

Python for Data Analysis: Chapter 2
Python for Data Analysis: Chapter 2Python for Data Analysis: Chapter 2
Python for Data Analysis: Chapter 2
 
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 
地理空間とOSGeoとPostGISとを簡単に紹介してみます
地理空間とOSGeoとPostGISとを簡単に紹介してみます地理空間とOSGeoとPostGISとを簡単に紹介してみます
地理空間とOSGeoとPostGISとを簡単に紹介してみます
 
Project GData
Project GDataProject GData
Project GData
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806
 
SQL勉強会 初級編
SQL勉強会 初級編SQL勉強会 初級編
SQL勉強会 初級編
 
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法についてオープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
 

Similar to Tokyo r 25_lt_isobe

BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門Yohei Sasaki
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Shintaro Fukushima
 
D3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションD3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションKohei Kadowaki
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLTaisuke Fukuno
 
【IISAテクニカルカンファレンス2014】 オープンデータ×オープンソース ~WEB上でのインタラクティブ可視化手法について~
【IISAテクニカルカンファレンス2014】 オープンデータ×オープンソース ~WEB上でのインタラクティブ可視化手法について~【IISAテクニカルカンファレンス2014】 オープンデータ×オープンソース ~WEB上でのインタラクティブ可視化手法について~
【IISAテクニカルカンファレンス2014】 オープンデータ×オープンソース ~WEB上でのインタラクティブ可視化手法について~中洞 友希
 
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)parrotstudio
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.3.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.3.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.3.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.3.0対応)fisuda
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power AutomateTomoyuki Obi
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習x1 ichi
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.0.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.0.0対応)fisuda
 
Ember.js Tokyo event 2014/09/22 (Japanese)
Ember.js Tokyo event  2014/09/22 (Japanese)Ember.js Tokyo event  2014/09/22 (Japanese)
Ember.js Tokyo event 2014/09/22 (Japanese)Yuki Shimada
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)fisuda
 
R入門とgoogle map +α
R入門とgoogle map +αR入門とgoogle map +α
R入門とgoogle map +αkobexr
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
DataStax EnterpriseでApache Tinkerpop入門
DataStax EnterpriseでApache Tinkerpop入門DataStax EnterpriseでApache Tinkerpop入門
DataStax EnterpriseでApache Tinkerpop入門Yuki Morishita
 
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現インフラジスティックス・ジャパン株式会社
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)fisuda
 

Similar to Tokyo r 25_lt_isobe (20)

BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
 
D3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションD3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーション
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
 
【IISAテクニカルカンファレンス2014】 オープンデータ×オープンソース ~WEB上でのインタラクティブ可視化手法について~
【IISAテクニカルカンファレンス2014】 オープンデータ×オープンソース ~WEB上でのインタラクティブ可視化手法について~【IISAテクニカルカンファレンス2014】 オープンデータ×オープンソース ~WEB上でのインタラクティブ可視化手法について~
【IISAテクニカルカンファレンス2014】 オープンデータ×オープンソース ~WEB上でのインタラクティブ可視化手法について~
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.3.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.3.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.3.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.3.0対応)
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power Automate
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.0.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.0.0対応)
 
Ember.js Tokyo event 2014/09/22 (Japanese)
Ember.js Tokyo event  2014/09/22 (Japanese)Ember.js Tokyo event  2014/09/22 (Japanese)
Ember.js Tokyo event 2014/09/22 (Japanese)
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
 
R入門とgoogle map +α
R入門とgoogle map +αR入門とgoogle map +α
R入門とgoogle map +α
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
DataStax EnterpriseでApache Tinkerpop入門
DataStax EnterpriseでApache Tinkerpop入門DataStax EnterpriseでApache Tinkerpop入門
DataStax EnterpriseでApache Tinkerpop入門
 
Parse触ってみた
Parse触ってみたParse触ってみた
Parse触ってみた
 
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
 

More from Masayuki Isobe

オープンソースを用いたドローンの自律制御ソフトウェア技術
オープンソースを用いたドローンの自律制御ソフトウェア技術オープンソースを用いたドローンの自律制御ソフトウェア技術
オープンソースを用いたドローンの自律制御ソフトウェア技術Masayuki Isobe
 
関数型プログラミングとモナド
関数型プログラミングとモナド関数型プログラミングとモナド
関数型プログラミングとモナドMasayuki Isobe
 
ジャパンドローンセミナー
ジャパンドローンセミナージャパンドローンセミナー
ジャパンドローンセミナーMasayuki Isobe
 
AIBOX DroneBrain 製品パンフレット
AIBOX DroneBrain 製品パンフレットAIBOX DroneBrain 製品パンフレット
AIBOX DroneBrain 製品パンフレットMasayuki Isobe
 
ファイブソリューションズデベロッパーネットワーク
ファイブソリューションズデベロッパーネットワークファイブソリューションズデベロッパーネットワーク
ファイブソリューションズデベロッパーネットワークMasayuki Isobe
 
ドローン向けソフトウェア事業
ドローン向けソフトウェア事業ドローン向けソフトウェア事業
ドローン向けソフトウェア事業Masayuki Isobe
 
RDF/OWLの概要及びOSS実装、及び活用イメージについて
RDF/OWLの概要及びOSS実装、及び活用イメージについてRDF/OWLの概要及びOSS実装、及び活用イメージについて
RDF/OWLの概要及びOSS実装、及び活用イメージについてMasayuki Isobe
 
第三回機械学習アルゴリズム実装会イントロダクション
第三回機械学習アルゴリズム実装会イントロダクション第三回機械学習アルゴリズム実装会イントロダクション
第三回機械学習アルゴリズム実装会イントロダクションMasayuki Isobe
 
CasperJSを使って任意のWebサイトを電子書籍化する方法
CasperJSを使って任意のWebサイトを電子書籍化する方法CasperJSを使って任意のWebサイトを電子書籍化する方法
CasperJSを使って任意のWebサイトを電子書籍化する方法Masayuki Isobe
 
ScrapyとPhantomJSを用いたスクレイピングDSL
ScrapyとPhantomJSを用いたスクレイピングDSLScrapyとPhantomJSを用いたスクレイピングDSL
ScrapyとPhantomJSを用いたスクレイピングDSLMasayuki Isobe
 
第二回機械学習アルゴリズム実装会 - LDA
第二回機械学習アルゴリズム実装会 - LDA第二回機械学習アルゴリズム実装会 - LDA
第二回機械学習アルゴリズム実装会 - LDAMasayuki Isobe
 
ブランディング指標の数値化について
ブランディング指標の数値化についてブランディング指標の数値化について
ブランディング指標の数値化についてMasayuki Isobe
 
TEDxTitech 2013 speech material
TEDxTitech 2013 speech materialTEDxTitech 2013 speech material
TEDxTitech 2013 speech materialMasayuki Isobe
 
Rec sys2013 reading_isobe
Rec sys2013 reading_isobeRec sys2013 reading_isobe
Rec sys2013 reading_isobeMasayuki Isobe
 
広告ナビゲータ・広告シミュレータ
広告ナビゲータ・広告シミュレータ広告ナビゲータ・広告シミュレータ
広告ナビゲータ・広告シミュレータMasayuki Isobe
 
Uuyアドテクセミナー
UuyアドテクセミナーUuyアドテクセミナー
UuyアドテクセミナーMasayuki Isobe
 
第12回モヤLT発表資料
第12回モヤLT発表資料第12回モヤLT発表資料
第12回モヤLT発表資料Masayuki Isobe
 

More from Masayuki Isobe (20)

オープンソースを用いたドローンの自律制御ソフトウェア技術
オープンソースを用いたドローンの自律制御ソフトウェア技術オープンソースを用いたドローンの自律制御ソフトウェア技術
オープンソースを用いたドローンの自律制御ソフトウェア技術
 
関数型プログラミングとモナド
関数型プログラミングとモナド関数型プログラミングとモナド
関数型プログラミングとモナド
 
ジャパンドローンセミナー
ジャパンドローンセミナージャパンドローンセミナー
ジャパンドローンセミナー
 
AIBOX DroneBrain 製品パンフレット
AIBOX DroneBrain 製品パンフレットAIBOX DroneBrain 製品パンフレット
AIBOX DroneBrain 製品パンフレット
 
ファイブソリューションズデベロッパーネットワーク
ファイブソリューションズデベロッパーネットワークファイブソリューションズデベロッパーネットワーク
ファイブソリューションズデベロッパーネットワーク
 
ドローン向けソフトウェア事業
ドローン向けソフトウェア事業ドローン向けソフトウェア事業
ドローン向けソフトウェア事業
 
RDF/OWLの概要及びOSS実装、及び活用イメージについて
RDF/OWLの概要及びOSS実装、及び活用イメージについてRDF/OWLの概要及びOSS実装、及び活用イメージについて
RDF/OWLの概要及びOSS実装、及び活用イメージについて
 
第三回機械学習アルゴリズム実装会イントロダクション
第三回機械学習アルゴリズム実装会イントロダクション第三回機械学習アルゴリズム実装会イントロダクション
第三回機械学習アルゴリズム実装会イントロダクション
 
CasperJSを使って任意のWebサイトを電子書籍化する方法
CasperJSを使って任意のWebサイトを電子書籍化する方法CasperJSを使って任意のWebサイトを電子書籍化する方法
CasperJSを使って任意のWebサイトを電子書籍化する方法
 
ScrapyとPhantomJSを用いたスクレイピングDSL
ScrapyとPhantomJSを用いたスクレイピングDSLScrapyとPhantomJSを用いたスクレイピングDSL
ScrapyとPhantomJSを用いたスクレイピングDSL
 
第二回機械学習アルゴリズム実装会 - LDA
第二回機械学習アルゴリズム実装会 - LDA第二回機械学習アルゴリズム実装会 - LDA
第二回機械学習アルゴリズム実装会 - LDA
 
ブランディング指標の数値化について
ブランディング指標の数値化についてブランディング指標の数値化について
ブランディング指標の数値化について
 
TEDxTitech 2013 speech material
TEDxTitech 2013 speech materialTEDxTitech 2013 speech material
TEDxTitech 2013 speech material
 
Rec sys2013 reading_isobe
Rec sys2013 reading_isobeRec sys2013 reading_isobe
Rec sys2013 reading_isobe
 
広告ナビゲータ・広告シミュレータ
広告ナビゲータ・広告シミュレータ広告ナビゲータ・広告シミュレータ
広告ナビゲータ・広告シミュレータ
 
rzmq
rzmqrzmq
rzmq
 
Uuyアドテクセミナー
UuyアドテクセミナーUuyアドテクセミナー
Uuyアドテクセミナー
 
第12回モヤLT発表資料
第12回モヤLT発表資料第12回モヤLT発表資料
第12回モヤLT発表資料
 
Tokyo.R 26 LT isobe
Tokyo.R 26 LT isobeTokyo.R 26 LT isobe
Tokyo.R 26 LT isobe
 
Tokyo.R #22 LT
Tokyo.R #22 LTTokyo.R #22 LT
Tokyo.R #22 LT
 

Tokyo r 25_lt_isobe

  • 1. R でスマホの加速度センサーデータ処理 を試してみた 第25回 Tokyo.R LT 発表資料 アドファイブ(株)代表取締役 CEO 礒部正幸
  • 2. 背景と動機 ● 人と会う → 連絡先を交換 → Facebook! ● ユーザ ID を検索するの面倒くさい → FB 連絡先の交換をもっと手軽にしたい ● 赤外線や Bluetooth を使うのは機種依存 ● HTML5 を使って Web アプリで作りたい → 加速度センサーをうまく使ってお互いを認識したい! ビジネスコネクションを、よりスムーズに! ※ ナンパツールではありません。
  • 3. イメージ 2台のスマホを重ねて振る 動きの一致判定 アルゴリズムが必要 センサーの時系列データをサーバに記録 ↓ → ペアになっていない (現在未完成) データ同士からペアを 見つけられるか? アルゴリズム開発支援環境は R+MongoDB で簡単に作れる! (※グラフは開発中のものなので  既にペアのデータが表示されてる)
  • 4. システム構成 サーバ Facebook ID 名 Apache / Perl ① ブラウザ ② JSON HTML5 の MongoDB 加速度センサ FB ID 名 API(Javascript) ③ 3次元 ④ 折れ線 グラフ rmongodb rgl スマホ 開発用 PC
  • 5. プログラム: Javascript@ スマホ window.addEventListener( "devicemotion", function(e){ aCount++; var x = e.accelerationIncludingGravity.x; var y = e.accelerationIncludingGravity.y; var z = e.accelerationIncludingGravity.z; var ad = { x:x, y:y, z:z }; // 中略 sendToServer(bData); }, true); function sendToServer(v) { var req = new XMLHttpRequest(); req.open('POST','http://jiot.net/715/ajax/'+yourRole+'/'+yourName); req.onreadystatechange = function() { if (req.readyState==4) { lab3.text = req.responseText; } } req.setRequestHeader("content-type","application/x-www-form-urlencoded"); var json = JSON.stringify(v); req.send("json="+escape(json)); }
  • 6. プログラム: Perl@ サーバ use MongoDB; use JSON qw/encode_json decode_json/; my $connection = MongoDB::Connection->new; # localhost my $database = $connection->match; my $collection = $database->evs; # Perl/Dancer を使用 ( 略) post '/715/ajax/:role/:name' { my $role = params->{'role'}; my $name = params->{'name'}; my $json = params->{'data'}; my $time=time(); my $data=decode_json($json); $collection->insert({role=>$role,name=>$name,time=>$time,data=>$data}); // この辺でセンサーデータを分析する処理が入る if ( マッチングに成功した ) { redirect 'FB の ID 名を交換して表示するページ '; } };
  • 7. プログラム: R@ 開発用 PC library(rmongodb) } else { library(rgl) col='red'; mongo <- mongo.create('jiot.net') x<-lapply(data,function(a) {-a[[1]]}) one <- function() { y<-lapply(data,function(a) {a[[2]]}) cur <- mongo.find(mongo, 'match.evs') z<-lapply(data,function(a) {-a[[3]]}) add=F } while (mongo.cursor.next(cur)) { plot3d(x,y,z,type="l",col=col,add=add) e <- mongo.cursor.value(cur) add=T role <- mongo.bson.value(e,"role") } data <- mongo.bson.value(e,"data") mongo.cursor.destroy(cur) if (role==1) { } col='blue'; x<-lapply(data,function(a) {a[[1]]}) y<-lapply(data,function(a) {a[[2]]}) z<-lapply(data,function(a) {a[[3]]}) role <- 値 { role: 値 , name:”hoge”, time: 値 , x <- [ 1番目の x, 2番めの x,...] data:[{x: 値 ,y: 値 ,z: 値 }, y <- [ 1番目の y, 2番めの y,...] {x: 値 ,y: 値 ,z: 値 }, … ] } z <- [ 1番目の z, 2番めの z,...]
  • 9. まとめ ◯ 不定型なセンサーデータは JSON にして MongoDB に流しこむとスキーマ不要で便利 ◯ R から MongoDB に直接つないでグラフ描画 は簡単 ◯ アルゴリズム開発環境として R+MongoDB は 使える △ R で開発したアルゴリズムを元のアプリ上に 実装しなおすところをどうするかは課題
  • 10. ご静聴ありがとうございました! ● アドファイブ株式会社のご紹介 お気軽に連絡ください! ( FB 友だち申請は即承認します) ★ 仕事の面白さ Facebook: masayuki.isobe.14 Twitter: @chiral   * 純粋なテックベンチャーです E-mail: isobe@adfive.net   * 最新のアドテクノロジーを開発し、 広告代理店や販路/営業部隊を持った企業とアライアンスを組んで収益化 * オーディエンスデータの分析、コンテンツマッチアルゴリズムの開発、   クリエイティブの動的生成、アトリビューションモデルと指標の可視化、  などおもしろテーマがもりだくさん ★ 弊社事業の特徴 - 電子書籍、スマート TV 、 Web カーナビなど新しい Web メディア上の広告に注力 - デジタルマーケティング担当者にメディアを横断した統合 PR プランニングを提供 - 数理&コンピュータサイエンス&ビジネスの融合させて未来を開拓することが指名