SlideShare a Scribd company logo
データアーティスト株式会社
藤田 知樹
第1回Rを用いたデータマイニング概論
データ環境Rの基本的なプログラミング
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page2Page2Page2Page2
アジェンダ
今回はデータサイエンスの基礎の基礎:「データ」について簡単に理解したうえで、「基本的なプログラミング」を通し
てRを体感していきます。
説明
Rで使うデータの種類
データを視覚化する
テクニック
データを集計する方法
基本的なプログラミング
実
行
!
実
行
!
第1部:データについて
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page4Page4Page4Page4
第1部:データについて
第1部では、2つのコンテンツを勉強します。
そのほか、よく使うことになるテクニックを紹介します
扱いやすい、データを集計するプログラミングを紹介します
データを見やすくするための5つの方法を紹介します!
Rで扱う4種類のデータを紹介します!
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page5Page5Page5Page5
Rで使うデータの種類 1/5
Rを操作する上で使う主なデータは以下の4種類あります。
ベクトル 行列 データフレーム
リスト
ベクトル 行列
データ
フレーム
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page6Page6Page6Page6
Rで使うデータの種類 2/5(ベクトル)
以下のコードを実行し、ベクトルを作成してみよう。
要素にアクセスし、性質を見てみよう。
#1
v1=c(1:5)
v1=rep(3,10)
v1=rep(1:3,10)
v1=seq(0,100,3)
v.rand=runif(100) #一様な乱数を発生
v.logic=(0.3>v.rand)
v.dice=round(6*runif(100)+0.5) #サイコロを作る
__________________________________________
#2
v1=c(1:15)
length(v1) #v1の長さを見る
v1[4] #4番目を見る
names(v1)=paste(“value”,1:15,sep=“”)
v1[“value13”]
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page7Page7Page7Page7
Rで使うデータの種類 3/5(行列)
以下のコードを実行し、行列を作成してみよう。
行列の要素にアクセスし、さまざまな操作をしてみよう。
#1
v1=c(1:15) #作成
m1=matrix(v1,nrow=5,ncol=3)
m1 #中身を確認
__________________________
#2
dim(m1)
nrow(m1)
ncol(m1)
length(m1)
m1[3,] #3行目を見る
m1[,2] #2行目を見る
rownames(m1)=c("太郎","二郎","三郎","四郎","五郎") #行に名前を付ける
colnames(m1)=c("power","speed","luck") #列に名前を付ける
m1["三郎","luck"]
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page8Page8Page8Page8
Rで使うデータの種類 4/5(行列)
以下のコードをそれぞれ打ち込んで、行列で計算を実行しよう。
行・列の置換や結合をやってみよう。
#計算
m1=matrix(1:15,nrow=5,ncol=3)
m1+1
m1-3
m1*4
m1/2
m1^2
m2=matrix(rep(1:5,3),nrow=5,ncol=3)
m1+m2
m1-m2
m1*m2
t(m1)%*%m2 #とても大切な演算。第3回で説明
m1/m2
#置換、結合
m1=matrix(1:15,nrow=5,ncol=3)
m2=matrix(rep(1:5,3),nrow=5,ncol=3)
m1[1,]=c(2,4,8) #置換
m.r=rbind(m1,m2) #行が追加されるように結合
m.c=cbind(m1,m2) #列が追加されるように結合
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page9Page9Page9Page9
Rで使うデータの種類 5/5(データフレーム)
以下のコードを実行し、データフレームを作ってみよう。
m1=matrix(1:15,nrow=5,ncol=3)
d1=data.frame(fruit=c("りんご","みかん","ぶどう","すいか","もも"),m1)
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page10Page10Page10Page10
データを視覚化する 1/2
Histogram of iris[, 1]
iris[, 1]
Frequency
4 5 6 7 8
051015202530
4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0
2.02.53.03.54.0
Sepal.Length
Sepal.Width
Sepal.Length Sepal.Width Petal.Length Petal.Width
012345
ヒストグラム 散布図 棒グラフ
setosa versicolor virginica
2.02.53.03.54.0
-4 -2 0 2 4
0510152025
x
x^2
ボックスプロット 関数
データを視覚的にわかりやすくとらえる、5つのやり方を身につけよう。
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page11Page11Page11Page11
データを視覚化する 2/2
以下のコードを実行し、データをさまざまに視覚化してみよう。
#ヒストグラム
hist(iris[,1])
_______________________
#散布図
plot(iris[,1:2])
_______________________
#棒グラフ
iris.mean.val=apply(iris[,-5],2,mean)
barplot(iris.mean.val)
_______________________
#ボックスプロット
boxplot(Sepal.Width~Species, data = iris)
_______________________
#関数
curve(x^2,xlim=c(-5,5)) 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0
2.02.53.03.54.0
Sepal.Length
Sepal.Width
Sepal.Length Sepal.Width Petal.Length Petal.Width
012345
棒グラフ
散布図
Histogram of iris[, 1]
iris[, 1]
Frequency
4 5 6 7 8
051015202530
setosa versicolor virginica
2.02.53.03.54.0
ヒストグラム
ボックスプロット
第2部:基本的なプログラミングの習得
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page13Page13Page13Page13
第2部:基本的なプログラミングの習得
第2部では、さらに2つのコンテンツを勉強します。
そのほか、よく使うことになるテクニックを紹介します!
扱いやすい、データを集計するプログラミングを紹介します!
データを見やすくするための5つの方法を紹介しました
Rで扱う4種類のデータを紹介しました
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page14Page14Page14Page14
基本的なプログラミングの習得
1.データの集計 2.繰り返し処理
3.条件分岐 4.自作関数
基本的なプログラミングとして、以下の4つを身につけよう
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page15Page15Page15Page15
基本的なプログラミング(1.データの集計 1/3)
総和 平均 中央値 最大値
分散 標準偏差
etc
…
さまざまな集計量
集計:データを集めて計算し、使いやすい数値にまとめる作業のこと。
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page16Page16Page16Page16
基本的なプログラミング(1.データの集計 2/3)
以下のコードをそれぞれ実行して、データの集計をやってみよう。
v.dice=round(6*runif(100)+0.5)
sum(v.dice) #和
mean(v.dice) #平均
sd(v.dice) #不偏標準偏差
var(v.dice) #不偏分散
summary(v.dice) #複数の統計量
#table
table(v.dice)
v.dice1=round(6*runif(100)+0.5)
v.dice2=round(6*runif(100)+0.5)
dice.mat=cbind(v.dice1,v.dice2)
table(dice.mat) #一つのベクトルの様に扱われる
dice.df=data.frame(v.dice1,v.dice2)
table(dice.df)
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page17Page17Page17Page17
基本的なプログラミング(1.データの集計 3/3)
以下のコードをそれぞれ実行して、データの集計をやってみよう。
#次に、以下を入力して得られる、150個のデータを使ってみよう。
iris
#apply:行列の「行」「列」あるいは「各要素それぞれ」に対して、集計を行う。
apply(iris[,-5],1,sum) #行について集計をする。実際に1行目を合計して確認してみよう。
apply(iris[,-5],2,sum) #列について集計をする。
apply(iris[,-5],2,summary) #列について集計をする。
#tapply:グループ化された変数に対して、グループごとに集計を行う。
#以下では、5列目の分類に基づいて、1列目の平均をそれぞれとっています。
tapply(iris[,1],iris[,5],mean)
#by:以下では、5列目の分類に基づいて、1列目から4列目までのそれぞれに集計量をとっています。
#tapply関数では、引数(カッコの中の値)が同じ長さでなければだめ、という制約があります。
by(iris[,1:4],iris[,5],summary)
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page18Page18Page18Page18
基本的なプログラミング(2.繰り返し処理 1/2)
繰り返し処理:データに対して、コンピュータに同じ操作を自動で複数回行わせるテクニック
NO!
繰り返し処理
リンゴを10個買いに行く
レジへ並ぶ
YES!
10個入れた?
1個かごに入れる
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page19Page19Page19Page19
基本的なプログラミング(2.繰り返し処理 2/2)
以下のコードを実行し、繰り返し処理を体感しよう。
For文とwhile文の違いに注意しよう。
#for:走査したいiの値が決まっている時
n=10
permutation=n
for(i in 1:5){
permutation=permutation*(n-i)
}
permutation #出てきた値を確かめよう
#while:ある条件の時
total.damage=0
while(total.damage<5){
total.damage=total.damage+runif(1)
}
permutation #出てきた値を確かめよう(その2)
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page20Page20Page20Page20
基本的なプログラミング(3.条件分岐 1/2)
条件分岐:ある条件を設定し、それが満たされているかどうかで次に実行する操作を自動で変更できるテクニック
おつかいに行く
スーパー
駄菓子屋さん
帰宅
YES! NO!
条件分岐
寄り道する?
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page21Page21Page21Page21
基本的なプログラミング(3.条件分岐 2/2)
以下のコードを実行し、条件分岐を体感しよう。
val1=4
{
if(val1>=3){ #もしval1が3以上ならval2は1。
val2=1
}
else{
val2=0 #そうでないならval2は0
}
}
val2
val1=3
switch(val1, # switch(文字列,
"1" = print("one"), # "1" のときに実行
"2" = print("two"), # "2" のときに実行
print("not matched") # 一致するものが無い時
)
#val1の数字を1や2に変えて何回かやってみよう。
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page22Page22Page22Page22
基本的なプログラミング(4.自作関数)
自作関数:データを好きなように加工するためには、時には自分で関数を作る必要があります。
たとえば、以下の「CVRを調べる関数」を実行して、コードから関数の性質を考えてみましょう。
get.cvr.error=function(p,n,ety="none"){ #CVRの誤差に関する情報
p.var=p*(1-p)/n
p.sd=p.var^0.5
switch(ety,
"sd"=return(p.sd),
"var"=return(p.var),
print("select type")
)
}
#ここまでが関数の定義
#以下をコピペして実行してみよう。
get.cvr.error(0.1,10,"sd")
get.cvr.error(0.1,10,"var")
get.cvr.error(0.1,10)
cvr.v=0.2*runif(10)
uu.v=round(1000*runif(10))
get.cvr.error(cvr.v,uu.v,"sd") #複数の値を入れた場合
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page23Page23Page23Page23
まとめ
最後に、今回の内容を簡潔にまとめるとこのようになります。
そのほか、よく使うことになるテクニックを紹介しました!
扱いやすい、データを集計するプログラミングを紹介しました!
データを見やすくするための5つの方法を紹介しました!
Rで扱う4種類のデータを紹介しました!
以上です!お疲れ様でした。

More Related Content

統計を始める方へ①_データ環境Rの基本的なプログラミング|データアーティスト

  • 2. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page2Page2Page2Page2 アジェンダ 今回はデータサイエンスの基礎の基礎:「データ」について簡単に理解したうえで、「基本的なプログラミング」を通し てRを体感していきます。 説明 Rで使うデータの種類 データを視覚化する テクニック データを集計する方法 基本的なプログラミング 実 行 ! 実 行 !
  • 4. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page4Page4Page4Page4 第1部:データについて 第1部では、2つのコンテンツを勉強します。 そのほか、よく使うことになるテクニックを紹介します 扱いやすい、データを集計するプログラミングを紹介します データを見やすくするための5つの方法を紹介します! Rで扱う4種類のデータを紹介します!
  • 5. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page5Page5Page5Page5 Rで使うデータの種類 1/5 Rを操作する上で使う主なデータは以下の4種類あります。 ベクトル 行列 データフレーム リスト ベクトル 行列 データ フレーム
  • 6. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page6Page6Page6Page6 Rで使うデータの種類 2/5(ベクトル) 以下のコードを実行し、ベクトルを作成してみよう。 要素にアクセスし、性質を見てみよう。 #1 v1=c(1:5) v1=rep(3,10) v1=rep(1:3,10) v1=seq(0,100,3) v.rand=runif(100) #一様な乱数を発生 v.logic=(0.3>v.rand) v.dice=round(6*runif(100)+0.5) #サイコロを作る __________________________________________ #2 v1=c(1:15) length(v1) #v1の長さを見る v1[4] #4番目を見る names(v1)=paste(“value”,1:15,sep=“”) v1[“value13”]
  • 7. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page7Page7Page7Page7 Rで使うデータの種類 3/5(行列) 以下のコードを実行し、行列を作成してみよう。 行列の要素にアクセスし、さまざまな操作をしてみよう。 #1 v1=c(1:15) #作成 m1=matrix(v1,nrow=5,ncol=3) m1 #中身を確認 __________________________ #2 dim(m1) nrow(m1) ncol(m1) length(m1) m1[3,] #3行目を見る m1[,2] #2行目を見る rownames(m1)=c("太郎","二郎","三郎","四郎","五郎") #行に名前を付ける colnames(m1)=c("power","speed","luck") #列に名前を付ける m1["三郎","luck"]
  • 8. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page8Page8Page8Page8 Rで使うデータの種類 4/5(行列) 以下のコードをそれぞれ打ち込んで、行列で計算を実行しよう。 行・列の置換や結合をやってみよう。 #計算 m1=matrix(1:15,nrow=5,ncol=3) m1+1 m1-3 m1*4 m1/2 m1^2 m2=matrix(rep(1:5,3),nrow=5,ncol=3) m1+m2 m1-m2 m1*m2 t(m1)%*%m2 #とても大切な演算。第3回で説明 m1/m2 #置換、結合 m1=matrix(1:15,nrow=5,ncol=3) m2=matrix(rep(1:5,3),nrow=5,ncol=3) m1[1,]=c(2,4,8) #置換 m.r=rbind(m1,m2) #行が追加されるように結合 m.c=cbind(m1,m2) #列が追加されるように結合
  • 9. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page9Page9Page9Page9 Rで使うデータの種類 5/5(データフレーム) 以下のコードを実行し、データフレームを作ってみよう。 m1=matrix(1:15,nrow=5,ncol=3) d1=data.frame(fruit=c("りんご","みかん","ぶどう","すいか","もも"),m1)
  • 10. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page10Page10Page10Page10 データを視覚化する 1/2 Histogram of iris[, 1] iris[, 1] Frequency 4 5 6 7 8 051015202530 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 2.02.53.03.54.0 Sepal.Length Sepal.Width Sepal.Length Sepal.Width Petal.Length Petal.Width 012345 ヒストグラム 散布図 棒グラフ setosa versicolor virginica 2.02.53.03.54.0 -4 -2 0 2 4 0510152025 x x^2 ボックスプロット 関数 データを視覚的にわかりやすくとらえる、5つのやり方を身につけよう。
  • 11. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page11Page11Page11Page11 データを視覚化する 2/2 以下のコードを実行し、データをさまざまに視覚化してみよう。 #ヒストグラム hist(iris[,1]) _______________________ #散布図 plot(iris[,1:2]) _______________________ #棒グラフ iris.mean.val=apply(iris[,-5],2,mean) barplot(iris.mean.val) _______________________ #ボックスプロット boxplot(Sepal.Width~Species, data = iris) _______________________ #関数 curve(x^2,xlim=c(-5,5)) 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 2.02.53.03.54.0 Sepal.Length Sepal.Width Sepal.Length Sepal.Width Petal.Length Petal.Width 012345 棒グラフ 散布図 Histogram of iris[, 1] iris[, 1] Frequency 4 5 6 7 8 051015202530 setosa versicolor virginica 2.02.53.03.54.0 ヒストグラム ボックスプロット
  • 13. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page13Page13Page13Page13 第2部:基本的なプログラミングの習得 第2部では、さらに2つのコンテンツを勉強します。 そのほか、よく使うことになるテクニックを紹介します! 扱いやすい、データを集計するプログラミングを紹介します! データを見やすくするための5つの方法を紹介しました Rで扱う4種類のデータを紹介しました
  • 14. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page14Page14Page14Page14 基本的なプログラミングの習得 1.データの集計 2.繰り返し処理 3.条件分岐 4.自作関数 基本的なプログラミングとして、以下の4つを身につけよう
  • 15. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page15Page15Page15Page15 基本的なプログラミング(1.データの集計 1/3) 総和 平均 中央値 最大値 分散 標準偏差 etc … さまざまな集計量 集計:データを集めて計算し、使いやすい数値にまとめる作業のこと。
  • 16. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page16Page16Page16Page16 基本的なプログラミング(1.データの集計 2/3) 以下のコードをそれぞれ実行して、データの集計をやってみよう。 v.dice=round(6*runif(100)+0.5) sum(v.dice) #和 mean(v.dice) #平均 sd(v.dice) #不偏標準偏差 var(v.dice) #不偏分散 summary(v.dice) #複数の統計量 #table table(v.dice) v.dice1=round(6*runif(100)+0.5) v.dice2=round(6*runif(100)+0.5) dice.mat=cbind(v.dice1,v.dice2) table(dice.mat) #一つのベクトルの様に扱われる dice.df=data.frame(v.dice1,v.dice2) table(dice.df)
  • 17. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page17Page17Page17Page17 基本的なプログラミング(1.データの集計 3/3) 以下のコードをそれぞれ実行して、データの集計をやってみよう。 #次に、以下を入力して得られる、150個のデータを使ってみよう。 iris #apply:行列の「行」「列」あるいは「各要素それぞれ」に対して、集計を行う。 apply(iris[,-5],1,sum) #行について集計をする。実際に1行目を合計して確認してみよう。 apply(iris[,-5],2,sum) #列について集計をする。 apply(iris[,-5],2,summary) #列について集計をする。 #tapply:グループ化された変数に対して、グループごとに集計を行う。 #以下では、5列目の分類に基づいて、1列目の平均をそれぞれとっています。 tapply(iris[,1],iris[,5],mean) #by:以下では、5列目の分類に基づいて、1列目から4列目までのそれぞれに集計量をとっています。 #tapply関数では、引数(カッコの中の値)が同じ長さでなければだめ、という制約があります。 by(iris[,1:4],iris[,5],summary)
  • 18. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page18Page18Page18Page18 基本的なプログラミング(2.繰り返し処理 1/2) 繰り返し処理:データに対して、コンピュータに同じ操作を自動で複数回行わせるテクニック NO! 繰り返し処理 リンゴを10個買いに行く レジへ並ぶ YES! 10個入れた? 1個かごに入れる
  • 19. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page19Page19Page19Page19 基本的なプログラミング(2.繰り返し処理 2/2) 以下のコードを実行し、繰り返し処理を体感しよう。 For文とwhile文の違いに注意しよう。 #for:走査したいiの値が決まっている時 n=10 permutation=n for(i in 1:5){ permutation=permutation*(n-i) } permutation #出てきた値を確かめよう #while:ある条件の時 total.damage=0 while(total.damage<5){ total.damage=total.damage+runif(1) } permutation #出てきた値を確かめよう(その2)
  • 20. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page20Page20Page20Page20 基本的なプログラミング(3.条件分岐 1/2) 条件分岐:ある条件を設定し、それが満たされているかどうかで次に実行する操作を自動で変更できるテクニック おつかいに行く スーパー 駄菓子屋さん 帰宅 YES! NO! 条件分岐 寄り道する?
  • 21. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page21Page21Page21Page21 基本的なプログラミング(3.条件分岐 2/2) 以下のコードを実行し、条件分岐を体感しよう。 val1=4 { if(val1>=3){ #もしval1が3以上ならval2は1。 val2=1 } else{ val2=0 #そうでないならval2は0 } } val2 val1=3 switch(val1, # switch(文字列, "1" = print("one"), # "1" のときに実行 "2" = print("two"), # "2" のときに実行 print("not matched") # 一致するものが無い時 ) #val1の数字を1や2に変えて何回かやってみよう。
  • 22. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page22Page22Page22Page22 基本的なプログラミング(4.自作関数) 自作関数:データを好きなように加工するためには、時には自分で関数を作る必要があります。 たとえば、以下の「CVRを調べる関数」を実行して、コードから関数の性質を考えてみましょう。 get.cvr.error=function(p,n,ety="none"){ #CVRの誤差に関する情報 p.var=p*(1-p)/n p.sd=p.var^0.5 switch(ety, "sd"=return(p.sd), "var"=return(p.var), print("select type") ) } #ここまでが関数の定義 #以下をコピペして実行してみよう。 get.cvr.error(0.1,10,"sd") get.cvr.error(0.1,10,"var") get.cvr.error(0.1,10) cvr.v=0.2*runif(10) uu.v=round(1000*runif(10)) get.cvr.error(cvr.v,uu.v,"sd") #複数の値を入れた場合
  • 23. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page23Page23Page23Page23 まとめ 最後に、今回の内容を簡潔にまとめるとこのようになります。 そのほか、よく使うことになるテクニックを紹介しました! 扱いやすい、データを集計するプログラミングを紹介しました! データを見やすくするための5つの方法を紹介しました! Rで扱う4種類のデータを紹介しました!