Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
© 2016 IBM Corporation
Pysparkを使ったデータ分析
Tanaka Y.P
2017-4-12
© 2016 IBM Corporation2
自己紹介
田中裕一(yuichi tanaka)
主にアーキテクチャとサーバーサイドプログラムを担当
することが多い。Hadoop/Spark周りをよく触ります。
Node.js、Python、最...
© 2016 IBM Corporation3
自己紹介
© 2016 IBM Corporation4
アジェンダ
• データ分析のお話
• BigDataとApache Spark
• 今日やること
• A/Bテストをテーマにデータ分析業務を見ていこう
• データサイエンスのサイクルとDSX,Wa...
© 2016 IBM Corporation5
データ分析のお話
データ分析の目的は
• データから情報を吸い出し、ビジネス課題の理解、データの理解する
• 情報をもとに改善・新規施策の仮説を構築
• 仮説をもとに施策を行い評価可能なデータを収...
© 2016 IBM Corporation6
分析アプローチ
健康診断
探索
検証
現在の状態を把握する『なぜ』の裏付け
• 基礎集計
• 売り上げ分析
• 顧客分析
• サイト分析
何らかの「目的」を持った探索
基礎集計・機械学習的手法
•...
© 2016 IBM Corporation7
ビジネス課題やド
メインの理解
データ取得
データ
探索・理解
データ
クレンジング
データ変換
(加工)
評価
分析・モデル
作成
結果を共有
モデル適用
アプリ作成
データ・
エンジニア
デー...
© 2016 IBM Corporation8
BigDataとはどんなものか
© 2016 IBM Corporation9
Sparkとは
従来Hadoopでは難しかったBigDataにおける
アドホック分析やニアリアルタイム処理を実現するための
InMemory分散並列処理フレームワーク。
• HDFSを筆頭にCas...
© 2016 IBM Corporation10
• Java, Scala, Pythonを利用してETLを実行可能
• RDD(Reslient Distributed Datasets)はScalaのコレクションの
Seqのようなもので、...
© 2016 IBM Corporation11
• SQLを利用したデータ操作が可
能
• トランザクションなし
• Parquet 、Json、Hive だけで
なくJDBCやODBCもサポート
• Thrift JDBC/ODBCによる外...
© 2016 IBM Corporation12
• Sparkによるミニ(マイクロ)バッチの実行
• DStreamと呼ばれるRDDを操作
• 指定間隔ごとにまとめられたRDDを処理(Windows処
理も可能)
• 通常のSparkプログラ...
© 2016 IBM Corporation13
• MLlibとRが利用可能
MLlibはScalaで、SparkRはRで
記述可能
• アルゴリズム(MLlib)
• SVM、ロジスティック回帰、決定木、K-
means、ALSなど
• I...
© 2016 IBM Corporation14
• グラフデータを並列分散環境で処理するための
フレームワーク
• グラフ構造データを用いた解析を行う
• 「点」と「辺」からなるデータ
• SNSでのつながり、データ間の関連性
など
• 表構...
© 2016 IBM Corporation15
DataSet API
• Spark v1.6で追加された新しいAPI
• 登場背景
• RDDとDataFrameという二つの抽象概念ができてしまった。
• RDDとDataFrameにそれ...
© 2016 IBM Corporation16
Structured Streaming
• Spark v2.0で追加された新しいAPI
• Datasetの上に実装されたHigh-levelのStreamingAPI
• Streamin...
© 2016 IBM Corporation17
今日のお話し
サンプルデータを使ってPysparkで健康診断と探索を行ってみよう
• Pysparkを簡単に書いてみよう
• 顧客分類について知ろう
• A/Bテストユーザーの抽出をやってみよう...
© 2016 IBM Corporation18
A/Bテストとは何ぞや?
A/Bテスト(英: A/B testing)とは、主にインターネットマーケティングで行われる、施策判断
のための試験の総称である。
狭義ではA/Bテストは仮説検定を指す...
© 2016 IBM Corporation19
DATA SCIENCE EXPERIENCE
goo.gl/6iVeoZ
© 2016 IBM Corporation20
ビジネス課題やド
メインの理解
データ取得
データ
探索・理解
データ
クレンジング
データ変換
(加工)
評価
分析・モデル
作成
結果を共有
モデル適用
アプリ作成
データ・
エンジニア
デ...
© 2016 IBM Corporation21
IBM Data Science Experienceの特徴
コミュニティオープンソース IBM Value adds
- チュートリアル、データセットの探
索
- データサイエンティストとの共...
Upcoming SlideShare
Loading in …5
×

Pysparkで始めるデータ分析

2,515 views

Published on

Pysparkで始めるデータ分析
A/BテストをテーマにPysparkを使ってデータ分析を始めてみましょう。
Jupyter Notebookのサンプルは以下になります。
https://apsportal.ibm.com/analytics/notebooks/44b83c22-b6d6-4327-97d8-f5070d3f1c74/view?access_token=23d67e4f92799086c02e5692f920679a5207dd3e46cbc563d0ca76205a5fe5d6

Published in: Technology
  • Be the first to comment

Pysparkで始めるデータ分析

  1. 1. © 2016 IBM Corporation Pysparkを使ったデータ分析 Tanaka Y.P 2017-4-12
  2. 2. © 2016 IBM Corporation2 自己紹介 田中裕一(yuichi tanaka) 主にアーキテクチャとサーバーサイドプログラムを担当 することが多い。Hadoop/Spark周りをよく触ります。 Node.js、Python、最近はSpark周りの仕事でScalaを書く ことが多い気がします。 休日はOSS周りで遊んだり。 詳解 Apache Spark
  3. 3. © 2016 IBM Corporation3 自己紹介
  4. 4. © 2016 IBM Corporation4 アジェンダ • データ分析のお話 • BigDataとApache Spark • 今日やること • A/Bテストをテーマにデータ分析業務を見ていこう • データサイエンスのサイクルとDSX,WatsonMachineLearningのご紹介
  5. 5. © 2016 IBM Corporation5 データ分析のお話 データ分析の目的は • データから情報を吸い出し、ビジネス課題の理解、データの理解する • 情報をもとに改善・新規施策の仮説を構築 • 仮説をもとに施策を行い評価可能なデータを収集 • 評価をもとにさらなる改善を行う • 継続的な一連の流れを新たな価値とする
  6. 6. © 2016 IBM Corporation6 分析アプローチ 健康診断 探索 検証 現在の状態を把握する『なぜ』の裏付け • 基礎集計 • 売り上げ分析 • 顧客分析 • サイト分析 何らかの「目的」を持った探索 基礎集計・機械学習的手法 • 有料会員化のためのフロー • 離脱ユーザーのカムバックフロー • UI・UXのためのセグメンテーション 何らかの「仮説」に基づいた検証 定量的な観測 • Stepup施策の効果検証 • カムバック施策の効果検証 • 離脱抑制施策の効果検証
  7. 7. © 2016 IBM Corporation7 ビジネス課題やド メインの理解 データ取得 データ 探索・理解 データ クレンジング データ変換 (加工) 評価 分析・モデル 作成 結果を共有 モデル適用 アプリ作成 データ・ エンジニア データ・ サイエンティスト ビジネス・アナリスト アプリ開発者 データサイエンスのサイクル
  8. 8. © 2016 IBM Corporation8 BigDataとはどんなものか
  9. 9. © 2016 IBM Corporation9 Sparkとは 従来Hadoopでは難しかったBigDataにおける アドホック分析やニアリアルタイム処理を実現するための InMemory分散並列処理フレームワーク。 • HDFSを筆頭にCassandraなど分散ストレージのデータと相性が良い • YARN,Mesos,Standaloneの3種類の分散処理基盤の上で動作 • SparkSQL,Streaming,MLlib,GraphXといった処理の拡張を持つ
  10. 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. 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. 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. 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. 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. 15. © 2016 IBM Corporation15 DataSet API • Spark v1.6で追加された新しいAPI • 登場背景 • RDDとDataFrameという二つの抽象概念ができてしまった。 • RDDとDataFrameにそれぞれ長所があること • 2つの抽象概念を行き来する為のコストがかかる • 二つの抽象概念をいいとこ取りしたDataSetAPIの登場 • DataFrameの速さはそのまま • オブジェクト・メソッドはコンパイル時のタイプセーフ提供 • DataFrameとのシームレス変換
  16. 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. 17. © 2016 IBM Corporation17 今日のお話し サンプルデータを使ってPysparkで健康診断と探索を行ってみよう • Pysparkを簡単に書いてみよう • 顧客分類について知ろう • A/Bテストユーザーの抽出をやってみよう • A/Bテストユーザーの抽出にKMeansを使ってみよう アクセス ログ.csv 顧客マス タ.csv 購買ロ グ.csv 顧客セグメント A/Bテスト 用ユー ザーグ ループ
  18. 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. 19. © 2016 IBM Corporation19 DATA SCIENCE EXPERIENCE goo.gl/6iVeoZ
  20. 20. © 2016 IBM Corporation20 ビジネス課題やド メインの理解 データ取得 データ 探索・理解 データ クレンジング データ変換 (加工) 評価 分析・モデル 作成 結果を共有 モデル適用 アプリ作成 データ・ エンジニア データ・ サイエンティスト ビジネス・アナリスト アプリ開発者 データサイエンスのサイクル(再) goo.gl/6iVeoZ
  21. 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

×