Your SlideShare is downloading. ×
データ解析技術入門(R編)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

データ解析技術入門(R編)

4,200
views

Published on


0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,200
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
43
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. データ解析技術入門(R編)2013年5月10日Takumi Asai
  • 2. 自己紹介 浅井 拓海(26歳)– 職歴:– H21~H23 NTT Communications 先端IPアークテクチャセンタ– H23~現在 NTTレゾナント サーチ事業部ビジネス推進部門– twitter:@p_i_o4545– blog:http://pioneerinocean.hatenablog.com/• 移行した時に記事を全部消したので、今はほとんど内容がありません。• これからしっかりしたRとかHadoopの記事を書きたい(震え声)– 趣味:ピアノ、ギター、シミュゲをやる事、歴史・軍事オタ• どれも「下手の横好き」レベルです。
  • 3. アジェンダ導入 Hadoopについて(4/12に実施。資料はSlideShareに上げてます)Rについてまとめ
  • 4. 導入 昨今良く聞く言葉・ビッグデータ・データサイエンティスト
  • 5. ビッグデータとは?・ビッグデータ通常のデータベース管理ツールなどで取り扱う事が困難なほど巨大な大きさのデータの集まりのこと。通常は、構造化データおよび非構造化データが含まれ、その多様性とサイズや要求される処理の速度と高度化のため、格納と活用(検索/共有/分析/可視化など)の実現を目指したもの。⇒wikipediaよりここで言っている『通常のデータベース管理ツール』とはリレーショナルデータベース的なモノだと思われる。
  • 6. ビッグデータとは?データの種類テキスト 画像 音声サイズ=メガ、ギガ、テラ、ペタ、エクサ、ゼタなど、構造化データ・非構造化データを問いません。
  • 7. データサイエンティストとは?・データサイエンティスト・『21世紀で最も魅力的(セクシー)な職業』⇒ハーバード・ビジネス・レビュー誌・数学、プログラミング、ビジネスの知識など高度な分析スキルを持っており、データ解析によってビジネスの競争力に貢献できる人?・Google,Facebook等はこのような専門家集団を抱えているらしい・・。
  • 8. 余談・データサイエンティスト・世界的に見ても需要は増すばかりだが、供給は少ない。ちなみに、アメリカでこの手の求人を探すと概ね年収1000万以上だそうです。・日本においては、まだそもそも需要自体があまり大きくなっていない?それでも、先進的な会社は優秀な人材の囲い込みを積極的に行っている模様。
  • 9. ネタコピペ:至高VS究極山岡「こちらが我々の考える究極のデータサイエンティストです。」京極「なんやて、経済学部出身やないか!ITに統計学、業務、この中で先の二つの技術的素養が必要なデータサイエンティストには理系出身者が定石やで山岡はん。」山岡「確かに、数学のスキルが要求されるデータサイエンティストには普通の文系出身者は厳しい。しかし、彼の学部時代の専攻は計量経済学。実務では高度なアルゴリズムやビックデータの解析基盤の構築のスキルなんか本当は必要ない、経済学の手法が求められているんだ。」京極「なんやてっ!」山岡「ビッグデータといっても、小売りの場合大きくて1千万件程度、普通のRDBMSで処理可能だし、非構造化データなんて必要ない。アルゴリズムもSPSSやRなんかのツールに入力して結果を解釈できれば十分なんだ。一方で、政府の統計を駆使して地域の需要を推定したりするスモールデータの活用力が必要とされる。経済学の学生が一番得意とするところだよね。だからこそデータサイエンティストの本場、アメリカでは計量経済学出身のデータサイエンティストが多いんだ。」京極「そうやったのかぁ」山岡「そして、これらは理系の人間が苦手とするところなんだ。えてして、理系の人間は技術でゴリ押ししようとしがちだからね。それに何より、人の行動や社会という複雑な問題に取り組むデータサイエンティストには客観的な仮説検証力やそれに対する考察といったコンピテンシーも重要だ。そして、彼には理系にはないデータサイエンティストにとって最も重要なスキルがある。」京極「な、なんやて!」山岡「データサイエンティストにとって最も重要なスキル、そう、それはコミュ力です。多くの利害関係者が存在するデータ活用による戦略立案においては、技術そのものより、現場から経営層まで幅広い人を動かすリーダーシップや、技術を説明するプレゼン力が試される。」山岡「そこで、究極のデータサイエンティストでは、あえて研究室に閉じこもってきた理系院生ではなく、経済学部卒のリア充を持ってきました。もちろん、最低限の統計、ITのスキルは身に付けています。」京極「確かに、はきはき難しい技術を説明できる素晴らしいデータサイエンティストやで。」栗田「お口の中でシャッキリポン!」京極「それにしても究極のデータサイエンティストが文系なんておどろきやなぁ」
  • 10. ネタコピペ:至高VS究極山岡「でも、日本人も悪いんですよ。組織は縦割り官僚的で新しいことには投資しない。実質の決裁権は役員クラスで技術に対する理解はない。こんな状態でデータの活用が進むわけない。そんな企業体質が文系データサイエンティストを必要とする社会を生み出したんだ。」進行「それでは、続いて至高側のデータサイエンティストをお願いします。」雄山「至高のデータサイエンティスト、テーマは会社や社会を構成する人間の『共生』だ。何はともあれ、実物を見てもらおう」京極「こ、これはっ!」栗田「まぁっ!至高のデータサイエンティストはどう見ても非リア充コミュ障の理系大学院生修士課程卒、いや博士課程卒だわっ!」雄山「そう、至高のデータサイエンティストは一流国立大学の工学部情報系博士卒の非リア充だ。自然言語よりプログラミング言語が得意、女性の気持ちはわからないが、数式の意味は手にとるようにわかる。もちろん童貞だ。」京極「せやけど、こらまた対照的な」雄山「士郎、今回のテーマはなんだ」山岡「スーパーのFSPデータ活用だ!だからこそ、エンジニアがリスペクトされるWeb業界とは異なる人選として、小売のクライアントとも話せる文系のリア充データサイエンティストを持ってきた。技術の進んでいないリアルビジネスの世界であれば、彼のスキルでも十分な解析ができるはずだ。」雄山「ワーッハッハッ!これだから素人は困る。FSPデータの活用において、主成分分析や重回帰による売上予測モデルでも構築しようというのだろう。しかし、リアルビジネスの世界だからこそ強烈なデータの相関、スパースなデータに出くわす。そして、そこでは最新最先端の自然言語処理や機械学習のスキルが必要とされる。またTESCOのように顧客へのレコメンデーションを行っている企業もある。今、企業が求めているのは従来から行われてきたマーケティングリサーチとは異なる、売上増に直接結びつく即時性の高いデータ活用だ。そのような状況下で各企業が必要としているのは高度なアルゴリズムとそのチューニングスキルだ。これはツールに入れて結果を解釈するだけの文系データサイエンティスト等では難しい。そもそも、このような単調な作業にはすぐに飽きてしまうであろう。そして、士郎お前は最も大事な点を忘れている。」山岡「何だとっ!」雄山「その文系データサイエンティストは最終的にどうなる。」
  • 11. ネタコピペ:至高VS究極山岡「順調に仕事をこなし、社内でのデータ活用に対する意識を高め、企業の戦略決定の中心になる。」雄山「そう、そして派閥を作り、癒着するようになる。」山岡「あっ!」雄山「社内で大きな権力を持つようになると、必ず利害関係の対立軸から派閥が生まれる。データサイエンティストが本当に尊重されるようになると、大きな権力を持ち、経営企画などにも入り込むだろう。文系のデータサイエンティストを起用すると、もともとリア充の人間だ。仕事への倫理や技術へのあくなき探究心などない。権力を持てば、自分の利益を重視し始める。その結果組織は腐敗し、会社全体の利益は損なわれることになる。これまで何度も繰り返されてきたことだ。ところが、至高のデータサイエンティストは違う。彼にとっての利益は仕事や技術に対する知的好奇心だ。なによりも事実を尊重し、与えられたデータを最新のアルゴリズムで研究しようとする。経営者の立場からすれば、そのようなデータサイエンティストには技術に打ち込める職場環境を提供し、給料は据え置く。そして、従来通り、自分達の仕事である利害関係の調整だけに専念して、高い報酬を受け取る。理系のデータサイエンティストたちはたとえ給料を据え置かれても自らの好きなことに没頭できる。そのようにWinWinの関係を構築し、志向の異なる文系理系の人間が共生できる従来の日本の伝統的な社会構造を守り続けたい、至高のデータサイエンティストにはそのような思いをこめてある。」山岡「くっ」陶人「それでは、結果を発表する。究極のデータサイエンティストは、データサイエンティストは理系という固定観念を覆し、従来ではあまり考えられなかった文系のデータサイエンティスト像という新たなデータサイエンティストの魅力を示してくれた。しかし、ここはアメリカではない。至高のデータサイエンティストは日本人が好んで培ってきた組織体制を批判するのではなく、それを受け止め、文系、理系が共生できるデータサイエンティスト像を提示してくれた。確かにデータサイエンティストによるデータ活用を進めたい、しかしそのような組織体制が日本で受け入れられず結果として日本においてデータサイエンティストという文化が根付かなければ本末転倒、至高のデータサイエンティストは無理せず日本で浸透可能なデータサイエンティスト像を示してくれた。よって、今回は至高のデータサイエンティストの勝利とする。」山岡「くっ!」雄山「ワーッハッハッ!」
  • 12. データ解析技術において重要視される要素・処理速度・処理できるデータサイズ・使いやすさ、手間上記によって有意な結果を得るまでのコストや解析の方向性が変わってきます。今回は方向性の異なる2つの技術を紹介します。
  • 13. 今日触れる技術
  • 14. Rとは? R言語について– オープンソースの統計解析用言語とその利用環境– 対話形式を基本とするため、プログラミング初心者でも扱いやすい。– 今までは教育現場などを中心に使われてきたが、ここ数年でビジネスでも一気に使われ始めた。– 比較対象を挙げるとするとSP○S,S○S?
  • 15. Rの特徴 基本的には対話型でリアルタイムに操作– バッチ処理も可能。– 「作業領域」と呼ばれるメモリ空間を確保して動く
  • 16. Rの特徴 統計・集計・分析系の関数が標準でもいっぱい!– 基本統計量(平均、分散、標準偏差・・)– 単純集計、クロス集計– 回帰分析系、検定系・・・etc グラフィック処理も高水準な関数がたくさんある。– 引数とか指定しなくても勝手に解釈してくれたりする。
  • 17. Rの特徴 良い点– 解析・行列系の言語にしては動作が速い。– Win,Mac,linuxどれでも利用できる。– 処理が簡単なので、プログラミング初心者でも親しみやすい。– エクセルより大きなデータを扱える。– 高機能な解析環境を「タダ」で使える!(重要) ネックな点– とはいえ、Hadoop等で扱えるレベルのデータは使えない•メモリがあふれて死にます。– 行列、ベクトル単位で処理をするという事を常に念頭に置いてコードを書く必要がある。– 「R」でググってもヒットしづらい・・。
  • 18. R vs Excel比較内容直感的な使いやすさ △ ○価格 無料 1万円ちょっとデータ量 △ ×処理速度 △ ×利用用途 統計関連 様々拡張 ○ △問:何故エクセルと比較したのか?答:Rはコーダーだけの道具ではないから。(多分)
  • 19. あえてHadoop関連技術と比較(かなり乱暴です)MapReduce???HiveAP開発コスト(低)AP開発コスト(高)高度な分析単純な集計処理可能なデータ量(小)処理可能なデータ量(大)R実装難易度が高い複雑な統計処理、機械学習は実装できない大規模データは処理できない分析の高度化処理データ量の大容量化
  • 20. Rを使ってみましょう ダウンロード&インストール– 『R インストール』でググるとインストールの仕方が出てきます。– 適当にインストールしてみてください。– 普通のWindowsプログラムと同じ感じでインストールできます。 インストールが出来たら起動してください。
  • 21. まずはいじってみましょう。 Rの基本– 全てがオブジェクトです。変数型宣言等は要りません。•test1 <- 1 or a = 1•test2 <- “abcde”•test3 <- function(x)return(x-1)– 電卓的な計算も普通にできます•1+3– 一次元の集合は下記のように作れます。•a <- c(1,2,3,4,5)•Rではこれを『ベクトル』と呼びます。– 連続数は下記の通りで作れます。•1:12
  • 22. まずはいじってみましょう。 Rの基本– 行列はこんな感じで作れます。•matrix(1:12,3,4)•行列計算も普通にできます。– 行列の一部を取り出すには添え字を使います•a <- matrix(1:12,3,4)•a #-> 1,2,34,5,67,8,910,11,12•a[1,] #-> 1 4 7 10•a[,1] #-> 1 2 3•a[1,1] #-> 1
  • 23. データを扱ってみる irisを使ったRの基本的利用方法– irisと打ってみてください。– 出てきたデータは「アヤメの萼片と花びら」に関するデータです。•正直なところかなりどうでもいいデータですが、これを使ってRの基本関数を試してみようと思います。•ただ、R入門は必ずと言っていいほどこのデータを使います。私もアヤメの萼片と花びらの関係自体はどうでもいいのですが、使い勝手がいいのでこれを使います。– まずは基本統計量を出してみましょう。•summary(iris)
  • 24. データを扱ってみる 基本的な処理関数処理内容 関数 例合計 sum() sum(iris[,1])平均 mean() mean(iris[,1])標準偏差 sd() sd(iris[,1])最大 max() max(iris[,1])最少 min() min(iris[,1])データの作成・結合 c() c(1,2,3,4,5)データの基本統計量 summary() summry(iris)データに関する情報 str() str(iris)
  • 25. データを扱ってみる 図形描画– 最も簡単な図形描画である散布図を作ります•plot(iris[,1],iris[,3])•irisの一列目と三列目をそれぞれx軸y軸にした散布図ができます– 下記の書き方でも大丈夫です。•plot(Petal.Length ~ Sepal.Length, data=iris)•plot(iris$Sepal.Length,iris$Petal.Length)•この2つだと、x,y軸それぞれに名前が付けられます。•『データ名$行・列名』でその行を出すこともできます。– 全変数に対する散布図•plot(iris)で全変数をクロスした散布図表が出てきます。•pairs(iris[1:5])でも同じです。– 色づけ•pairs(iris[1:4], pch = 21, bg = c("red", "green3","blue")[unclass(iris$Species)])
  • 26. データを扱ってみる 続き2– 相関を見てみましょう。•cor(iris[,1:4])– 単回帰分析をしてみましょう。•kaiki <- lm(iris$Petal.Length ~ iris$Sepal.Length)– lmは線形モデルによる回帰を出します。– lm(目的変数~説明変数)で使います»kaiki #->»(Intercept) iris$Sepal.Length-7.101 1.858– これは単回帰直線がy=1.858x-7.101という事です。•plot(iris$Sepal.Length, iris$Petal.Length)•abline(kaiki)
  • 27. ここまでここまでは基本的な操作紹介ですが、今日は言語としてのRの特徴を体験して頂きます。
  • 28. 他言語使いがRをいじった時に言われること遅すぎwwワロタwwwhileで100回ループさせただけなのに処理に60秒もかかったお!こんなもの使ってる奴は情弱に違いないお!!ww昨年あたりの私(実話)
  • 29. 他言語使いがRをいじった時に言われることお前の使い方が悪いんだよ!ベクトル化された関数をわざわざ添字操作で使うな!Rは「一気に」操作させる方法を考えるのが基本だ!
  • 30. Rの掟 Rを使う上での掟– for なるべく使わないでください。– if なるべく使わないでください。– while やめてください。– repeat やめてください。– 添字操作 絶対にやめてください。•こういうのtest[]={1,2,3,4,5}for(i=0,i<=4,i++){if(test[i]<=3){count++}print(count)
  • 31. Rの掟(例1) 逐次処理(足し算)start <- proc.time()rep <- 1000 # 足し算の回数n <- 1000 # 変数の数(配列の要素数)x <- rep(0, n) # 一万個の変数(配列)の初期化for (j in (1:rep) ) { # rep 回の繰り返しfor (i in (1:n)) { # 一万個の変数それぞれに値を加えるx[i] <- x[i] + i # 数値計算ライブラリのテストでは、x[i] <- x[i] + log(i + 1)}}print(proc.time() - start) #->経過6.42秒上記をやると処理コストが大きい。
  • 32. Rの掟(例1) ベクトル処理start <- proc.time()rep <- 1000 # 足し算の回数n <- 1000 # 変数の数(配列の要素数)x <- rep(0, n) # 一万個の変数(配列)の初期化for (j in (1:rep) ) { # rep 回の繰り返し# 一万個の変数に、一度に値を加えるx <- x + (1:n) # 数値計算ライブラリのテストでは、x <- x + log(1:n)}print(proc.time() - start) #->経過1.27秒足し算を「一気に」行うのが正解。
  • 33. Rの掟(例2) 添字操作による論理判断start <- proc.time()count=0 #結果を入れる変数i=0 #カウンタrep=1000 #繰り返し数for(j in 1:rep){for(i in 1:150){if(iris[i,5]=="virginica"){count = count+iris[i,1]}}}print(proc.time() - start) #->経過26.05秒
  • 34. Rの掟(例2) 添字集合による論理判断– 添字を一つでは無く「ある条件の集合体」として操作させる。– それによってできた添字集合は逐次の論理判断と等価start <- proc.time()count=0 #結果を入れる変数i=0 #カウンタrep=1000 #繰り返し数for(j in 1:rep){count=sum(iris[iris[,5]=="virginica",1])+count}print(proc.time() - start)#経過->0.28秒
  • 35. 1手詰め 下記の処理を早くして下さい。 ヒント– Rは関数に「集合を突っ込む」のが基本です。– exp()の処理自体は重要ではありません。•対数でも三角関数でも同じです。x <- runif(1000000) #runifは乱数を発生させています。ここは変えないでください。test1 <- function () {res <- numeric(1000000) #numericは0が入った数値オブジェクトを生成します。for (i in 1:1000000) res[i] <- exp(x[i]) #expはeのべき乗をとります。return(res)}system.time(test1())
  • 36. 正解 これだけ。 解説– Rは「集合を突っ込む」のが基本です。– 今までの例でもそうでしたが、Rは極力「コードを書かない」でください。– 大体の関数はベクトル化されていて、「一気に操作」が可能です。x <- runif(1000000)system.time(res <- exp(x))
  • 37. Rを適切に使うには。(ネタ) エスニックジョーク的な。– Rが遅いって?おいおい、CPUがバカみたいに速いマシンを買ってメモリをアホみたいに積めばいいじゃないか!HAHAHA!– Rが遅いって?同志よ。コンピュータを酷使するのだ。シベリアには行きたくないだろう?– Rが遅いって?紳士たる者、そんなことでうろたえてはいけない。– Rが遅いって?しかし、ルールにのっとって書かれたコードであればそれが正しい。– Rが遅いって?そのやり方は有名な研究室の先生が提示した方法ですか?– Rが遅いって?人員を投入して手計算させるのだ!– Rが遅いって?委託の決裁を作成しよう!冗談ではありますが、一部(解決策としての)真理を含みます。※エスニックジョークとは各国の国民性をジョークにしたものです。上から米,露,英,独,日,中のイメージ。最後は・・。
  • 38. これであなたもR使いに!もうif文やループを使うのは嫌だお。そういうのは情弱がやることだお。論理判断やループを使うのが嫌になってくればR使いとしてあなたは最適化されました。他言語?何それ美味しいの?
  • 39. これであなたもR使いに!いちいち極端なんだよ!必要な時は使えばいいだろ!・・しかし忘れないでください。あくまで高速化は手段です。高速化が目的にならないようにして下さい。
  • 40. 復習 Rの特徴– 端的に言って汎用言語に慣れた人からは少々クセがある言語だと思われる。– ただし、ハマればかなり高速。コンパイラを使う言語にはさすがに敵わないが、RubyやPerlより高速に処理をすることも出来る。•ただし、for文,if文を多用したりすると、Ruby,Perlでやるときの数倍以上の時間が掛かる事も・・・。– 図形描画、統計処理共に高水準の関数が揃っている。使い方を間違えなければ、強力なツールとなる!
  • 41. 3つの要素:長所(R) 処理速度– Rの書き方さえ押さえれば驚くほど速い。 処理できるデータサイズ– エクセルなどよりは大きなデータも扱える。– 統計的解析を行う場合は「サンプリング」するという基本思想 使いやすさ、手間– プログラム初心者であっても覚えやすい– インストールすればすぐに使える。環境依存が少ない。– 拡張パッケージがかなり豊富
  • 42. 3つの要素:短所(R) 処理速度– 裏を返せばRの書き方を押さえないと恐ろしく遅い 処理できるデータサイズ– 基本的にメモリ容量以下しか扱えない 使いやすさ、手間– 流石にエクセル並みの親しみやすさまでは行かない。– 巷での利用例などがCやRubyほど充実しておらず、情報収集が若干困難な時もある。•「R」という名前がまず検索しにくい。意外と深刻。
  • 43. Rに関する取り組み Rの大容量・高速化– RとHadoopやRとmpiを組み合わせるという取り組みもあります。– が、入門編ですので今回は触れません。別の機会に。
  • 44. 実体験 処理容量の話– 恐らく世の中にギガバイト、テラバイト、ペタバイトの分析を日常的に必要な人というのはそこまでいない??– そのため、日常的な(メガ、ギガ程度)の分析・集計はRで行っています。テキスト処理もめんどくさいのでRでやってます。– 大容量データに対して「高度な処理」を加える事もそんなに多くはないので、なるべくHiveを使ってます。今のところ、全てのデータに向いた万能解析ツールは無い。
  • 45.  赤い部分は必要ですか?テールの部分まで必要無ければサンプリングでも事足りるかもしれません。最後に
  • 46. 最後に データ分析について– データ分析といっても人によって求める者は様々です。•単なる集計•統計学的な手法•機械学習・クラスタリング 等々・・・– データ全部が必要なのか、一部でいいのかでも違います– それぞれに合ったツールを選んでください。あくまで、今日取り上げた内容は入門編です。実際の利用については(機会があれば)やらせて頂きます。
  • 47. 参考資料 Rjpwiki様http://www.okada.jp.org/RWiki/ R-Tips様http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html 2chアスキーアート
  • 48. ご清聴ありがとうございました。おわりです。