SlideShare a Scribd company logo
© 2016 IBM Corporation
Pysparkを使ったデータ分析
Tanaka Y.P
2017-4-12
© 2016 IBM Corporation2
自己紹介
田中裕一(yuichi tanaka)
主にアーキテクチャとサーバーサイドプログラムを担当
することが多い。Hadoop/Spark周りをよく触ります。
Node.js、Python、最近はSpark周りの仕事でScalaを書く
ことが多い気がします。
休日はOSS周りで遊んだり。
詳解 Apache Spark
© 2016 IBM Corporation3
自己紹介
© 2016 IBM Corporation4
アジェンダ
• データ分析のお話
• BigDataとApache Spark
• 今日やること
• A/Bテストをテーマにデータ分析業務を見ていこう
• データサイエンスのサイクルとDSX,WatsonMachineLearningのご紹介
© 2016 IBM Corporation5
データ分析のお話
データ分析の目的は
• データから情報を吸い出し、ビジネス課題の理解、データの理解する
• 情報をもとに改善・新規施策の仮説を構築
• 仮説をもとに施策を行い評価可能なデータを収集
• 評価をもとにさらなる改善を行う
• 継続的な一連の流れを新たな価値とする
© 2016 IBM Corporation6
分析アプローチ
健康診断
探索
検証
現在の状態を把握する『なぜ』の裏付け
• 基礎集計
• 売り上げ分析
• 顧客分析
• サイト分析
何らかの「目的」を持った探索
基礎集計・機械学習的手法
• 有料会員化のためのフロー
• 離脱ユーザーのカムバックフロー
• UI・UXのためのセグメンテーション
何らかの「仮説」に基づいた検証
定量的な観測
• Stepup施策の効果検証
• カムバック施策の効果検証
• 離脱抑制施策の効果検証
© 2016 IBM Corporation7
ビジネス課題やド
メインの理解
データ取得
データ
探索・理解
データ
クレンジング
データ変換
(加工)
評価
分析・モデル
作成
結果を共有
モデル適用
アプリ作成
データ・
エンジニア
データ・
サイエンティスト
ビジネス・アナリスト
アプリ開発者
データサイエンスのサイクル
© 2016 IBM Corporation8
BigDataとはどんなものか
© 2016 IBM Corporation9
Sparkとは
従来Hadoopでは難しかったBigDataにおける
アドホック分析やニアリアルタイム処理を実現するための
InMemory分散並列処理フレームワーク。
• HDFSを筆頭にCassandraなど分散ストレージのデータと相性が良い
• YARN,Mesos,Standaloneの3種類の分散処理基盤の上で動作
• SparkSQL,Streaming,MLlib,GraphXといった処理の拡張を持つ
© 2016 IBM Corporation10
• Java, Scala, Pythonを利用してETLを実行可能
• RDD(Reslient Distributed Datasets)はScalaのコレクションの
Seqのようなもので、データを順番に保持
• RDDの内部はパーティションに分かれている。パーティション
毎にデータを保持(HDFSブロック数に依存)
• 分散処理する際にはパーティション毎に並列に処理
• mapやfilter等の基本的な操作の場合、データの順序は変わ
らない。
val csv = spark.textFile("tokyo.csv")
val pairs = csv.map(line => (line.split(",")))
.map(x => (x(0).take(8), (x(4).toFloat, 1)))
.reduceByKey( (x,y) => (x._1 + y._1, x._2 +
y._2) )
.map(x => (x._1, x._2._1/x._2._2) )
.sortByKey()
 Spark CoreはSparkのエンジン
Spark Core
20150614 22:00:00,0,1,8,20.9,8,3.0,8,南南西,8,85,8
20150614 23:00:00,0,1,8,20.9,8,2.6,8,南南西,8,86,8
20150615 00:00:00,0,1,8,20.5,8,1.0,8,南,8,86,8
20150615 1:00:00,0,1,8,20.4,8,0.7,8,南,8,88,8
(2015/6/14,22.565218)
(2015/6/15,24.550001)
(2015/6/16,23.358332)
(2015/6/17,21.583334)
例:平均気温の計算
© 2016 IBM Corporation11
• SQLを利用したデータ操作が可
能
• トランザクションなし
• Parquet 、Json、Hive だけで
なくJDBCやODBCもサポート
• Thrift JDBC/ODBCによる外部
からの接続
• 後述のDataFrameをラップする
形で実装
{"name":"貝嶋", "address":{"city":"川崎", "state":"神奈川"}}
{"name":"土屋", "address":{"city":"豊洲", "state":"東京"}}
{“name”:“山田", "address":{"city":"横浜", "state":"神奈川"}}
{"name":"岸代", "address":{"city":"後楽園", "state":"東京"}}
val people = sqlContext.jsonFile("test.json")
people.registerTempTable("people")
val nameAndAddress =
sqlContext.sql("SELECT name, address.city, address.state FROM
people WHERE address.state="神奈川"")
nameAndAddress.collect.foreach(println)
{"name":"貝嶋", "address":{"city":"川崎", "state":"神奈川"}}
{“name”:“山田", "address":{"city":"横浜", "state":"神奈川"}}
例:住所データ(json)からの特定データの抽出
• SparkSQLによるデータ操作
Spark SQL
© 2016 IBM Corporation12
• Sparkによるミニ(マイクロ)バッチの実行
• DStreamと呼ばれるRDDを操作
• 指定間隔ごとにまとめられたRDDを処理(Windows処
理も可能)
• 通常のSparkプログラミングとほぼ同様
たとえば、定期的に流入するデータの「移動平均値」の連続計
算
val tstream = ssc.socketTextStream(hostname, port)
var mdtxt = tstream.map(x => x.split(","))
.map(x => ( x(0), (x(0), x(1), x(2).toInt) ) )
.updateStateByKey(updateFunc _)
mdtxt.print()
センサーデータ:
(Dev1, 201501010000, 0)
(Dev2, 201501010000, 0)
(Dev1, 201501010001, 1)
Alert: Dev1 Status changed : 1
 Sparkでストリーム処理
Spark Streaming
例:センサーデータの出力値変更時にアラート
DStream
RDD
data
data
RDD
data
data
RDD
data
data
© 2016 IBM Corporation13
• MLlibとRが利用可能
MLlibはScalaで、SparkRはRで
記述可能
• アルゴリズム(MLlib)
• SVM、ロジスティック回帰、決定木、K-
means、ALSなど
• IBMはSystemMLをSparkに提供
val data = spark.textFile("kdata.txt")
val parsedData = data.map(x =>
Vectors.dense(x.split(',').map(_.toDouble))).cache()
val numClusters = 3
val numIterations = 10
val clusters = KMeans.train(parsedData, numClusters, numIterations)
 Sparkで機械学習
SparkR, Mllib
データ: ( 直近購買月[n日前], 期間内購買回数 )
(5,1),(4,2),(5,3),(1,2),(2,4),(2,5),(2,6),(1,4),(1,5),(1,2),(1,5),(5,5)
クラスタ結果: ([中心], 人数)
([1.0, 2.0], 2), ([1.5, 4.833333333333333], 6),
([4.666666666666666, 2.0], 3), ([5.0, 5.0], 1)
例:顧客のクラスタ分け
0
2
4
6
0 2 4 6
© 2016 IBM Corporation14
• グラフデータを並列分散環境で処理するための
フレームワーク
• グラフ構造データを用いた解析を行う
• 「点」と「辺」からなるデータ
• SNSでのつながり、データ間の関連性
など
• 表構造では扱うことが難しい関係を見つけ出す
• データ間のつながりの抽出
• 輪の抽出
• 距離の計測
• 影響の計測
• グラフDBとの兼ね合い(これから)
val graphWithDistance = Pregel(
graph.mapVertices((id:VertexId, attr:Int) => List((id, 0))),
List[(VertexId, Int)](),
Int.MaxValue,EdgeDirection.Out)((id, attr, msg) =>
mergeVertexRoute(attr, msg.map(a=> (a._1, a._2 + 1))),edge
=> {
val isCyclic = edge.srcAttr.filter(_._1 ==
edge.dstId).nonEmpty
if(isCyclic) Iterator.empty
else Iterator((edge.dstId, edge.srcAttr))
},(m1, m2) => m1 ++ m2
)
 Sparkでグラフ処理を
Spark GraphX
つながりの検索
例: つながりと距離を見つけ出す
1,((1,0), (6,1), (9,1), (7,1), (4,2))
1
2 3
4
5
6
7
89
© 2016 IBM Corporation15
DataSet API
• Spark v1.6で追加された新しいAPI
• 登場背景
• RDDとDataFrameという二つの抽象概念ができてしまった。
• RDDとDataFrameにそれぞれ長所があること
• 2つの抽象概念を行き来する為のコストがかかる
• 二つの抽象概念をいいとこ取りしたDataSetAPIの登場
• DataFrameの速さはそのまま
• オブジェクト・メソッドはコンパイル時のタイプセーフ提供
• DataFrameとのシームレス変換
© 2016 IBM Corporation16
Structured Streaming
• Spark v2.0で追加された新しいAPI
• Datasetの上に実装されたHigh-levelのStreamingAPI
• Streamingデータを構造化データとして継続的に処理可能
val in =
spark.readStream .schema(schemaImp) .format("csv") .option("header",
true) .option("maxFilesPerTrigger", 1) .load("csv-logs")
Jacek Warszawa, Polska, 42,true
Jacek Warszawa, Polska, 42,true
-------------------------------------------
Batch: 0
-------------------------------------------
+-----+--------+-------+---+-----+
| name| city|country|age|alive|
+-----+--------+-------+---+-----+
|Jacek|Warszawa| Polska| 42| true|
+-----+--------+-------+---+-----+
complete output delta output
© 2016 IBM Corporation17
今日のお話し
サンプルデータを使ってPysparkで健康診断と探索を行ってみよう
• Pysparkを簡単に書いてみよう
• 顧客分類について知ろう
• A/Bテストユーザーの抽出をやってみよう
• A/Bテストユーザーの抽出にKMeansを使ってみよう
アクセス
ログ.csv
顧客マス
タ.csv
購買ロ
グ.csv
顧客セグメント
A/Bテスト
用ユー
ザーグ
ループ
© 2016 IBM Corporation18
A/Bテストとは何ぞや?
A/Bテスト(英: A/B testing)とは、主にインターネットマーケティングで行われる、施策判断
のための試験の総称である。
狭義ではA/Bテストは仮説検定を指す俗称である[1]が、広義のA/Bテストはインターネット
マーケティングにおける施策の良否を判断するために、2つの施策同士を比較検討する行
為全般を指す。 by wikipedia
参考:
https://ja.wikipedia.org/wiki/A/B%E3%83%86%E3%82%B9%E3%83%88
大人気! ダイエットドリンク 大人気! ダイエットドリンク
○○で第一位! ○○で第一位!
健康に優しい成分
10種類配合
リピート購入続出
たった1ヶ月で
-10キロ
下の内どちらがより効果的か?
© 2016 IBM Corporation19
DATA SCIENCE EXPERIENCE
goo.gl/6iVeoZ
© 2016 IBM Corporation20
ビジネス課題やド
メインの理解
データ取得
データ
探索・理解
データ
クレンジング
データ変換
(加工)
評価
分析・モデル
作成
結果を共有
モデル適用
アプリ作成
データ・
エンジニア
データ・
サイエンティスト
ビジネス・アナリスト
アプリ開発者
データサイエンスのサイクル(再) goo.gl/6iVeoZ
© 2016 IBM Corporation21
IBM Data Science Experienceの特徴
コミュニティオープンソース IBM Value adds
- チュートリアル、データセットの探
索
- データサイエンティストとの共創
- 質問をする:Ask Question
- 情報を収集する
(記事、論文、技術情報)
- プロジェクトの共有
- Scala/Python/R/SQL
- Jupyter / Zeppelin*
Notebooks
- RStudio IDE / Shinyアプリ
ケーション
- Apache Spark
- その他のライブラリ
• Object Storage
• 生産性を高める追加機能
- 高度なビジュアライゼーショ
ンライブラリ
- The DSX Canvas
- IBM Machine Learning
goo.gl/6iVeoZ

More Related Content

PPTX
Apache Sparkを使った感情極性分析
PPTX
Pythonで入門するApache Spark at PyCon2016
PPTX
Watson summit 2016_j2_5
PPTX
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
PPSX
HBaseとSparkでセンサーデータを有効活用 #hbasejp
PPTX
Bluemixを使ったTwitter分析
PPTX
ApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイント
PPTX
初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜
Apache Sparkを使った感情極性分析
Pythonで入門するApache Spark at PyCon2016
Watson summit 2016_j2_5
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
HBaseとSparkでセンサーデータを有効活用 #hbasejp
Bluemixを使ったTwitter分析
ApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイント
初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜

What's hot (20)

PPTX
PythonでDeepLearningを始めるよ
PPTX
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
PDF
SparkとCassandraの美味しい関係
PPTX
Big datauniversity
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
PPTX
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
PPTX
Hadoop / Elastic MapReduceつまみ食い
PDF
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
PDF
SparkやBigQueryなどを用いた モバイルゲーム分析環境
PPT
はやわかりHadoop
PDF
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
PPTX
WebDB Forum 2012 基調講演資料
PDF
(LT)Spark and Cassandra
PDF
Hadoop 基礎
PPTX
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
PDF
Data Scientist Workbench - dots0729
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PDF
データ分析に必要なスキルをつけるためのツール~Jupyter notebook、r連携、機械学習からsparkまで~
PPTX
Azure Datalake 大全
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
PythonでDeepLearningを始めるよ
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
SparkとCassandraの美味しい関係
Big datauniversity
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
Hadoop / Elastic MapReduceつまみ食い
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
SparkやBigQueryなどを用いた モバイルゲーム分析環境
はやわかりHadoop
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
WebDB Forum 2012 基調講演資料
(LT)Spark and Cassandra
Hadoop 基礎
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
Data Scientist Workbench - dots0729
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
データ分析に必要なスキルをつけるためのツール~Jupyter notebook、r連携、機械学習からsparkまで~
Azure Datalake 大全
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
Ad

Similar to Pysparkで始めるデータ分析 (20)

PDF
経済学のための実践的データ分析 4.SQL ことはじめ
PDF
ISID×MS_DLLAB_企業のデータ&AI活用をAzureで加速する
PDF
ゼロから始めるSparkSQL徹底活用!
PDF
【講演資料】ビッグデータ時代の経営を支えるビジネスアナリティクスソリューション
PDF
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
PPTX
Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築
PDF
Presto As A Service - Treasure DataでのPresto運用事例
PDF
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
PPTX
Spark Summit 2014 の報告と最近の取り組みについて
PDF
JAWS DAYS 2022
PPT
Big data解析ビジネス
PPTX
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
PDF
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
PDF
[コグラフ]spss modelerによるデータ加工入門
PDF
データ分析を支える技術 データ分析基盤再入門
PPTX
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#7資料
PDF
クラウド上のデータ活用デザインパターン
PPTX
Deep Learning on Rescale - Oct/11/2016 at Rescale night
PDF
PGXのレスポンスとリソース消費
PDF
Apache spark 2.3 and beyond
経済学のための実践的データ分析 4.SQL ことはじめ
ISID×MS_DLLAB_企業のデータ&AI活用をAzureで加速する
ゼロから始めるSparkSQL徹底活用!
【講演資料】ビッグデータ時代の経営を支えるビジネスアナリティクスソリューション
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築
Presto As A Service - Treasure DataでのPresto運用事例
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Spark Summit 2014 の報告と最近の取り組みについて
JAWS DAYS 2022
Big data解析ビジネス
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
[コグラフ]spss modelerによるデータ加工入門
データ分析を支える技術 データ分析基盤再入門
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#7資料
クラウド上のデータ活用デザインパターン
Deep Learning on Rescale - Oct/11/2016 at Rescale night
PGXのレスポンスとリソース消費
Apache spark 2.3 and beyond
Ad

Pysparkで始めるデータ分析

  • 1. © 2016 IBM Corporation Pysparkを使ったデータ分析 Tanaka Y.P 2017-4-12
  • 2. © 2016 IBM Corporation2 自己紹介 田中裕一(yuichi tanaka) 主にアーキテクチャとサーバーサイドプログラムを担当 することが多い。Hadoop/Spark周りをよく触ります。 Node.js、Python、最近はSpark周りの仕事でScalaを書く ことが多い気がします。 休日はOSS周りで遊んだり。 詳解 Apache Spark
  • 3. © 2016 IBM Corporation3 自己紹介
  • 4. © 2016 IBM Corporation4 アジェンダ • データ分析のお話 • BigDataとApache Spark • 今日やること • A/Bテストをテーマにデータ分析業務を見ていこう • データサイエンスのサイクルとDSX,WatsonMachineLearningのご紹介
  • 5. © 2016 IBM Corporation5 データ分析のお話 データ分析の目的は • データから情報を吸い出し、ビジネス課題の理解、データの理解する • 情報をもとに改善・新規施策の仮説を構築 • 仮説をもとに施策を行い評価可能なデータを収集 • 評価をもとにさらなる改善を行う • 継続的な一連の流れを新たな価値とする
  • 6. © 2016 IBM Corporation6 分析アプローチ 健康診断 探索 検証 現在の状態を把握する『なぜ』の裏付け • 基礎集計 • 売り上げ分析 • 顧客分析 • サイト分析 何らかの「目的」を持った探索 基礎集計・機械学習的手法 • 有料会員化のためのフロー • 離脱ユーザーのカムバックフロー • UI・UXのためのセグメンテーション 何らかの「仮説」に基づいた検証 定量的な観測 • Stepup施策の効果検証 • カムバック施策の効果検証 • 離脱抑制施策の効果検証
  • 7. © 2016 IBM Corporation7 ビジネス課題やド メインの理解 データ取得 データ 探索・理解 データ クレンジング データ変換 (加工) 評価 分析・モデル 作成 結果を共有 モデル適用 アプリ作成 データ・ エンジニア データ・ サイエンティスト ビジネス・アナリスト アプリ開発者 データサイエンスのサイクル
  • 8. © 2016 IBM Corporation8 BigDataとはどんなものか
  • 9. © 2016 IBM Corporation9 Sparkとは 従来Hadoopでは難しかったBigDataにおける アドホック分析やニアリアルタイム処理を実現するための InMemory分散並列処理フレームワーク。 • HDFSを筆頭にCassandraなど分散ストレージのデータと相性が良い • YARN,Mesos,Standaloneの3種類の分散処理基盤の上で動作 • SparkSQL,Streaming,MLlib,GraphXといった処理の拡張を持つ
  • 10. © 2016 IBM Corporation10 • Java, Scala, Pythonを利用してETLを実行可能 • RDD(Reslient Distributed Datasets)はScalaのコレクションの Seqのようなもので、データを順番に保持 • RDDの内部はパーティションに分かれている。パーティション 毎にデータを保持(HDFSブロック数に依存) • 分散処理する際にはパーティション毎に並列に処理 • mapやfilter等の基本的な操作の場合、データの順序は変わ らない。 val csv = spark.textFile("tokyo.csv") val pairs = csv.map(line => (line.split(","))) .map(x => (x(0).take(8), (x(4).toFloat, 1))) .reduceByKey( (x,y) => (x._1 + y._1, x._2 + y._2) ) .map(x => (x._1, x._2._1/x._2._2) ) .sortByKey()  Spark CoreはSparkのエンジン Spark Core 20150614 22:00:00,0,1,8,20.9,8,3.0,8,南南西,8,85,8 20150614 23:00:00,0,1,8,20.9,8,2.6,8,南南西,8,86,8 20150615 00:00:00,0,1,8,20.5,8,1.0,8,南,8,86,8 20150615 1:00:00,0,1,8,20.4,8,0.7,8,南,8,88,8 (2015/6/14,22.565218) (2015/6/15,24.550001) (2015/6/16,23.358332) (2015/6/17,21.583334) 例:平均気温の計算
  • 11. © 2016 IBM Corporation11 • SQLを利用したデータ操作が可 能 • トランザクションなし • Parquet 、Json、Hive だけで なくJDBCやODBCもサポート • Thrift JDBC/ODBCによる外部 からの接続 • 後述のDataFrameをラップする 形で実装 {"name":"貝嶋", "address":{"city":"川崎", "state":"神奈川"}} {"name":"土屋", "address":{"city":"豊洲", "state":"東京"}} {“name”:“山田", "address":{"city":"横浜", "state":"神奈川"}} {"name":"岸代", "address":{"city":"後楽園", "state":"東京"}} val people = sqlContext.jsonFile("test.json") people.registerTempTable("people") val nameAndAddress = sqlContext.sql("SELECT name, address.city, address.state FROM people WHERE address.state="神奈川"") nameAndAddress.collect.foreach(println) {"name":"貝嶋", "address":{"city":"川崎", "state":"神奈川"}} {“name”:“山田", "address":{"city":"横浜", "state":"神奈川"}} 例:住所データ(json)からの特定データの抽出 • SparkSQLによるデータ操作 Spark SQL
  • 12. © 2016 IBM Corporation12 • Sparkによるミニ(マイクロ)バッチの実行 • DStreamと呼ばれるRDDを操作 • 指定間隔ごとにまとめられたRDDを処理(Windows処 理も可能) • 通常のSparkプログラミングとほぼ同様 たとえば、定期的に流入するデータの「移動平均値」の連続計 算 val tstream = ssc.socketTextStream(hostname, port) var mdtxt = tstream.map(x => x.split(",")) .map(x => ( x(0), (x(0), x(1), x(2).toInt) ) ) .updateStateByKey(updateFunc _) mdtxt.print() センサーデータ: (Dev1, 201501010000, 0) (Dev2, 201501010000, 0) (Dev1, 201501010001, 1) Alert: Dev1 Status changed : 1  Sparkでストリーム処理 Spark Streaming 例:センサーデータの出力値変更時にアラート DStream RDD data data RDD data data RDD data data
  • 13. © 2016 IBM Corporation13 • MLlibとRが利用可能 MLlibはScalaで、SparkRはRで 記述可能 • アルゴリズム(MLlib) • SVM、ロジスティック回帰、決定木、K- means、ALSなど • IBMはSystemMLをSparkに提供 val data = spark.textFile("kdata.txt") val parsedData = data.map(x => Vectors.dense(x.split(',').map(_.toDouble))).cache() val numClusters = 3 val numIterations = 10 val clusters = KMeans.train(parsedData, numClusters, numIterations)  Sparkで機械学習 SparkR, Mllib データ: ( 直近購買月[n日前], 期間内購買回数 ) (5,1),(4,2),(5,3),(1,2),(2,4),(2,5),(2,6),(1,4),(1,5),(1,2),(1,5),(5,5) クラスタ結果: ([中心], 人数) ([1.0, 2.0], 2), ([1.5, 4.833333333333333], 6), ([4.666666666666666, 2.0], 3), ([5.0, 5.0], 1) 例:顧客のクラスタ分け 0 2 4 6 0 2 4 6
  • 14. © 2016 IBM Corporation14 • グラフデータを並列分散環境で処理するための フレームワーク • グラフ構造データを用いた解析を行う • 「点」と「辺」からなるデータ • SNSでのつながり、データ間の関連性 など • 表構造では扱うことが難しい関係を見つけ出す • データ間のつながりの抽出 • 輪の抽出 • 距離の計測 • 影響の計測 • グラフDBとの兼ね合い(これから) val graphWithDistance = Pregel( graph.mapVertices((id:VertexId, attr:Int) => List((id, 0))), List[(VertexId, Int)](), Int.MaxValue,EdgeDirection.Out)((id, attr, msg) => mergeVertexRoute(attr, msg.map(a=> (a._1, a._2 + 1))),edge => { val isCyclic = edge.srcAttr.filter(_._1 == edge.dstId).nonEmpty if(isCyclic) Iterator.empty else Iterator((edge.dstId, edge.srcAttr)) },(m1, m2) => m1 ++ m2 )  Sparkでグラフ処理を Spark GraphX つながりの検索 例: つながりと距離を見つけ出す 1,((1,0), (6,1), (9,1), (7,1), (4,2)) 1 2 3 4 5 6 7 89
  • 15. © 2016 IBM Corporation15 DataSet API • Spark v1.6で追加された新しいAPI • 登場背景 • RDDとDataFrameという二つの抽象概念ができてしまった。 • RDDとDataFrameにそれぞれ長所があること • 2つの抽象概念を行き来する為のコストがかかる • 二つの抽象概念をいいとこ取りしたDataSetAPIの登場 • DataFrameの速さはそのまま • オブジェクト・メソッドはコンパイル時のタイプセーフ提供 • DataFrameとのシームレス変換
  • 16. © 2016 IBM Corporation16 Structured Streaming • Spark v2.0で追加された新しいAPI • Datasetの上に実装されたHigh-levelのStreamingAPI • Streamingデータを構造化データとして継続的に処理可能 val in = spark.readStream .schema(schemaImp) .format("csv") .option("header", true) .option("maxFilesPerTrigger", 1) .load("csv-logs") Jacek Warszawa, Polska, 42,true Jacek Warszawa, Polska, 42,true ------------------------------------------- Batch: 0 ------------------------------------------- +-----+--------+-------+---+-----+ | name| city|country|age|alive| +-----+--------+-------+---+-----+ |Jacek|Warszawa| Polska| 42| true| +-----+--------+-------+---+-----+ complete output delta output
  • 17. © 2016 IBM Corporation17 今日のお話し サンプルデータを使ってPysparkで健康診断と探索を行ってみよう • Pysparkを簡単に書いてみよう • 顧客分類について知ろう • A/Bテストユーザーの抽出をやってみよう • A/Bテストユーザーの抽出にKMeansを使ってみよう アクセス ログ.csv 顧客マス タ.csv 購買ロ グ.csv 顧客セグメント A/Bテスト 用ユー ザーグ ループ
  • 18. © 2016 IBM Corporation18 A/Bテストとは何ぞや? A/Bテスト(英: A/B testing)とは、主にインターネットマーケティングで行われる、施策判断 のための試験の総称である。 狭義ではA/Bテストは仮説検定を指す俗称である[1]が、広義のA/Bテストはインターネット マーケティングにおける施策の良否を判断するために、2つの施策同士を比較検討する行 為全般を指す。 by wikipedia 参考: https://ja.wikipedia.org/wiki/A/B%E3%83%86%E3%82%B9%E3%83%88 大人気! ダイエットドリンク 大人気! ダイエットドリンク ○○で第一位! ○○で第一位! 健康に優しい成分 10種類配合 リピート購入続出 たった1ヶ月で -10キロ 下の内どちらがより効果的か?
  • 19. © 2016 IBM Corporation19 DATA SCIENCE EXPERIENCE goo.gl/6iVeoZ
  • 20. © 2016 IBM Corporation20 ビジネス課題やド メインの理解 データ取得 データ 探索・理解 データ クレンジング データ変換 (加工) 評価 分析・モデル 作成 結果を共有 モデル適用 アプリ作成 データ・ エンジニア データ・ サイエンティスト ビジネス・アナリスト アプリ開発者 データサイエンスのサイクル(再) goo.gl/6iVeoZ
  • 21. © 2016 IBM Corporation21 IBM Data Science Experienceの特徴 コミュニティオープンソース IBM Value adds - チュートリアル、データセットの探 索 - データサイエンティストとの共創 - 質問をする:Ask Question - 情報を収集する (記事、論文、技術情報) - プロジェクトの共有 - Scala/Python/R/SQL - Jupyter / Zeppelin* Notebooks - RStudio IDE / Shinyアプリ ケーション - Apache Spark - その他のライブラリ • Object Storage • 生産性を高める追加機能 - 高度なビジュアライゼーショ ンライブラリ - The DSX Canvas - IBM Machine Learning goo.gl/6iVeoZ

Editor's Notes

  • #2: 1
  • #3: 会社ではSparkとHadoopのスペシャリストやってます。
  • #4: 会社ではSparkとHadoopのスペシャリストやってます。
  • #9: 最近のシステムではとてもたくさんのデータが一日に発生しています。 たとえば、今日はWeb系のお客さんが多いですかね?、Web系システムをお持ちの方はご存知かと思いますが、 数千万PV、数億PVの閲覧数を持つコンテンツは単純なサーバーログだけで、 1時間に数Gbyte~数十Gbyte、一日に100GByte近くのデータが発生します。 また、どんなページを見たのか?どんな経路をたどったのか?といったアプリケーションログから始まり、 スマートフォンの普及により、どんな環境でアクセスしたのか?どんな場所からアクセスしたのか?といったユーザーログ ぱっと思いつくだけで多くのデータがあります。こういったデータを分析し、コンテンツの競合に対する付加価値としたり、 新たな事業の基軸として使用したりするわけですね。 上記のようなデータ ウェブサイトデータ、センサデータ、ログデータ、カスタマーデータ、オフィスデータ、オペレーションデータ、メディアデータ、ソーシャルデータなど様々なデータの組み合わせて新たな価値を作ろうとしてるわけですね。 で、このようにデータを集め始めると、すぐに1日数100GByte、数Tbyteのオーダーとなります。 さらに集めたデータを分析・高度な機械学習を行おうと思うとどうでしょうか? 数Tbyte、たとえば長期間の解析だと数十Tbyte、数100TByte級のデータを分析するだけのプログラムはパフォーマンスやエラー処理など、非常に高度になりがちです。 じゃぁ、その問題を解決しましょうというのがHadoopを中心としたHadoopエコシステムです。 では、Hadoopでこれらを効率的に処理するためにどんな基盤が出来てきたのか?
  • #10: おさらい1ページ
  • #12: そこでRDBMSと同様なSQLを用いてRDDの操作を行うのがSparkSQLです。
  • #16: RDDとDataFrameの相互変換は可能 RDDはJVMオブジェクトである為コンパイル時のタイプセーフ(DataFrameはタイプセーフにならない) RDDで書くほうが処理ロジックは容易 基本的に速い対してDataFrameは メモリアカウンティングをやってくれる などそれぞれメリットがある