確率・統計の復習がてら、Rにも習熟しようと思いたった。このエントリーでは次の話題を取り扱う。
- R環境の準備:RとRStudioのインストールする。
- ライブラリの導入:Excelの読み込みと、基本的な関数の使用を実現する。
- Excelの読み込み操作。
- 基本的な操作
- グラフの描画と重ね合わせ
- R Notebook
このエントリーでは、4を取り上げる。
1-3の話題は次のエントリを参照する。
Rの初歩 - 環境設定 - Technically Impossible
まず参考資料。RStudioのサイトでは様々な早見表が用意されている。Base Rが今回の話題に関連するので、事前に参照するとよい。
www.rstudio.com
4.基本的な操作
前エントリーで読み込んだweek3には3列のデータが含まれている。
week3を表示すると、3列すべてのデータが表示される。特定の列のみを表示するには、$を用いて列名を指定する。
> print(week3) # A tibble: 100 x 3 `Client No` Age Sales <dbl> <dbl> <dbl> 1 204 23.0 1531 2 377 61.0 11780 3 406 39.0 4177 4 521 56.0 9897 5 564 40.0 2133 6 703 31.0 1759 7 781 21.0 1313 8 1080 33.0 2123 9 1117 47.0 2520 10 1345 46.0 2533 # ... with 90 more rows > print(week3$Age) [1] 23 61 39 56 40 31 21 33 47 46 37 23 34 57 39 55 23 63 30 31 50 54 31 25 69 41 57 [28] 42 34 43 30 24 70 36 37 52 64 43 38 61 30 65 30 45 31 31 63 56 22 60 31 31 59 75 [55] 31 30 59 71 27 57 55 48 32 22 46 53 31 67 30 58 54 31 49 60 30 51 62 28 28 58 42 [82] 31 31 68 58 31 39 31 31 26 35 30 44 21 55 72 66 73 31 52 > print(week3$Sales) [1] 1531 11780 4177 9897 2133 1759 1313 2123 2520 2533 3260 1299 2555 [14] 12000 3528 5321 1265 1821 2090 2177 4443 10651 2241 1644 2899 2654 [27] 12900 1800 4047 2356 2154 1423 3370 3144 2565 5909 5222 1987 2232 [40] 7838 2266 6872 2378 2424 1908 2100 2560 12500 1432 11980 1790 1905 [53] 10900 1738 1759 2230 12350 3740 1678 12300 6908 2339 2209 1154 2111 [66] 8314 2178 13916 1908 11650 6655 2189 3663 12600 1809 4739 6544 2133 [79] 1987 12000 3200 1759 2250 2639 11900 1978 2989 2245 2165 1788 2987 [92] 1455 2088 1222 7898 2927 10803 3986 2090 4344
特定列だけを取り出し、異なる変数に代入することもできる。
> vct_age=week3$Age > print(vct_age) [1] 23 61 39 56 40 31 21 33 47 46 37 23 34 57 39 55 23 63 30 31 50 54 31 25 69 41 57 [28] 42 34 43 30 24 70 36 37 52 64 43 38 61 30 65 30 45 31 31 63 56 22 60 31 31 59 75 [55] 31 30 59 71 27 57 55 48 32 22 46 53 31 67 30 58 54 31 49 60 30 51 62 28 28 58 42 [82] 31 31 68 58 31 39 31 31 26 35 30 44 21 55 72 66 73 31 52
取得データのサマリーを確認するには、summary関数を用いる。
> summary(week3) Client No Age Sales Min. : 204 Min. :21.00 Min. : 1154 1st Qu.:2864 1st Qu.:31.00 1st Qu.: 1987 Median :5536 Median :40.50 Median : 2472 Mean :5341 Mean :43.54 Mean : 4331 3rd Qu.:7830 3rd Qu.:57.00 3rd Qu.: 5247 Max. :9921 Max. :75.00 Max. :13916
summary関数に含まれていない値を確認するには、個別の関数を用いることになる。例えばweek3$Ageの標準偏差、分散、尖度、歪度を求めるには、
> library("e1071", lib.loc="~/R/win-library/3.4") > x=week3$Age > sd(x) [1] 14.9986 > var(x) [1] 224.958 > kurtosis(x) [1] -1.190913 > skewness(x) [1] 0.3343025
関数kurtosis、skewnessはライブラリe1071が必要なので、事前にライブラリを読み込んでいる。
関数の作成
繰り返し利用する処理を切り出して関数化するのは、そのほかのプログラム同様、Rでも通用する。
Rには最頻値を求める関数がないため、自前の関数を作成してみる。
> myMode=function(x){ + return(names(which.max(table(x)))) + } > myMode(week3$Age) [1] "31"
R標準のsummary関数は、私の求めているものと異なるため、オリジナルのsummary関数を作成してみる。
各関数の値を列記すると同時に、そのタイトルをmyLabelに定義して、挿入している。先に作成した最頻値の関数も呼び出している。
mySummary=function(x) { myLabel = c( "Mean", "Median", "Mode", "Standard deviation", "Standard error", "Variance", "Kurtosis", "Skewness", #"Range", "Min", "Max", "Total", "Length" ) myVal=c( mean(x), median(x), myMode(x), sd(x), sd(x)/sqrt(length(x)), var(x), kurtosis(x), skewness(x), #range(x), min(x), max(x), sum(x), length(x) ) names(myVal) = myLabel print(myVal) }
このように実行される。
> mySummary(week3$Age) Mean Median Mode Standard deviation "43.54" "40.5" "31" "14.998599261197" Standard error Variance Kurtosis Skewness "1.4998599261197" "224.95797979798" "-1.19091344797837" "0.334302512910519" Min Max Total Length "21" "75" "4354" "100"
次のエントリーで、読み込んだデータをもとにグラフを描画し、複数のグラフを重ね合わせてみる。
impsbl.hatenablog.jp