はじめに
Rでのデータの取り扱い(平均値, 中央値, 分散, 標準偏差, 四分位数, ヒストグラム, 箱ひげ図, 折れ線グラフ, 幹葉図, 散布図, 散布図行列など)についてまとめました。
大学の授業内で紹介されたものをまとめているので大雑把にしかまとめられていません。
許してください。
目次
1. データの入力
2. 単純な統計処理
3. グラフの描画
参考
1. データの入力 [1, 2]
-
型
データの型 説明 定数の例 integer(numeric) 整数型 1, -1, 20300, ... double(numeric) 実数型(整数も含む) 3.1415, -0.001, 125.00012, 1, 1e-10, ... complex 複素数型 1i, 1-4.5i, 3+0i, complex(re=a, im=b), ... character 文字型 "A", "2014/10/14", "human", "", ... logical 論理型 TRUE, FALSE, T, F, NA, ... factor 因子型 0/1, "A"/"B", "男"/"女", ... - 確認方法
x <- 10 class(x) [1] "numeric" x <- 1+4.5i class(x) [1] "complex" x <- "Apex" class(x) [1] "character" x <- (10.2*5 < 52) class(x) [1] "logical" #主に性別を分ける際などに利用される x <- c("man","man","woman","man","woman","man","woman","man") x <- factor(x) class(x) [1] "factor" str(x) #str()はデータフレームの概要を表示する関数 Factor w/ 2 levels "man","woman": 1 1 2 1 2 1 2 1
- 無限大と欠損地(Not Available)
x <- Inf x / x [1] NaN x <- NA class(x) [1] "logical" #欠損地を考慮した計算 xs <- c(10, 8, 9, NA, 11) sum(xs, na.rm=TRUE) [1] 38
- 確認方法
-
データの作成
-
ベクトルデータの作成
name <- c("Apex", "VALORANT", "OverWatch") name [1] "Apex" "VALORANT" "OverWatch" player <- c(6300, 225, 2500) player [1] 6300 225 2500
-
行列の作成
x <- matrix(c(1, 1, 2, 3, 5, 8), nrow=2, ncol=3, byrow=TRUE) #行の名前付与 rownames(x) <- c("male", "female") #列の名前付与 colnames(x) <- c("yes", "no", "None") x yes no None male 1 1 2 female 3 5 8 name <- c("Apex", "VALORANT", "OverWatch") player <- c(6300, 225, 2500) data <- data.frame(name, player) data name player 1 Apex 6300 2 VALORANT 225 3 OverWatch 2500
-
-
データの読み込み [3, 4]
よく使うデータの読み込み方法
-
CSV
☆ header=TRUEはデータの1行目に変数名が書いてあるファイルを読み込む際に、header=TRUEと指定します。(デフォルトはheader=TRUEなので指定しなくてもok)x <- read.csv(file.choose(), header=TRUE)
-
EXCEL
install.packages("readxl") library(readxl) #Rにパッケージをインストールしてない人は上の作業を行ってください。 x <- read_excel(file.choose(), sheet="Sheet1", skip=0)
-
TEXT
x <- read.table(file.choose(), header=TRUE) #以下の警告文が出た際はtextファイルの最終行にEnterを押して改行してみてください。 警告メッセージ: read.table(file.choose(), header = TRUE) で: incomplete final line found by readTableHeader on 'C:\Users\XXX\YYY\ZZZ.txt'
-
データの確認
x <- read.csv(file.choose()) x #データの中身をすべて見たいとき head(x) #データの最初の数行だけ確認したいとき
-
2. 単純な統計処理
-
基本処理
使用するデータ
name score Akai 21 Baba 41 Bandou 81 Funaki 10 Horiuchi 44 Imai 58 Ishiyama 11 Iwabuchi 43 Kawai 15 Koga 47 Kumazawa 29 Maruta 20 Masuko 57 Matsushita 40 Nagaoka 55 Nagashima 81 Oosawa 72 Sakamoto 24 Sawada 29 Suwa 59 Terasaki 17 Tsuchiya 26 Tsumura 62 Uchiyama 50 Uesugi 37 Urano 12 Yabuki 95 Yaguchi 93 Yanagisawa 50 Yokoi 93
-
平均値
mean(x$score) [1] 50.36667
-
中央値
median(x$score) [1] 44
-
分散
var(x$score) [1] 546.5851
-
標準偏差
sd(x$score) [1] 23.37916
-
四分位数
quantile(x$score) 0% 25% 50% 75% 100% 11.00 31.00 44.00 70.75 93.00
-
まとめ
記述されていること
- 最小値
- 第1四分位数
- 中央値
- 平均値
- 第3四分位数
- 最大値
summary(x$score) Min. 1st Qu. Median Mean 3rd Qu. Max. 11.00 31.00 44.00 50.37 70.75 93.00
-
-
基本処理の簡略化 [5]
- for文とapply関数を使って基本処理を一気に計算します。
analyze <- list(mean, median, var, sd, quantile, summary) for (xs in analyze){print(apply(x[2], 2, xs))} score 50.36667 score 44 score 546.5851 score 23.37916 score 0% 11.00 25% 31.00 50% 44.00 75% 70.75 100% 93.00 score Min. 11.00000 1st Qu. 31.00000 Median 44.00000 Mean 50.36667 3rd Qu. 70.75000 Max. 93.00000
- for文とapply関数を使って基本処理を一気に計算します。
3. グラフの描画
-
データが1つの時のグラフ
使用するデータ
name score Akai 21 Baba 41 Bandou 81 Funaki 10 Horiuchi 44 Imai 58 Ishiyama 11 Iwabuchi 43 Kawai 15 Koga 47 Kumazawa 29 Maruta 20 Masuko 57 Matsushita 40 Nagaoka 55 Nagashima 81 Oosawa 72 Sakamoto 24 Sawada 29 Suwa 59 Terasaki 17 Tsuchiya 26 Tsumura 62 Uchiyama 50 Uesugi 37 Urano 12 Yabuki 95 Yaguchi 93 Yanagisawa 50 Yokoi 93
-
データが複数存在するときのグラフ [6]
使用するデータ(2021年の東京の年間平均気温・降水量・風速・雲量を利用)
month ave_temp precipi_total ave_wind_speed ave_cloud_cover 1 5.4 43.5 2.3 5.1 2 8.5 88.5 2.9 3.9 3 12.8 173 3.2 7 4 15.1 156 3.2 5.7 5 19.6 99.5 3.2 8.5 6 22.7 168.5 2.7 8.5 7 25.9 310 2.4 7.7 8 27.4 382.5 3.1 7.2 9 22.3 222.5 2.4 8 10 18.2 199.5 2.5 6.2 11 13.7 93 2.2 4.8 12 7.9 116 2.4 4.2
- 折れ線グラフ [7]
plot(x$month, x$ave_temp, type="b", ylim=c(0, 35), col="blue", lty=2) #plot(x軸, y軸, 折れ線グラフのタイプ, yの最小値・最大値, 色, 線の種類)
-
散布図
plot(x$ave_temp, x$ave_cloud) #平均気温と雲の量に正の相関ある...?
-
散布図行列
pairs(x[, 2:5]) #データが2列目から5列目にある時の指定方法
使用するデータ
name sex Japanese Math English Science History Akai 1 34 100 29 64 38 Baba 1 55 35 68 100 75 Bandou 0 23 70 23 54 41 Funaki 1 11 100 75 60 41 Horiuchi 0 21 28 21 29 36 Imai 0 15 45 75 42 20 Ishiyama 1 33 87 21 52 25 Iwabuchi 0 69 75 30 12 18 Kawai 1 36 12 22 57 14 Koga 0 90 41 86 22 72 Kumazawa 1 99 65 10 58 62 Maruta 0 74 27 25 53 69 Masuko 1 60 73 98 42 89 Matsushita 0 30 88 89 44 47 Nagaoka 1 80 68 21 45 92 Nagashima 0 78 61 65 92 31 Oosawa 1 87 80 51 72 16 Sakamoto 1 15 67 29 84 58 Sawada 1 78 43 50 10 21 Suwa 0 39 54 29 41 54 Terasaki 1 54 93 26 44 22 Tsuchiya 1 44 50 26 41 74 Tsumura 1 81 66 90 84 20 Uchiyama 1 84 21 80 15 73 Uesugi 0 43 50 93 83 73 Urano 1 21 43 93 47 47 Yabuki 0 32 47 92 72 17 Yaguchi 1 35 100 56 27 27 Yanagisawa 0 51 29 67 79 29 Yokoi 0 10 37 22 85 54
-
種類別にデータフレームを作成する
-> 因子型データがある場合のみ有効x.0 <- subset(x, x$sex==0) #この時sex==0を女性とする x.1 <- subset(x, x$sex==1) #この時sex==1を男性とする
-
種類別散布図
#数値をランダムに生成しているので相関はないです #女性だけの国語の点数と数学の点数の散布図が見れる plot(x.0$Japanese, x.0$Math)
-
種類別散布図行列
pairs(x.0[, 3:7])
-
相関係数
#国語と数学の相関係数 cor(x$Japanese, x$Math) [1] -0.09876267
-
相関行列
cor(x[, 3:7]) Japanese Math English Science History Japanese 1.00000000 -0.09876267 0.03815589 -0.160026237 0.193884537 Math -0.09876267 1.00000000 -0.04927415 -0.014672706 -0.177627250 English 0.03815589 -0.04927415 1.00000000 0.093958001 0.064444528 Science -0.16002624 -0.01467271 0.09395800 1.000000000 0.002842525 History 0.19388454 -0.17762725 0.06444453 0.002842525 1.000000000
-
種類別相関行列
cor(x.0[, 3:7]) Japanese Math English Science History Japanese 1.00000000 -0.01601648 0.157049537 -0.1552637 0.260636344 Math -0.01601648 1.00000000 0.167150035 -0.1907712 -0.208635728 English 0.15704954 0.16715003 1.000000000 0.2252828 -0.005072774 Science -0.15526375 -0.19077121 0.225282841 1.0000000 0.047881803 History 0.26063634 -0.20863573 -0.005072774 0.0478818 1.000000000 cor(x.1[, 3:7]) Japanese Math English Science History Japanese 1.00000000 -0.23239950 -0.01971113 -0.15971332 0.14472869 Math -0.23239950 1.00000000 -0.12516072 0.09718001 -0.21097599 English -0.01971113 -0.12516072 1.00000000 -0.02061257 0.11860824 Science -0.15971332 0.09718001 -0.02061257 1.00000000 -0.02115291 History 0.14472869 -0.21097599 0.11860824 -0.02115291 1.00000000
- 折れ線グラフ [7]