狠狠撸

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

More Related Content

データ解析技术入门(搁编)