R/RStudioベーシック講座【データ処理・グラフ作成】

R/RStudioベーシック講座【データ処理・グラフ作成】 R/RStudioベーシック講座【データ処理・グラフ作成】
R/RStudioベーシック講座【データ処理・グラフ作成】

履修中の、
「プロフェッショナル認定証
Google データアナリティクス」にて、
R言語を理解しないといけないため、
Udemyでコースを受講しました、

総時間8.5時間ということでしたが、
実際にはその倍ぐらいかかった感じがしました。

■セクション1
 セクション1は基本的な内容なので、
 スルーしました。

■セクション2

▼RStudioの画面
 Source
Console
Environment
Plots,Help

▼データの用意
 ・既存のデータを読み込む
  readrパッケージで
  read_csv(“ファイル名”)を読み込む

  readxlパッケージで
  read_excel(“ファイル名”)読み込む

 ・直接入力や乱数
  値を(変数)を直接入力
  c(値1,値2,値3)

※c:combine values

・乱数(正規分布)
  rnorm(サンプルサイズ,平均,標準偏差)

▼データを概観
 データの概要を2つの視点から確認
 
 ・変数とデータフレーム

  例:身長と体重
  ※変数が集まったものがデータフレーム

 ・代表値
  #代表値を返す関数

  mean(変数) #平均値
  median(変数) #中央値

 ・散布度(変数のばらつき)

  var(変数) # 分散(variance)
sd(変数) #標準偏差(standard deviation)

▼データのグラフ化
 データの「分布」をggplot2パッケージでグラフ化

 ・基本パッケージ
  plot()
棒グラフ/散布図
hist()
   ヒストグラム
boxplot()
   箱ひげ図

 ・ggplot2パッケージ
  ggplot(データ,マッピング) #データの下準備
     +
  geom_bar(調整値) #棒グラフ
  geom_histogram(調整値) #ヒストグラム
  geom_boxplot(調整値) #箱ひげ図
  geom_point(調整値) #散布図

▼データの整然化
 データを扱いやすい構造にする

 ・「雑然」としたデータ #messy data

 ・「整然」としたデータ #tidy date

   ・個々の観測が1つの行をなす
   ・個々の変数が1つの列をなす
   ・個々の観測パターンが1つの表をなす

※ハドリー・ウィッカムが提唱
 

▼データの集計・解析・レポート化
 Rmarkdownという機能によるレポート化
 
 ・グループ別の集計
 ・統計的な分析

■セクション3

▼tidyverseパッケージ
  ・readrパッケージ
  ・readxlパッケージ
  ・dplyrパッケージ
  ・tidyrパッケージ
  ・ggplot2パッケージ
  ・stringrパッケージ
  ・lubridateパッケージ

▼作業するディレクトリを指定する

 setwd(“C:/R/test”)←設定
 getwd()←確認

 ※wd:working directory

▼データの前提
 コンピュータが読み込みやすいデータとなっているか
 ・1行目1列目スタート
 ・1行目は列名(変数名)
 ・余計なデータはNG

▼CSVファイルの読み込み
 readrパッケージを呼び出し、read_csv関数で読み込む

 ※read.csv(file = “ファイル名.csv”)でもいけるが、
  普通にしか呼び出してくれない

 そこでreadrパッケージを使う。
 library(readr)

 read_csv(file = “ファイル名.csv”)

▼[RStudio]csvファイルの読み込み

▼エンコーディングの指定
UTF-8 / Shift_JIS

guess_encoding(file = “ファイル名.拡張子”)

 エンコーディングを指定してreadrパッケージで読み込む

 read_csv(file = “testdata.csv”,
locale = locale(encoding = “UTF-8”))

▼[RStudio]エンコーディングの指定

 ちなみにデフォルトではUTF-8で読み込まれます.

 read_csv(file = “testdata.csv”)

▼読み込みデータの格納

 Rでは”<-“という代入記号でデータをオブジェクトに格納する。

 HAKO <- read_csv(file = “testdata.csv”,
locale = locale(encoding = “UTF-8”))

 HAKOと記入すると中身がわかる。

▼Excelファイルの読み込み
 readxlパッケージのread_excelパッケージ関数で読み込める
 reaxlパッケージはtidyverseとは別に呼び出す必要がある

▼[RStudio]Excelファイルの読み込み

 HAKO_FROM_EXCEL <- read_excel(
path = “testdata.xlsx”,sheet = 1)

▼サンプリングデータの生成

 sample(x = c(“Yes”, “No”), # サンプリングされる値.
size = 10, # サンプルサイズ.
replace = TRUE ) # 重複あり/なし.

 ※TRUE 重複:OK
※FALSE 重複:NG

▼[RStudio]サンプリングデータの生成

sample(
x = c(“Yes”, “No”),
size = 10,
replace = TRUE,
prob = c(0.2, 0.8) # 比率の指定もできる
)

▼正規分布データの生成

 rnorm関数でサンプルサイズ(n)とパラメータ(mean,sd)を指定して生成

 rnorm(
n = 10, # サンプルサイズ.
mean = 0, # 平均.
sd = 1 # 標準偏差.
)

▼[RStudio]正規分布データの生成

 例:男性の身長データ(格納).

 shincho_data <- rnorm(
n = 1000, # サンプルサイズ.
mean = 167, # 平均.
sd = 5 # 標準偏差.
)

 最初の10人分だけ表示

 head(shincho_data, n = 10)

▼CSVファイルの書き出し

 write_csv(x = データフレーム,file = “ファイル名.csv”)

 write_csv(
x = SHINCHO,
file = “SHINCHO.csv”)

▼[RStudio]CSVファイルの書き出し

 データフレームのカタチでしか保存できないので、
 tibble関数を使う。

 SHINCHO <- tibble(shincho_data)

■セクション4:データの外観

▼サンプルデータの紹介
 
 ISLRパッケージのクレジットカード顧客の債務不履行データ

 install.packages(“ISLR”)
 library(ISLR)

 Defaultデータをデータフレーム(tibbel)形式で格納.
 DEFAULT <- as_tibble(Default)

▼[RStudio]サンプルデータの紹介

▼データフレーム
 Excelで見慣れた「表」

 行:サンプル 
 列:変数・属性

▼変数

 列名を確認する:データフレームの列名を確認する
         colnames(データフレーム)
         str(データフレーム)

 列名を変更する:colnames(データフレーム) <- 列名ベクトル

 dplyrパッケージ:rename(データフレーム,新名前 = 旧名前)

▼[RStudio]変数

データフレームの列名を変更します

colnames(DEFAULT) <- c(“d”, “s”, “b”, “i”)

dplyrパッケージのrename関数で列名を変更.

DEFAULT <- rename(
DEFAULT, # 対象データ.
default = d, # [新列名 = 現列名].
student = s,
balance = b,
income = i
)

▼変数の型

 num <- c(1, 2, 3, 4, 5) # numeric型.
 chr <- c(“A”, “B”, “C”) # character型.
 fct <- as.factor(chr) # factor型.

 変数型の確認(判定).
 
 is.numeric(num)
 is.character(chr)
 is.factor(fct)
 is.numeric(fct)

▼[RStudio]変数の型

▼変数型の変換

 HAKO <- read_csv(ファイル名.csv,col_types = “idcfID”)

idcfID←各データ型の頭文字
 i:integer
d:duble
c:caracter
f:factor
I:logical
D:date

# [番号]列をinteger型に変換.
HAKO$番号 <- as.integer(HAKO$番号)

# [列A]列をinteger型に変換.
HAKO$列A <- as.double(HAKO$列A)

▼[RStudio]変数型の変換

# 変数型を指定して読み込みます.
HAKO <- read_csv(
file = “testdata.csv”,
locale = locale(encoding = “UTF-8”),
col_types = “cccf” # col_types:変数型の指定.

▼基本演算子
 
値を返す演算.
べき乗.
2^1
2^2
2^3

等差数列(±1).
1:2
1:10
11:20
-10:10
10:-10

掛け算,割り算.
10 * 2
10 * -10
10 / 2
10 / -10

足し算,引き算.
1 + 2
1 – 2

計算の優先順位.
6+5*4:3^2(後ろから前へ。)

論理値(TRUE/FALSE)を返す演算.
大小比較.
1 < 1
1 <= 1

等しい,等しくない.
1 == 1
1 != 1
“A” == “B”
“A” != “B”

かつ,または.
0 < 1 & 1 < 2
0 < 1 | 1 < 1

論理値はTRUE:1,FALSE:0.
TRUE + TRUE
TRUE + FALSE
TRUE – TRUE
TRUE – FALSE

▼[RStudio]基本演算子

▼行数・列数

 データフレームの行数・列数を確認する

 DEFAULT # データフレームを実行.
 dim(DEFAULT) # dim関数で行数,列数を返す.※dim:dimension(次元)
 length(DEFAULT$default) # length関数で行数を返す.

▼[RStudio]行数・列数

▼変数の代表値

 mean(データフレーム$列名) # 平均.
 median(データフレーム$列名) # 中央値.
 min(データフレーム$列名) # 最小値.
 max(データフレーム$列名) # 最大値.
 sum(データフレーム$列名) # 合計.
 ※table(データフレーム$列名) #集計

各変数の要約.
summary(データフレーム) #各変数の要約

▼[RStudio]変数の代表値
 mean(DEFAULT$income) # 平均.
  median(DEFAULT$income) # 中央値.
min(DEFAULT$income) # 最小値.
max(DEFAULT$income) # 最大値.
sum(DEFAULT$income) # 合計.

変数の集計.
table(DEFAULT$default)
table(DEFAULT$student)

各変数の要約.
summary(DEFAULT)※一括で表示されるのでかなり便利

▼変数の散布図

 var(データフレーム$列名) # 不偏分散.
 sd(データフレーム$列名) # 標準偏差.(2乗-1するとvar関数と同じになる)

▼[RStudio]変数の散布図

 変数の散布度を確認する.
 var(DEFAULT$income) # 分散.
 sd(DEFAULT$income) # 標準偏差.

▼変数の演算

 変数と変数の演算は各々の変数の値の数(サンプルサイズ)に注意
 
 1.変数と1つの値の計算
  変数のすべての値に1つの値が演算される

 2.変数と変数の演算(値の数が等しい場合)
  順番通りに演算される

 3.変数と変数の演算(値の数が異なる場合)
  順番通りに演算され、値の少ない変数は繰り返されて演算される

▼[RStudio]変数の演算

 # 適当な変数を用意します.
  a <- c(1, 2, 3, 4, 5)
  a

 # 変数と1つの値の演算.
  a + 2
  a * 10

 # 変数と変数の演算(値の数が等しい場合).
  a <- c(1, 2, 3, 4, 5)
  b <- c(1, 3, 5, 7, 9)
  a
  b
  a + b
  # 順番が対応する値同士が演算されます.

  # 変数と変数の演算(値の数が異なる場合).
  a <- c(1, 2, 3, 4, 5)
  b <- c(1, 2)
  a
  b
  a + b
  # 前から順番に演算されます.
  # 値の数が少ない変数は繰り返されます.
  # Console画面には[Warning message(警告)]が表示されます.

■セクション5.データのグラフ化

▼グラフの論点
 グラフの論点は「変数タイプ」「軸」「グループ」の3つ

 変数タイプ
  連続変数:基本給・残業時間など
  カテゴリ/離散変数:年代・性別・評価など

 グラフ:Y軸とX軸

 グループ:グループ別に可視化する

▼サンプルデータの紹介
 library(ISLR)
 DEFAULT <- as_tibble(Default)

▼グラフ化の整理

 棒グラフ
X:default Y:カウント数

ヒストグラム
X:balance Y:カウント数

散布図
 X:income Y:balance
X:student Y:default

箱ひげ図
X:default Y:balance

▼ggplot2パッケージ

 ggplot(data = データフレーム,
mapping = aes(x = x軸変数,Y軸変数))+
geom_bar()

※aes:aesthetic(美的感覚、視覚的特性)

▼棒グラフ
X:default Y:カウント数
 
 ggplot(data = DEFAULT,
mapping = aes(x = default))+ #グラフの下地用意
geom_bar(width = 0.5, fill = “steelblue”) #幅と塗色

▼[RStudio]棒グラフ

・離散(カテゴリ)変数のカウント数を棒グラフで可視化.

ggplot(data = DEFAULT,
mapping = aes(x = default)) +
geom_bar() +
theme_grey(base_size = 25)

・連続変数のカウント数をヒストグラムで可視化.

ggplot(data = DEFAULT,
mapping = aes(x = balance)) +
geom_histogram() +
theme_grey(base_size = 25)

▼ヒストグラム
  X:balance Y:カウント数

 ggplot(data = DEFAULT,
mapping = aes(x = balance))+
geom_histogram(bins= 50, #棒の数
fill = “steelblue”,color = “black”) #塗色と枠線色

▼[RStudio]ヒストグラム

ggplot(data = DEFAULT,
mapping = aes(x = balance)) +
geom_histogram(
bins = 50, # bins :棒の数.
fill = “steelblue”, # fill :塗色.
colour = “black” # colour:枠線色.
) +
theme_grey(base_size = 25)

棒の数でなく棒の幅で調整してみます.

ggplot(data = DEFAULT,
mapping = aes(x = balance)) +
geom_histogram(
binwidth = 100, # binwidth :棒の幅.
fill = “steelblue”, # fill :塗色.
colour = “black” # colour:枠線色.
) +
theme_grey(base_size = 25)

▼散布図
 X:income Y:balance

ggplot(data = DEFAULT,
mapping = aes(x = income,y = balance)) +
geom_point(colour = “steelblue”,size = 0.5) + #点の色と大きさ
 geom_smooth(method = lm) #近似線(lm:linear model)

▼[RStudio]散布図

 散布図描画を調整し,回帰直線を加えます.

 ggplot(data = DEFAULT,
    mapping = aes(x = income, y = balance)) +
geom_point(
colour = “steelblue”, # colour:点の色.
size = 0.5 # size :点の大きさ.
) +
geom_smooth(method = “lm”) + # lm:liner model(線形近似直線)
theme_grey(base_size = 25)

▼散布図2
 X:balance Y:default

ggplot(data = DEFAULT,
mapping = aes(x = balance, y = default)) +
geom_point(colour = “steelblue”,size = 0.5,
position = position_jitter(height = 0.3))
#position:配置の指定、jitter:ランダム配置,heght:高さ

▼[RStudio]散布図2

 連続変数と離散(カテゴリ)変数の分布を散布図で可視化.

 ggplot(
data = DEFAULT,
mapping = aes(x = balance, y = default)) +
geom_point() +
theme_grey(base_size = 25)

 散布図の描画方法の調整.

 ggplot(data = DEFAULT,
      mapping = aes(x = balance, y = default)) +
geom_point(
colour = “steelblue”, # colour :点の色.
size = 0.5, # size :点の大きさ.
position = position_jitter() # position:点の配置.
# position_jitter():ずらし配置.
) +
theme_grey(base_size = 25)

▼箱ひげ図
 X:default Y:balance

 ggplot(data = DEFAULT,
mapping = aes(x = default, y = balance)) +
geom_boxplot(fill = “steelblue”)

▼[RStudio]箱ひげ図

箱ひげ図の描画方法を調整.

ggplot(data = DEFAULT,
mapping = aes(x = default, y = balance)) +
geom_boxplot(fill = “steelblue”) + # fillで塗色を指定.
theme_grey(base_size = 25)

▼棒グラフ(グルーピング)
 X:default Y:カウント数 studentでグルーピング

 ggplot(data = DEFAULT,
mapping = aes(x = default, fill = student))+
geom_bar(width = 0.9,position = position_dodge())
#position:配置の指定、dodge:横に配置
              #position = “dodge” でも可

▼[RStudio]棒グラフ(グルーピング)

ggplot(
data = DEFAULT,
#fill:塗り分けグルーピング.
mapping = aes(x = default, fill = student)) +
geom_bar(width = 0.9) +
theme_grey(base_size = 25)

▼ヒストグラム(グルーピング)
 X:balance Y:カウント数 defaultでグルーピング

ggplot(data = DEFAULT,
mapping = aes(x = balance,fill = default))+
geom_histogram(bins = 50,colour = “black”,
position = position_identity(),alpha = 0.8)
#identity:配置調整なし(独立表示)

▼[RStudio]ヒストグラム(グルーピング)

▼散布図(グルーピング)
 X:income Y:balance defaultでグルーピング

ggplot(data = DEFAULT,
mapping = aes(x = income,y = balance,
colour = default))+
geom_point(size = 0.5)+
geom_smooth(method = “lm”)

▼[RStudio]散布図(グルーピング)

▼箱ひげ図(グルーピング)
 x:default y:balance studentでグルーピング

ggplot(data = DEFAULT,
mapping = aes(x = default,y = balance,
fill = student))+
geom_boxplot()

▼[RStudio]箱ひげ図(グルーピング)

▼[RStudio]グラフの保存

 # グルーピングした箱ひげ図を[g]に格納.

 g <- ggplot(data = DEFAULT,
   mapping = aes(x = default,y = balance,
fill = student # fill:塗り分けグルーピング.
)) +
geom_boxplot() +
theme_grey(base_size = 15)
#gはなんでもいい。

 # グラフの保存.

 ggsave(
plot = g,
filename = “boxplot.png”,
height = 12,
width = 24,
units = “cm”)

■セクション6:データの整備

▼tidy dataとは

 tidy dataと呼ばれる列指向のデータ形式に整備する。

▼tidy dataへの変換

 tidyrパッケージのpivot_longer関数で列指向のデータに変換する

 pibot_longer(data = DATA,cols = 変換対象列名のベクトル,
name_to = “キーとなる列”, values_to = “値となる列”

▼[RStudio]tidy dataへの変換

「雑然」データのサンプル.

店舗名とフルーツの販売個数データ(適当な数字を代入).

store <- c(“A”, “B”, “C”, “D”, “E”)
apple <- c(3, 5, 5, 9, 2)
orange <- c(0, 5, 6, 1, 2)
banana <- c(2, 2, 5, 2, 3)
grape <- c(1, 1, 0, 2, 1)

ZATSUZEN <- tibble(
store, apple, orange, banana, grape
)

雑然(横持ち)データから整然(縦持ち)データへ変換.

pivot_longer(
data = ZATSUZEN,
cols = c(apple, orange, banana, grape) # 対象列の指定.
)

キー列と値列の名前を指定して変換.

変換データは[SEIZEN]に格納

SEIZEN <- pivot_longer(
data = ZATSUZEN,
cols = c(apple, orange, banana, grape), # 対象列.
names_to = “fruits”, # キー列.
values_to = “volume” # 値列.
)

雑然(横持ち)データへ変換.

pivot_wider(
data = SEIZEN,
names_from = fruits, # キー列.
values_from = volume # 値列.
)

▼パイプ演算子

#dplyrパッケージ
 select(DATA,列1,列2,列3,)

#パイプ演算子
 DATA %>% select(列1,列2,列3,)

※パイプ演算子で書くと、無駄が減る

▼[RStudio]パイプ演算子

パイプ演算子を使った場合.

 DEFAULT_02 <- DEFAULT %>%
select(default, balance) %>%
filter(default == “Yes”) %>%
mutate(new_column = balance – mean(balance))

(上記コードはこのセクションで随時ご説明していきます)

次々と処理をつなげることができます.

パイプ演算子は[Ctrl]+[Shift]+[m]でショートカット入力できます.

▼列の抽出
 dplyrパッケージのselect関数で列を抽出

NEWDATA <- DATA%>%
select(列 1 , 列 2)

多様な select の方法

select(列 1:列 3 ) #select(!列4)

select (新しい列名 = 列 1 ) #列を抽出して列名も変更

rename (新しい列名 = 列 1 ) #列名変更のみ

select (starts_with “col_”)) #select (ends_with(“_col”))

select contains (“_”)) #文字列による列抽出

select (where( is.character )) #TRUEの列のみ

 
▼[RStudio]列の抽出

select関数で列を抽出(選抜).

それを新しいデータフレームに格納.

DEFAULT_NEW <- DEFAULT %>%
select(default, student)

多様なselectの方法.

列を列番号でまとめて指定して抽出.

DEFAULT %>%
select(1:3)

列を列名でまとめて指定して抽出.

DEFAULT %>%
select(default:income)

抽出して列名も変更.

DEFAULT %>%
select(balance_new = balance)

抽出せずに列名変更のみ.

DEFAULT %>%
rename(balance_new = balance)

任意の文字ではじまる列名の列のみ抽出.

DEFAULT %>%
select(starts_with(“d”))

任意の文字で終わる列名の列のみ抽出.

DEFAULT %>%
select(ends_with(“t”))

任意の文字を含む列名の列のみ抽出.

DEFAULT %>%
select(contains(“n”))

変数型を判定してTRUEの列のみ抽出.

DEFAULT %>%
select(where(is.double))

▼列の追加
 dplyrパッケージのmutate関数で列を追加

 NEWDATA <- DATA %>%
mutate(追加列 1 = 追加する値,追加列2 = 追加する値,)
#「追加列」を「既存の列名」と同じにすると上書きされる

多様な mutate の方法

#mutate(追加列2 = “Yes”) すべて同じ値の列

#mutate(追加列3 = c(1:10000))
#異なる値を追加する場合は行数(サンプルサイズ)を同じにする

#mutate(追加列4 = 列 1 + 列 2 ) 既存の列による計算値を追加

▼[RStudio]列の追加

mutate関数で列を追加.

列を新しく追加.

DEFAULT %>%
mutate(default_copy = default)

複数の列を同時に追加.

DEFAULT %>%
mutate(
default_copy = default,
student_copy = student
)

複数の列を同時に追加(追加する場所を指定).

DEFAULT %>%
mutate(
default_copy = default,
student_copy = student,
.after = student # 追加する列の場所を指定
)

多様なmutateの方法.

すべて同じ1つの値の列を追加.

DEFAULT %>%
mutate(col_yes = “YES”)

コメント

タイトルとURLをコピーしました