記述統計と基本グラフ

勉強 2日目

Soichi Matsuura https://so-ichi.com/ (Ritsumeikan University)http://www.ritsumei.ac.jp/
2019-11-27

第2章 記述統計

データの山をただ眺めていても,なかなかその中から変数の特徴をつかむことは難しい。 そこで本章では,データを代表する値(代表値)として,平均や分散,標準偏差,中央値などを計算し,データの特徴をつかむことから始める。

読み込みと記述統計

まずはcsvファイルを読み込む。 csvファイルの読み込みは,基本関数read.csv()を用いる。


df <- read.csv("chap2.csv",header = TRUE)

ある条件を満たすを抽出したい場合は,subset()を用いる。 使い方は,subset(データ, 条件式)のように書くことで,条件を満たす行をデータから抽出できる。 ここでは基本関数subset()を用いてB国(nationが2)のデータを取り出す。


df_B <- subset(df,nation==2)

つぎに,as.factor()を使い,カテゴリー変数genderをfactorに変換する。


df_B$gender <- as.factor(df_B$gender)

B国のデータだけを取り出せたので,B国の所得と性別の記述統計量を求める。


summary(df_B[,c(1,3)]) # 1列目と3列目の変数だけ

     income      gender
 Min.   :487.0   1:4   
 1st Qu.:494.5   2:6   
 Median :499.5         
 Mean   :500.6         
 3rd Qu.:502.0         
 Max.   :517.0         

グラフ

B国の収入の分布を知るために,ヒストグラム(histogram)を作成する。 ここでは基本関数hist()を用いる。


par(family = "HiraKakuProN-W3") # mac文字化け対策
hist(df_B$income, xlab="収入", ylab="度数")

性別の度数分布を表す棒グラフ(barplot)


plot(df_B$gender,xlab="性別", ylab="度数", names.arg = c("男性","女性"))

男女別の所得分布を表す箱ひげ図(box plot)


par(family = "HiraKakuProN-W3") # mac文字化け対策
boxplot(df_B$income ~ df_B$gender,xlab="性別", ylab="所得", names.arg = c("男性","女性"))

tidyverseで再実行

まずはtidyversekパッケージを読み込む。


library(tidyverse)

readrパッケージのread_csv()関数でcsvファイルを読み込む。 1行目は整数,2と3行目はファクターとして読み込む。


df <- readr::read_csv("chap2.csv",col_types="iff")

dplyrパッケージのfilter()を用いてB国のデータを取り出しつつ,select()関数で必要な変数だけを選び,summary()で記述統計量を計算する。


df %>% 
  dplyr::filter(nation==2) %>% 
  dplyr::select(-nation) %>% 
  summary()

     income      gender
 Min.   :487.0   1:4   
 1st Qu.:494.5   2:6   
 Median :499.5         
 Mean   :500.6         
 3rd Qu.:502.0         
 Max.   :517.0         

tidyverseパッケージ群のなかの強力な作図パッケージggplot2を用いてB国の収入のヒストグラムを書く。


df_BB <- df %>% 
  dplyr::filter(nation==2) %>% 
  dplyr::select(income,gender)

ggplot(df_BB,aes(x = income)) + 
  geom_histogram(binwidth = 5, breaks=seq(485, 520, by=5), colour="darkgreen", fill="skyblue")

性別の度数分布の棒グラフ


ggplot(data=df_BB,aes(gender)) + geom_bar(colour="darkgreen", fill="skyblue")

男女別の所得分布を表す箱ひげ図


ggplot(df_BB,aes(y=income,x=gender)) + geom_boxplot(aes(fill=gender))

課題補足


# 正の値の時は問題ないが,
floor(3.14159)

[1] 3

trunc(3.14159)

[1] 3

# 負の値の時は結果が異なる。
floor(-3.14159)

[1] -4

trunc(-3.14159)

[1] -3