SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
HiRoshima.R #4
2015.7.11
伊藤 歩
for関数を使った繰り返し処理による
ヒストグラムの一括出力
ヒストグラムといいつつ
棒グラフも描きますっ
2
やりたいこと
データに含まれるすべての変数の
分布をグラフ化したい!
4
離散変数:縦軸に頻度をとった棒グラフ
連続変数:ヒストグラム
悩み
変数の多いデータだと同じプログラムを
繰り返し書くことになり…
5
まだまだ続く
・
・
・
 めんどくさい
 行数がすごいことに
 途中で間違いに気づいたら
心が折れる
本日の目標
データに含まれるすべての変数の分布を
繰り返し関数forをつかって
より短いプログラムで楽にグラフ化する!
6
本日の内容
2つの
ポイント
1.オブジェクトのクラス
2.変数・要素の呼び出し
4つの
手順
3.plotとhist 4.forで一括出力
7
1.クラスの変換 2.データの分割
for関数を使った繰り返し処理による
ヒストグラムの一括出力
本日の内容
2つの
ポイント
1.オブジェクトのクラス
2.変数・要素の呼び出し
8
ポイント1|オブジェクトのクラス 9
データセットの中には様々な種類の変数が混在している
間隔
順序
比率
名義
量的
質的
連続
離散
Rの世界では変数の種類はどのように扱われるのか?
ポイント1|オブジェクトのクラス
文字クラス:
character
“ ”で囲われた文字データ
数値クラス:
numeric
数値データ
整数クラス:
integer
数値データのうち整数のデータ
因子クラス:
factor
(ordered factor)
みかけは文字クラスや整数クラス
実態は1,2,3…の数値が入っている!
(factorに順序がついたもの)
10
例)sex:Factor w/2 levels “男”,“女”:1,2,2,1,…
論理クラス(logical):TRUE or FALSE もある
オブジェクト(変数)にはクラスが定義されている
character
numeric
integer
factor
hist
plot
ポイント1|オブジェクトのクラス 11
クラスによって関数の出力形式が異なる
棒グラフ
ヒストグラム
散布図
ポイント1|オブジェクトのクラス 12
plot
factor
numeric
integer
factorcharacter
plothist
クラスにごとにグラフ出力関数を選ぶ!
本日の内容
2つの
ポイント
1.オブジェクトのクラス
2.変数・要素の呼び出し
13
ポイント2|変数・要素の呼び出し
変数・要素は列番号・要素番号で呼び出す
14
head(iris$Sepal.Length) # データフレーム名$列名
[1] 5.1 4.9 4.7 4.6 5.0 5.4
head(iris[,1]) # データフレーム名[,列番号]
[1] 5.1 4.9 4.7 4.6 5.0 5.4
for関数でループさせるリストとして扱いやすい!
head( データフレーム ):データフレームの上から6行を取り出す
2つのポイントのまとめ 15
1.クラスごとに適切なグラフ出力関数を選ぶ
2. for関数使うとき列や要素は番号でよびだす
character → factor :plot...棒グラフ
numeric・integer :hist...ヒストグラム
factor :plot...棒グラフ
データフレーム[,列番号]
ベクトル[, 要素番号]
では,サンプルデータを操作しながら
4つの手順を説明していきます。
16
本日のデータセット
irisデータにv1,v2,v3を追加
v1:ordered factor…1<2<3<4
v2:character…A,B,C
v3:character…地区1~地区5
17
dat <- iris
v1 <- ordered(c(rep(1, length=40), rep(2, length=55),
rep(3, length=30), rep(4, length=25)))
v2 <- c(rep("A", length=45), rep("B", length=65), rep("C", length=40))
v3 <- c(rep("地区1", length=25), rep("地区2", length=25),
rep(“地区3”, length=15), rep("地区4", length=50),
rep("地区5", length=35))
dat <- cbind(dat, v1, v2, v3)
dat[,7] <- as.character(dat[,7])
dat[,8] <- as.character(dat[,8])
(irisに含まれていないクラスをもつ)
本日のデータセット 18
head(dat)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species v1 v2 v3
1 5.1 3.5 1.4 0.2 setosa 1 A 地区1
2 4.9 3.0 1.4 0.2 setosa 1 A 地区1
3 4.7 3.2 1.3 0.2 setosa 1 A 地区1
4 4.6 3.1 1.5 0.2 setosa 1 A 地区1
5 5.0 3.6 1.4 0.2 setosa 1 A 地区1
6 5.4 3.9 1.7 0.4 setosa 1 A 地区1
① ③ ④ ⑤ ⑥⑦ ⑧②
8つの変数を含むデータフレーム dat を作成
integer 型は今回の説明に含めませんが
numeric 型と同様に扱えます!
19
4つの手順 20
3.plotとhist 4.forを使って一括出力
1.クラスの変換 2.データの分割
character
factor factor
numeric
numeric
factor
numeric
factor numeric
plot hist
factor
factor
numeric
numeric
numeric
factor
factor
numeric numeric
for {plot} for {hist}
factor numeric
4つの手順 21
3.plotとhist 4.forを使って一括出力
2.データの分割
factor
numeric
numeric
factor
factor numeric
plot hist
factor
factor
numeric
numeric
for {plot} for {hist}
factor numeric
1.クラスの変換
character
factor
numeric numeric
factor
factor
numeric numeric
データに含まれるcharacter型の変数を
探してfactor型に変換する
手順 1|クラスの変換
datの各変数のクラスを確認
22
sapply(dat, class)
$Sepal.Length
[1] "numeric"
$Sepal.Width
[1] "numeric"
$Petal.Length
[1] "numeric"
$Petal.Width
[1] "numeric“
$Species
[1] "factor"
$v1
[1] "ordered" "factor"
$v2
[1] "character"
$v3
[1] "character"
class( オブジェクト):オブジェクトのクラスを呼び出す
sapply( データフレーム, 関数):関数をデータフレームの列ごとに適用する
⑦
⑧
手順 1|クラスの変換
character型をfactor型に変換
23
dat[,7] <- as.factor(dat[,7]) # datの7,8列目を変換
dat[,8] <- as.factor(dat[,8])
class(dat[,7]) # 変換できたか確認
[1] “factor"
as.factor( オブジェクト ):オブジェクトのクラスをfactor型に変換する
[1] “factor"
class(dat[,8])
OK!
OK!
4つの手順 24
3.plotとhist 4.forを使って一括出力
1.クラスの変換
character
factor
numeric
factor numeric
plot hist
numeric
factor
factor
numeric numeric
for {plot} for {hist}
factor numeric
2.データの分割
factor
numeric
numeric
factor
factor
factor
numeric
numeric
データフレームをfactor型かnumeric型のみ
含むデータフレームに分割する
colf <- grep("factor", sapply(dat, class))
colf
手順 2|データの分割
factor型の入っている列を探す
25
[1] 5 6 7 8 # “factor” が入っているのは5,6,7,8番目の列だよ!
grep( “検索したい文字列”, 検索対象 ):
検索対象の中から検索したい文字列が何番目に入っているか探す
$Sepal.Length
[1] "numeric"
$Sepal.Width
[1] "numeric"
$Petal.Length
[1] "numeric"
$Petal.Width
[1] "numeric“
$Species
[1] "factor"
$v1
[1] "ordered" "factor"
$v2
[1] "factor“
$v3
[1] "factor"
①
③
④
⑤
⑥
⑦
⑧
②
中は...
手順 2|データの分割
データをnumeric型とfactor型に分割する
26
datn <- dat[,-c(colf)] # datからfactorの列を除く
datf <- dat[,c(colf)] # datからfactorの列を選ぶ
head(datn) head(datf)
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
Species v1 v2 v3
1 setosa 1 A 地区1
2 setosa 1 A 地区1
3 setosa 1 A 地区1
4 setosa 1 A 地区1
5 setosa 1 A 地区1
6 setosa 1 A 地区1
4つの手順 27
4.forを使って一括出力
1.クラスの変換 2.データの分割
character
factor factor
numeric
numeric
factor
numeric
factor
factor
numeric
numeric
numeric
factor
factor
numeric numeric
for {plot} for {hist}
factor numeric
3.plotとhist
factor numeric
plot hist
factor型はplot,numeric型はhistで
それぞれグラフ出力するプログラムをかく
手順 3| plotとhist 28
plot(datf[,列番号],
main = colnames(datf)[列番号], # グラフタイトル
cex.main = 3, # グラフタイトルの文字サイズ
col = “black”, # バーの色
space = 0.3) # バーの間隔
before after
colnames( データフレーム ):データフレームの列名を取り出す
factor
手順 3| plotとhist 29
hist(datn[,列番号],
main = colnames(datn)[列番号],
cex.main = 3,
xlab = NULL, # x軸ラベル
ylab = NULL, # y軸ラベル
breaks = 20, # 階級の分割数
# デフォルトはスタージェスの公式
# “Scott”でスコットの選択
col = “grey”) # ヒストグラムの色
before after
numeric
4つの手順 30
3.plotとhist
1.クラスの変換 2.データの分割
character
factor factor
numeric
numeric
factor
numeric
factor numeric
plot hist
factor
factor
numeric
numeric
numeric
factor
factor
numeric numeric
4.forを使って一括出力
for {plot} for {hist}
factor numeric
作成したプログラムを
for関数の中に組み込んでグラフを出力する
手順 4| forを使って一括出力
for関数の使い方
31
for ( i in 1:ncol(datf)){
plot(datf[, i ])
}
for ( ループ変数 in リスト ){ 繰り返したい処理 }
ループ変数 リスト
ncol( データフレーム ):データフレームの列数を出力する
リストの中身:( 1, 2, 3, 4 )
手順 4| forを使って一括出力
foctor型の棒グラフを一括出力
32
for(i in 1:ncol(datf)){
plot(datf[, i ],
main = colnames(datf)[ i ],
col = “black”,
space = 0.3,
cex.main = 3)
}
手順 4| forを使って一括出力
numeric型のヒストグラムを一括出力
33
for(i in 1:ncol(datn)){
hist(datn[, i ],
main = colnames(datn)[ i ],
cex.main = 3,
xlab = NULL,
ylab = NULL,
breaks = 20,
col = “grey”)
}
ついでに
手順1のas.factorによる
characer型のfactor型への変換も
for関数で繰り返せば楽々&短縮
34
colc <- grep("character", sapply(dat,class))
for(i in 1:length(colc)){
dat[,colc[i]] <- as.factor(dat[,colc[i]])
}
こんなに短く! 35
61行
25行
変数が多いほど短くなる!楽になる!
参考にさせていただきました
オブジェクトクラスについて
生態学のデータ解析 - R-primer/R 基本データクラス
http://hosho.ees.hokudai.ac.jp/~kubo/ce/RdataType0.html
データフレームの分割について
scratch-R データの選択・除外・抽出etc
http://eau.uijin.com/management/subset.html
グラフ出力について
biostatistics グラフィックス
http://stat.biopapyrus.net/graph/hist.html
全体的に
R-Tips
RjpWiki - RjpWiki
改訂2版 R言語逆引きハンドブック
R関連のslide share などなど
36

Contenu connexe

Tendances

関数データ解析の概要とその方法
関数データ解析の概要とその方法関数データ解析の概要とその方法
関数データ解析の概要とその方法Hidetoshi Matsui
 
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)Yoshitake Takebayashi
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章Shushi Namba
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたKazuya Wada
 
[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
[DL輪読会]Temporal DifferenceVariationalAuto-Encoder[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
[DL輪読会]Temporal DifferenceVariationalAuto-EncoderDeep Learning JP
 
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデルMasashi Komori
 
2 4.devianceと尤度比検定
2 4.devianceと尤度比検定2 4.devianceと尤度比検定
2 4.devianceと尤度比検定logics-of-blue
 
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリングベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング宏喜 佐野
 
質的変数の相関・因子分析
質的変数の相関・因子分析質的変数の相関・因子分析
質的変数の相関・因子分析Mitsuo Shimohata
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価Shintaro Fukushima
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布についてHiroshi Shimizu
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)Kota Matsui
 
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnetNagi Teramo
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)yutannihilation
 
PRML輪読#1
PRML輪読#1PRML輪読#1
PRML輪読#1matsuolab
 
機械学習と機械発見:自然科学研究におけるデータ利活用の再考
機械学習と機械発見:自然科学研究におけるデータ利活用の再考機械学習と機械発見:自然科学研究におけるデータ利活用の再考
機械学習と機械発見:自然科学研究におけるデータ利活用の再考Ichigaku Takigawa
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門Shiqiao Du
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)Takao Yamanaka
 
Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~ Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~ Takashi J OZAKI
 

Tendances (20)

関数データ解析の概要とその方法
関数データ解析の概要とその方法関数データ解析の概要とその方法
関数データ解析の概要とその方法
 
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
[DL輪読会]Temporal DifferenceVariationalAuto-Encoder[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
 
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
 
2 4.devianceと尤度比検定
2 4.devianceと尤度比検定2 4.devianceと尤度比検定
2 4.devianceと尤度比検定
 
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリングベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
 
質的変数の相関・因子分析
質的変数の相関・因子分析質的変数の相関・因子分析
質的変数の相関・因子分析
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布について
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
 
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
 
PRML輪読#1
PRML輪読#1PRML輪読#1
PRML輪読#1
 
機械学習と機械発見:自然科学研究におけるデータ利活用の再考
機械学習と機械発見:自然科学研究におけるデータ利活用の再考機械学習と機械発見:自然科学研究におけるデータ利活用の再考
機械学習と機械発見:自然科学研究におけるデータ利活用の再考
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~ Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~
 

Similaire à for関数を使った繰り返し処理によるヒストグラムの一括出力

genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターsohta
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42Atsushi Hayakawa
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)Wataru Shito
 
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門Yuya Matsumura
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 Nobuaki Oshiro
 
2017年3月版データマエショリスト入門(誤植修正版)
2017年3月版データマエショリスト入門(誤植修正版)2017年3月版データマエショリスト入門(誤植修正版)
2017年3月版データマエショリスト入門(誤植修正版)Yuya Matsumura
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101Nobuaki Oshiro
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25Nobuaki Oshiro
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25Nobuaki Oshiro
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみようHiroki Itô
 
10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用Nobuaki Oshiro
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
卒研発表
卒研発表卒研発表
卒研発表yayugu
 
2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門Yuya Matsumura
 

Similaire à for関数を使った繰り返し処理によるヒストグラムの一括出力 (20)

Tokyo r33 beginner
Tokyo r33 beginnerTokyo r33 beginner
Tokyo r33 beginner
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
 
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
2017年3月版データマエショリスト入門(誤植修正版)
2017年3月版データマエショリスト入門(誤植修正版)2017年3月版データマエショリスト入門(誤植修正版)
2017年3月版データマエショリスト入門(誤植修正版)
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
pi-6. 繰り返し
pi-6. 繰り返しpi-6. 繰り返し
pi-6. 繰り返し
 
R language definition3.1_3.2
R language definition3.1_3.2R language definition3.1_3.2
R language definition3.1_3.2
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみよう
 
10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
卒研発表
卒研発表卒研発表
卒研発表
 
2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門
 

for関数を使った繰り返し処理によるヒストグラムの一括出力

Notes de l'éditeur

  1. よろしくお願いいたします。 for関数を使った繰り返し処理による ヒストグラムの一括出力についてご紹介させいていただきます。 すいません、題目にはヒストグラムと書いてしまったんですけど、 実際は、データの中の連続変数はヒストグラム、 離散変数は観測度数のbarplotを出力するような処理をします。 題目から訂正するようなことになってお恥ずかしいですが、 どうかご了承ください。 今回はデータフレームでデータを扱うことを前提としてお話をしていきます。 Forという、中にいれた処理をリストの中身に従って繰り返してくれる ループ関数をつかって、データにふくまれているすべての変数について 一括でグラフを出力してやろう!ということやりました 本日お集まりの皆さま、Rをインストールしたばかりでまだ 触ったことがないという方が多いということと、 企業や公的機関で仕事でRを使うという方が 多くいらっしゃっているということで、 この場にあったお話ではないのではと大変不安になっておりますが とりあえず一生懸命用意してきたのでお付き合いください。。。
  2. まず、簡単に自己紹介します。 広島大学大学院 医歯薬保健学研究科  保健学専攻 健康情報学研究室 D3伊藤歩と申します。 学部は管理栄養士の養成課程から、現在の大学院に進学し、 食べることと様々な要因と健康との関わりについて興味をもって研究しています。 R歴:4年前からすこしだけさわっていて、5月にhijiyamarに参加した前後ぐらいから本格的つかっています。 Twitter: は文鳥アイコンです。でも、全然使いこなせていません。 このような機会で人前で話すことがあまりないうえ、初対面の方ばかりで大変緊張しておりますが、どうぞよろしくお願いします☻ なぜ、わたしがこういうことをやったのかといいますと、日ごろ扱っているデータの変数が多く、 少しでも作業を簡略化して楽をしようと思ったからです。 データが手元にやってきたとき、とりあえずデータの全体像をつかもうと とりあえずで各変数の分布を書いてみたり単純集計をしますよね。 変数がの数が多いと同じ操作を何回も繰り返さないといけなくて単純作業に うんざりしてしまいますし、途中で小さなミスが見つかると絶望してしまいます。。 なのでRをつかってうまいことやろう!と思ったわけです。 でもRもそんなに使いこなせているわけでもないので、 途中で普通にいっこずつやった方が楽なんじゃないかと思いながらやっていました。 なので、もっとかんたんないい方法があったらぜひ教えてください。
  3. for関数を使った繰り返し処理による グラフの一括出力を達成するために 本日は2つのポイントと4つの手順をお話しさせていただこうと思います。 まず、私が今回の作業の前に抑えておいたほうがいいと思うポイントを2つ説明させていただきます。 一つ目はオブジェクトのクラスについてです。 これは、今回のような作業のときだけではなく、Rを使っていく上でかなり重要になっていくことだと思うんですけど、 あまり丁寧に説明するとわたしには説明しきれないお話になってしまいますので、 今回のケースにおいてはどういうことが大切かということだけお話しさせていただこうと思います。 もう一つのポイントは変数・要素の呼び出しについてです。 その後に、実際にfor関数でグラフを一括出力するための4つの手順についてご説明させていただきます。 では早速、1つの目のポイントについてお話しさせていただきます。
  4. for関数を使った繰り返し処理による グラフの一括出力を達成するために 本日は2つのポイントと4つの手順をお話しさせていただこうと思います。 まず、私が今回の作業の前に抑えておいたほうがいいと思うポイントを2つ説明させていただきます。 一つ目はオブジェクトのクラスについてです。 これは、今回のような作業のときだけではなく、Rを使っていく上でかなり重要になっていくことだと思うんですけど、 あまり丁寧に説明するとわたしには説明しきれないお話になってしまいますので、 今回のケースにおいてはどういうことが大切かということだけお話しさせていただこうと思います。 もう一つのポイントは変数・要素の呼び出しについてです。 その後に、実際にfor関数でグラフを一括出力するための4つの手順についてご説明させていただきます。 では早速、1つの目のポイントについてお話しさせていただきます。
  5. みなさん、普段扱われているデータはたくさんの、 いろんな種類の変数がまざって入ってできているデータですよね。 例えば、基本的な人口統計データとして年齢と性別をとってみても、 年齢は連続した量的なデータですし、性別は男性女性といった質的な変数です。 そこにさらに他にたくさんの研究や業務に必要なデータが入ってきます。 連続、離散。量的、質的。比率、間隔、順序、名義。 いろんな性質がありますよね。 たくさんの種類の異なる変数の性質を理解して、 適切にグラフ化したり集計したり、統計解析にかけたりしています。 では、Rの世界ではそういった変数の種類はどのように扱われるのか?
  6. Rの世界では変数はオブジェクトという単位で扱われています。 はじめの阪上先生の入門セッションでは オブジェクトは変数という言葉で紹介していらっしゃいました。 今回はオブジェクトと変数は同義だと思ってもらったらよいかと思います。 そして、そのオブジェクトの性質として、クラスというものが定義されています。 変数の分布をグラフ出力するために注意したい、4つのクラスについてご紹介します。 ひとつめはcharacter型という文字クラスです。Rの中では“”でくくられて存在しています。 2つめは数値クラスのnumeric型です。 3つめのinteger型は数値データのうち、整数のデータがこのように定義されます。 4つめのfactor型はちょっとややこしいクラスです。 みかけは、文字クラスや整数クラスのように表現されているのに、 その実態は1、2、3…とRの中には数値として存在しています。 例えば、1、2.、1、2という数値で入力されているデータに 1には男性とラベルをつける、2には女性とラベルをつけるというに扱われるものです。 このfactorには順序がついたorderedfactor型という種類もあります。 例えば、1、2、3をBMI評価のやせ、標準、肥満としたいときなど大小関係を与えたい場合に使われます。 通常はnumeric、integer型が連続した量的データ、 Characterとfactor型が非連続的な質的データとして扱われるものと思います。 ちなみに、この4つのクラス以外にTRUEorFALSEの論理クラスもありますが、 グラフ化する機会はあまりないかと思いますので説明を省きます。
  7. では、変数を分布をグラフ化する際、クラスがどのように関係するかといいますと、 クラスによって関数の出力様式が異なってくるというところです。 変数の分布を出力するためにはプリセットの関数では hist関数とplot関数を使いますが、 ヒストグラムを出力するhist関数はnumeric型とinteger型のクラスの変数しか出力することができません。 連続変数を階級で区切って表現するのがヒストグラムなので、 非連続的なcharacterやfactor型を出力することができないのは当然ですが、 そこを何とか工夫していい感じに出力してくれる。。。というこはありません。 Plot関数はnumeric型とinteger型の場合は散布図を出力し、 Factor型の場合はbarplotを出力してくれます。 残念なことに、クラスがcharacter型の場合はhist関数でもplot関数でも分布をグラフ出力することができません。 このように、クラスによって関数の出力様式が異なるということに注意しながら 分布をグラフ出力する方法を考えることが重要です。
  8. そうは言ってもデータセットの中には 4つの変数クラスが混在している可能性があります。 Character型の場合は、そのままのクラスだとグラフ出力することができないので、 一度factor型に変換する必要があります。 今回の目的は各変数がどのように分布しているのかということを確認したいので、 Numeric、integer型の変数はhist関数を使ってヒストグラムを出力することにして、 Factor型はplot関数を使ってカテゴリーごとの頻度をbarplotで表現することとします。 このように、今回は変数のクラスによって違った処理をしなければならないということに 注意してください。
  9. for関数を使った繰り返し処理による グラフの一括出力を達成するために 本日は2つのポイントと4つの手順をお話しさせていただこうと思います。 まず、私が今回の作業の前に抑えておいたほうがいいと思うポイントを2つ説明させていただきます。 一つ目はオブジェクトのクラスについてです。 これは、今回のような作業のときだけではなく、Rを使っていく上でかなり重要になっていくことだと思うんですけど、 あまり丁寧に説明するとわたしには説明しきれないお話になってしまいますので、 今回のケースにおいてはどういうことが大切かということだけお話しさせていただこうと思います。 もう一つのポイントは変数・要素の呼び出しについてです。 その後に、実際にfor関数でグラフを一括出力するための4つの手順についてご説明させていただきます。 では早速、1つの目のポイントについてお話しさせていただきます。
  10. もうひとつのポイントです。 Rの中でデータセットに含めれている変数を呼び出す方法は2通りあります。 ひとつはデータフレーム名$列名で呼び出す方法で、 もうひとつはデータフレーム名[,列番号]で呼び出す方法です。 Headでirisデータの1列目を出力していますが、 どちらもまったく同じように列を呼び出すことができています。 しかし、今回つかうfor関数で列を呼び出す場合は、 圧倒的に列番号で呼び出す方が使いやすいので、こちらの方法を使っていきます。
  11. 2つのポイントのまとめです。 1つめ、オブジェクトのクラスについてでは クラスによって関数の出力様式がことなること、 Character型は一度factor型に変換してplot関数でグラフ出力すること numeric・integer型はhist関数、 Factor型はplot関数はplot関数を使うことがポイントです。 2つめは、for関数使うときは列番号や要素番号を使って呼びだすことがポイントです。
  12. 4つの手順に入る前に今日つかうデータセットについて説明します。 本日使うデータセットはirisデータに3つの変数を追加したものです。 Irisデータはもともとnumeric型の変数4つとfacter型の変数1つでできていますので、 これに含まれていないクラスのデータを追加しました。 V1は1~4の数値を順序つきのfacter型で入れたものです。 V2、v3はABC、地区1~5と適当に入れた、character型の変数です。
  13. 実際の中身を出力するとこんな感じです。 計8つのデータ変数が入っています。 変数を追加したデータフレームにはdatという名前を付けました。
  14. では、グラフ一括出力のための4つの手順に入りますが、 先にお断りしておきます。 今回の手順の中にはinteger型については触れていません。 Numeric型と同様に処理ができ、integerが混在していても手続きが変わらないので説明を省きました。 では、そういうことで、簡単に4つの手順について説明します。 まず、ひとつめの手順では さまざまなクラスの変数が混在するデータセットの中から、 Character型の変数をみつけてfactor型に変換します。 これは先ほど説明した通り、character型のままだとグラフの出力ができないためです。 次に、データセットの中身がfactor型とnumeric型の2つに限られたところで、 データセットをfacter型だけのデータセットとnumeric型だけのデータセットの2つに分割します。 これは、それぞれのクラスの変数で使用する関数が異なるためです。 そして、分割したデータセットは、それぞれfactor型はplot関数を Numeric型はhist関数で出力するよう、別々のプログラムを書きます。 このとき、自分の好みの出力オプションを決めることができます。 グラフを出力するプログラムを用意できたら、 いよいよfor関数で一括出力です。 For関数の中にグラフを出力するプログラムを組み込めば完了で、 変数の数が何個あろうとも気持ちよくグラフを一気に出力することができます!!
  15. では、手順1です。 データセットの中からcharacter型をみつけてfactor型に変換します。
  16. まず、datの中のどの変数がchaacter型なのかを探します。 探してくれるプログラムはsapply(dat, class)です。 Class()という関数は、オブジェクトのclassが何のかを教えてくれる関数です。 Sapplyという関数は、第2引数に入れた関数を、第1引数に指定したデータセットの列ごとに適用してくれる関数です。 二つを組み合わせることで、 Datのなかの全ての列のclassを教えて!という処理をしています。 かえってきた出力を見ると、 7番目と8番目の変数がcharacter型だということがわかります。
  17. 7番目と8番目の変数がcharacterだとわかったので、 2つの変数をfacter型に変換します。 変換してくれる関数はas.Facterという関数です。 その名の通り、関数に入れたものをfacter型とみなしてね!という関数です。 dat[,7] <- as.factor(dat[,7])という処理は、 Dat7をこれからはdat7のfacter型とみなしてね!とうい命令です! 8列目にも同様の処理をして、 変換できたか聞いてみると、無事facter型に変わっていることが確認できます。
  18. データの中身をfacter型とnumereic型にそろえることができたので、 次はそれぞれの型の変数を集めたデータに分割します。
  19. 今度はデータの中に入っているfacter型の変数がデータの何列目に入っているかを探します。 探してくれる関数はgrepです。Grepは検索対象の中から検索したい文字列がどこに入っているかを教えてくれます。 調べたいのは、datの各列のclassです。その中身のどの列のclassに“factor”という文字が入っているかを探してくれます。 探した結果見つかった、factor型の列番号はcolfという名前を付けたオブジェクトにいれてやります。 Colfの中にはdatに含まれているfactor型の列番号が入っているということなので、 Colfの中身はなんだい?と聞いてやると、5678番目だよ!と返ってきます。
  20. Factor型の列番号がわかったので、 Datから、Factor型を含む列を引いたもの残りをnumeric型だけの列を含むデータとしてdatnと名前を付けます。 反対に、datからFactor型を含む列だけをえらんだものをfactor型だけの列を含むデータとしてdatfと名前を付けます! これでデータセットをそれぞれ1つの型だけをもつものに分割することができました。
  21. 手順3です。分割したデータをそれぞれ、目的の形式でグラフ出力するプログラムを書きます。
  22. Facter型のデータはplot関数を使って度数を示すbarplot形式で出力します。 シンプルに描くとplot(変数)だけで出力することができます。 ここで、2つ目のポイントだった、列の呼び出しは列番号で、ということを思い出してください。 Plotのなかの変数は列番号で指定すること想定しておきます。 その他は私好みで付けたオプションです。 欠かせないのはグラフタイトルです。このタイトル名の指定も、 列番号で指定できるように設定しておくことが重要です。 今回はその他はタイトルの文字フォントを大きくすること、 バーの色やバーの間隔などを指定してみましたが、 この辺は必ずしも指定する必要はなくて好みです。
  23. numeric型のデータはhist関数を使ってヒストグラムを出力します。 先ほどのplot関数になかったオプションは、 ヒストグラムの階級の分割数の指定です。 数値してすればその数に分割することができますし、 デフォルトではスタージェス式を使って適切な数に分割してくれます。 “scott”とい文字列を入れればまた違ったアルゴリズムで適切に分割しれくれます。 これで、ようやく一括出力の準備が整いました。
  24. それではfor関数の中に先ほど作ったプログラムを入れていきます!
  25. for関数の使い方です。 for ( ループ変数 in リスト ){ 繰り返したい処理} というように書きます。 こちらに示している処理では、 ループ変数にiを置きました。 リストは1:ncol(datf))です。 Ncolというのはデータフレームの列数を教えてくれる関数ですので、datfの列数、すなわち4になります。 つまりリストは1:4、1~4までの数値です。 このリストの中の数値がループ変数iに次々に代入されていき、{}の中の処理が繰り返されます。 リストの最後の要素の処理が終わるとループから抜けます。 列の呼び出しを列番号で行ったのはこのためです。 列番号で指定することで、1列目、2列目、3列目・・・と列番号をループ変数として代入しながら グラフの出力処理を繰り返すことができます。
  26. Forを使った繰り返し処理でfoctor型のbarplotを一括出力した結果がこちらです。
  27. numeric型のヒストグラムを一括出力した結果がこちらです。 実演でなくこのようにお示しすると大変味気ないですが実際にやってみて グラフが一気に出力されるとっても気持ちいいです!!!
  28. 手順1のas.factorによる characer型のfactor型への変換も forで繰り返せば楽々です。 今回は2つの列しか変換しなかったんですが、変数が大量にある時は すごく楽になると思います。
  29. For関数による繰り返し処理でプログラムを書いたことで、 ひとつずつ出力したら61行になっていたプログラムが25行になりました。 短けりゃいいってもんじゃないとは思いますが、 なんとなく見た目がすっきりして気持ちいいような気がします。 今回は余計なグラフ出力オプションを指定していたので、ちょっとサバを読んだかたちにはなりますが、 変数の数50こや100こというデータの場合にはおススメです。 For関数での繰り返し処理じゃなくてforeachパッケージで並列化処理の方がいいみたいですけど わたしはまだつかいこなせません。。。 みなさんもためしてみたくださいね!!!