初心者セッション2
- Data Handling -
Tokyo.R #101
@kotatyamtema
1
自己紹介
TwitterID : @kotatyamtema
大学での専門: 行動生態学
立案 捕獲 実験 分析までワンオペ
今まで : 客先ぼっち分析屋→アパレル通販会社
現在 : 医療検査会社
R歴 : 10年過ぎたかも?永遠の初心者
近況 : 仕事のモチベーションが迷子中
求む:やる気スイッチ
目的
Rの基本的なデータの扱いが分かる
tidyvers packageを使って
イマドキの前処理ができるようになる
1. Rでのデータの扱いの基本
 - プログラミング基礎用語
 - データ型とデータ構造
2. データ分析の手順
3. tidydataとは
4. tidyverseを使ったモダンなデータハンドリング
 - データ概要の確認
 - パイプ処理
 - dplyr / tidyrの使い方
MENU
プログラム基礎用語
用語 意味
オブジェクト 値や文字、関数など、Rで扱うものの総称
変数 値や文字、関数など名前を付けたオブジェクト
代入 変数に値や文字、関数などを紐づけること(<-)
関数 何らかの処理を条件に合わせて実行するように定義したもの
引数 関数の部分条件を指定するパラメータ
データ型とデータ構造
型名 性質 変換/確認
数値型
四則演算などの数式による処理ができ
大小関係がある
as.numeric
is.numeric
文字型
ダブルクォーテーションで囲んで表現。
正規表現による処理が可能
as.character
is.character
因子型
Labels(文字)の裏にlevels(数値)が
定義されている
as.factor
is.factor
データ型とは
データの持つ性質
- Rは大きく3つの型で認識
データ型とデータ構造
型名 性質 変換/確認
vector型 同じ種類のデータ型を1次元で集めたもの
as.vector
is.vector
matrix型 同じ種類のデータ型を2次元で集めたもの
as.matrix
is.matrix
dataframe型
異なるデータ型を2次元に集めたもの、
Rの主戦場
の
as.data.frame
is.data.frame
list型
異なるデータ構造のオブジェクトを集めたもの(json)
分析結果の出力がこの構造であることが多い
as.list
is.list
データ構造とは
データの集まりの持つ性質

- Rは大きく4つの構造がある
• 保持できるデータの種類が異なる

• データ構造ごとにできる処理が異なる

• データ構造ごとに処理スピードが異なる
データ分析の手順
データ分析で具体的に必要な作業
・データ概要の確認
・tidydata 非tidydataの変換
・データの追加や集計などのデータ加工
データハンドリング
Hadley Wickham & Garrett Grolemund, the website for R for Data Science https://r4ds.had.co.nz/wrangle-intro.html
tidydataとは
tidydata(整然データ)とは、次の4つの条件を満たした
表型データ
1. 個々の変数が1つの列をなす
2. 個々の観測が1つの行をなす
3. 個々の観測の構成単位の類型が1つの表をなす
4. 個々の値が1つのセルをなす
tidydataとは
人が見やすい形式とプログラムが見やすい形式は異なる
→スムーズに変換できることが大事
非tidy:人が見やすい tidy:プログラムが扱いやすい
データ概要の確認
skimr::skim(penguins)
データ概要の確認
skimr::skim(penguins)
概要を確認しながら欠損の処理方法や
どんなデータ形式にまとめ直すかなど
分析に必要な作業の流れを考える
tidyverseを使ったモダンなデータハンドリング
パイプ(%>%)を使ったデータハンドリング
パイプ処理 従来の処理
X %>% f() f()
X %>% f(y) f(X, y)
X %>% f() %>% g() f(g(X))
X %>% f(y, .) f(y,. X)
tidyverseを使ったモダンなデータハンドリング
パイプ(%>%)を使うと複数の処理を可読性を担保したまま
まとめて書くことが可能
0. penguins %>%
1. filter(species == Adelie ) %>%
2. group_by(island, sex) %>%
3. summarise(n = n(),
4. mean_mass = mean(body_mass_g, na.rm = TRUE)
0. データpenguinsから
1. Adelieペンギンだけ抽出し
2. islandとsexの組み合わせで
3. 頭数を数えることと
4. 体重の平均を求めることを
実行する
dplyrの基本関数
関数 動作
select 列の選択
filter 条件による行の抽出
mutate 列の追加
group_by 条件による行のグループ化
summarise 行の集約
join dataframe同士の結合
arrange 行の並べ替え
データの結合
関数 動作
left_join(x, y, by = z ) xを基準に結合
right_join(x, y, by = z ) yを基準に結合
inner_join(x, y, by = z ) x,y両方に存在する行のみ結合
full_join(x, y, by = z ) x,y両方の行を結合
anti_join(x, y, by = z ) yと紐づかないxを返す
*複数列をkeyにjoinする場合
by = c( z , zz )
*keyにする列名が異なる場合
by = c( z = zz )
tidyrの基本関数
関数 動作
pivot_longer
dataframeを縦長に変形する
• cols : 動かしたい列
• names_to : もともと列名だったものを入れる列名
• values_to : 動かした値を入れる列名
pivot_wider
dataframeを横広に変形する
• id_cols : 指定した列のユニークな組み合わせがそれぞれ1行になる
• names_from : 新しく列名になる列
• values_from : 動かしたい列
unit 列同士を結合する
separate 列を分ける
drop_na NAがある行を削除する
replace_na NAを指定した値に置換する
fill NAを、NAの上下どちらかの値に置換する
across関数と条件処理
関数 動作
starts_with 指定した文字列から始まる列だけ選択
ends_with 指定した文字列で終わる列だけ選択
contains 指定した文字列が含まれる列だけ選択
matches 指定した正規表現と一致する列だけ選択
one_of 指定した文字ベクトルと一致する列だけ選択
num_range 指定した番号の列だけ選択
where 型判別で指定した方の列だけ選択
across関数:複数列を指定して任意の処理を実施する関数
 - dplyr / tidyrの関数に統一して適用できる
X %>% mutate(across( .cols, .fns )))
.cols : 列名の指定
.fns : 適用する処理
Example
0. summary_penguinsに データpenguinsから
1. sexが欠測の行を削除し
2. speciesとislandとsexの組み合わせで
3. 数値カラムだけを抽出し、
4. 平均と標準偏差を求める
0. summary_penguins <- penguins %>%
1. filter(!is.na(sex)) %>%
2. group_by(species, island, sex) %>%
3. summarise(across(where(is.numeric),
4. mean(., na.rm = TRUE), sd(., na.rm = TRUE)))
パイプ(%>%)を使った
モダンなデータハンドリングで
幸せなデータ分析を
文字列処理など他にも使えるデータハンドリングの
手法はいろいろあります。
やりたいことのイメージを作って、上手に試行錯誤
しながら快適なR生活を過ごしてください。
Rの使い方に困ったら…
1. help()を使う
2. CRANの公式pdfを読む
3. r-wakalangに質問する
4. google先生のお世話になる
最後に
ENJOY!

TokyoR101_BeginnersSession2.pdf