tokyor58 初心者セッション

32
TokyoR #58 脱脱脱脱 ! 脱脱脱脱脱 @kotatyamtema

Upload: kotora0507

Post on 07-Feb-2017

42 views

Category:

Software


2 download

TRANSCRIPT

Page 1: TokyoR58 初心者セッション

TokyoR #58脱初心者 !セッション

@kotatyamtema

Page 2: TokyoR58 初心者セッション

@kotatyamtema大学での専門は行動生態学性的二型と sexual selection対象は魚類:♂の背びれの伸長に 影響を与える要因を探索職歴家電メーカーでユーザビリティ評価心拍や脳波,脳血流を使った身体反応評価筋電図を使った身体負荷評価,歩容(歩く姿勢)評価医療機器メーカーで臨床試験のデータ管理と初期分析投薬データのダミー化と集計,欠損確認,基礎統計量の算出活動量計データの自動集約,レポート生成スクリプトの作成現在DATUM STUDIO 株式会社データアナリストとして生息中

自己紹介

Page 3: TokyoR58 初心者セッション

Hadley 神がデータ分析の前処理について言及

Page 4: TokyoR58 初心者セッション

tidyversetidydata

Page 5: TokyoR58 初心者セッション

tidyversetidydataなんのこと?

Page 6: TokyoR58 初心者セッション

tidy とは「整然と」「整った」という意味

Page 7: TokyoR58 初心者セッション

tidy とは「整然と」「整った」という意味tidydata とは?tidyverse とは?

Page 8: TokyoR58 初心者セッション

tidydata とは操作、解析、可視化を柔軟に扱えるように整えられたデータ

Page 9: TokyoR58 初心者セッション

tidyverse とはtidydata を作るために整えられた tool 類

Page 10: TokyoR58 初心者セッション

tidyverse を使ってtidydata を作ろう !

Page 11: TokyoR58 初心者セッション

本日のお題分析用データ前処理入門

tidyverse(dplyr/tidyr)の扱いを中心に

Page 12: TokyoR58 初心者セッション

目次(予定)

• 1.ディレクトリの指定• 2.R内のデータセットの呼び出し• 3.外部データの読み込み•※初心者つまづき point• 4.データの確認• 概要• データ型• 欠損• 5.データの整理• 列の追加• 列の選択• 条件抽出• 6.データの集計

Page 13: TokyoR58 初心者セッション

1.ディレクトリの指定•何はともあれ作業ディレクトリを作りましょう!

•作業ディレクトリとは:• 分析結果や分析用データを置いておくフォルダ• ⇒Rの作業ディレクトリを任意のフォルダに変更する• Rが認識しているディレクトリを確認• getwd()• [1] “C:”

•任意のディレクトリを Rに認識させる• setwd(“C:\work\TokyoR”)• getwd()• [1] “C:\work\TokyoR”

C:\work\TokyoR

C:

Page 14: TokyoR58 初心者セッション

1.ディレクトリの指定•ディレクトリの設計について

• setwd ”で指定した後のファイルパスは ./hoge”でできる• ⇒流用・書き直しが少なくなる• ⇒凡ミスが減る

• ※注意点•使いやすいフォルダ構成で統一•なるべく Cドライブ orDドライブ直下•フォルダ名はアルファベット +数字のみ

Page 15: TokyoR58 初心者セッション

1.ディレクトリの指定•ディレクトリの設計について

• ※参考例•基本構成は以下の 3つ• setwd(“C:\work\TokyoR”)で指定した後は• read.csv(“./00_script/hoge.csv”)のような指定方法

• ※案件や条件によって自分の最適を見つけましょう

C:\work\TokyoR

00_script 01_data

02_results

Page 16: TokyoR58 初心者セッション

2.R内のデータセットの呼び出しパッケージ付属のサンプルデータを呼び出す使いたいデータが入っているパッケージを呼び出してから data(hoge)

”またデフォルトで入っている dataset”パッケージにもサンプルデータ# Example# デフォルトで入っているサンプルデータdata(iris)# ggplot2 ”パッケージに付属のデータ diamonds”を呼び出すlibrary(ggplot2)data(diamonds)それぞれ呼び出しに使った名前のオブジェクトで保存される

Page 17: TokyoR58 初心者セッション

3.外部データの読み込み高速読み込み関数は 2つ1.data.table::fread2.readr::read_csvExample• dat <- fread("./01_data/dat.csv",• header = TRUE, stringsAsFactors = FALSE, integer64 = "double", data.table = FALSE)header: 1行目をカラム名として扱うか• TRUE だと扱う FALSEだと扱わない• stringsAsFactors:文字と数値が混ざった場合に因子にするかどうか• TRUE だと因子にする FALSEだと文字にする• integer64:• data.table:読み込み後 data.tableとして扱うか• TRUEだと data.table にする FALSEだと data.frameにする

Page 18: TokyoR58 初心者セッション

3.外部データの読み込み高速読み込み関数は 2つ1.data.table::fread2.readr::read_csvExample• dat <- read_csv(“./01_data/dat.csv”, • col_names = TRUE)• col_names: 1行目をカラム名として扱うか• TRUE だと扱う FALSEだと扱わない

• ※使い分け•データが重くなると freadの方が圧倒的に早い•個人的には freadおすすめ(根拠はない)

Page 19: TokyoR58 初心者セッション

※初心者つまづき point1.カラム名について普通に選択できない名前がある

数値が先頭“¥?()[]”のような特殊な記号が入っている

`:バッククォートで囲むと $でも選択できるone_of()の中に入れればそのままでも選択できるが、分析結果でも ``が付いたままになってしまうなど通常とは違う扱いになるため、めんどくさい

結論上記のようなカラム名は使わない。読み込んだ場合は即座にカラム名を変更する。

Page 20: TokyoR58 初心者セッション

4.データの確認:概要• # データを呼び出す• data(iris)• # 何行あるか確かめる• nrow(iris)• 150• # 何列あるか確かめる• ncol(iris)• 5

Page 21: TokyoR58 初心者セッション

4.データの確認:概要• # 先頭から n行見る• head(iris, 2)• Sepal.Length Sepal.Width Petal.Length Petal.Width Species15.1 3.5 1.4 0.2 setosa• 24.9 3.0 1.4 0.2 setosa• # 基礎集計• summary(iris)• Sepal.Length Sepal.Width Petal.Length Petal.Width Species Min. :4.30 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50 • 1st Qu.:5.10 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50 Median :5.80 Median :3.000 Median :4.350 Median :1.300 virginica :50 Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 • 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500

Page 22: TokyoR58 初心者セッション

4.データの確認:データ型• # データ型の確認• # data.frameかどうか• is.data.frame(iris)• [1] TRUE• # data.tableかどうか• is.data.table(iris)• [1] FALSE• # 各カラムごとの型• mode(iris$Sepal.Length)• [1] "numeric"

Page 23: TokyoR58 初心者セッション

4.データの確認:データ型• # データ型の変更• # data.tableにする• table_iris <- as.data.frame(iris)• # 確認• is.data.table(table_iris)• [1] TRUE• # 各カラムごとの型• # 文字型にする• table_iris$Sepal.Length <- as.character(table_iris$Sepal.Length)• # 確認• is. character(table_iris$Sepal.Length)• [1] TRUE

Page 24: TokyoR58 初心者セッション

4.データの確認:欠損• # 欠損の確認• is.na(data)• # 欠損の無い data.frameにする• comp_data <- data[complete.cases(data),]• # 重複のない data.frameにする• comp_data <- distinct(data)• # 欠損すべてに 0を代入する• data[is.na(data)] <- 0• # 欠損は奥深いので状況に合わせて扱いましょう

Page 25: TokyoR58 初心者セッション

pipe演算子の使い方• pipe演算子とは• %>%のこと• dplyr, tidyr, stringi......tidyverseに含まれるパッケージでは• 共通の書き方

•処理後のデータを後ろにパスしていく役割• # example• 1:data %>% # dataという data.frameを準備して 2に渡す• 2:mutate(n = a*b)%>% # 渡された dataにカラムを追加して 3に渡す• 3:filter(n > 5) # 渡された dataのうち条件に合うものを残す•ご利益• 1.いちいち元のデータを書かなくてよい• 2.処理の順序と内容が一目瞭然•ぜひ使いましょう!

Page 26: TokyoR58 初心者セッション

5.データの整理:列の追加、削除、選択• # id列と No列を追加• iris1 <- iris%>%• mutate(id = paste0(“id”, 1:nrow(iris)),• No = 1:nrow(iris))• # No列を削除• iris2 <- iris1%>%• select(-No)• # 末尾が Lengthのカラムと種名、 id列を選択• iris3 <- iris2%>% • select(id, Species, ends_with("Length"))

Page 27: TokyoR58 初心者セッション

5.データの整理:便利機能• # 特定のカラム名のカラムだけを対象に集計する• summarise_at, mutate_at• # 特定の条件のカラムだけを対象に集計する• summarise_if, mutate_if• # カラム名の指定の方法• # 完全一致するカラムを指定• one_of(“hoge”)• # 指定した文字列を含むカラムを指定• contains(“hoge”)• # 指定した文字列で始まるカラムを指定• starts_with(“ho”)• # 指定した文字列で終わるカラムを指定• ends_with(“ge”)

Page 28: TokyoR58 初心者セッション

5.データの整理:条件抽出• # idが 3より大きいデータを抽出• iris4 <- iris3%>% • filter(id > 3)• # end 条件は &、 or 条件は | で指定• # Sepal.Lengthと Petal.Lengthの両方が平均以上のデータを抽出• iris5 <- iris4%>% • filter(Sepal.Length >= mean(Sepal.Length) & • Petal.Length >= mean(Petal.Length))• # Sepal.Lengthと Petal.Lengthのどちらかが平均以上のデータを抽出• iris6 <- iris4%>% • filter(Sepal.Length >= mean(Sepal.Length) | • Petal.Length >= mean(Petal.Length))

Page 29: TokyoR58 初心者セッション

6.データの集計• # 種類ごとに長さの平均と分散を求める• summary_iris <- iris%>%• group_by(Species)%>% summarise_at(vars(ends_with("Length")), funs(mean, sd))

• summary_iris• # A tibble: 3 x 5 • Species Sepal.Length_mean Petal.Length_mean Sepal.Length_sd Petal.Length_sd • <fctr> <dbl> <dbl> <dbl> <dbl> • setosa 5.006 1.462 0.3524897 0.1736640 • versicolor 5.936 4.260 0.5161711 0.4699110 • virginica 6.588 5.552 0.6358796 0.5518947

Page 30: TokyoR58 初心者セッション

消化不良なので続きあり!?

Page 31: TokyoR58 初心者セッション

Enjoy!

Page 32: TokyoR58 初心者セッション

7. ピポット整形