Rで単純な統計計算

# はじめに
Rでのデータの取り扱い(平均値, 中央値, 分散, 標準偏差, 四分位数, ヒストグラム, 箱ひげ図, 折れ線グラフ, 幹葉図, 散布図, 散布図行列など)についてまとめました。
大学の授業内で紹介されたものをまとめているので大雑把にしかまとめられていません。
許してください。

# 目次
[1. データの入力](#1.データの入力)
[2. 単純な統計処理](#2.単純な統計処理)
[3. グラフの描画](#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", "男"/"女", ...|

    - 確認方法
        ```R
        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)
        ```R
        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
        ```
- ## データの作成
    - ### ベクトルデータの作成
        ```R
        name <- c("Apex", "VALORANT", "OverWatch")
        name
        [1] "Apex"      "VALORANT"  "OverWatch"
        player <- c(6300, 225, 2500)
        player
        [1] 6300  225 2500
        ```

    - ### 行列の作成
        ```R
        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
        ```R
        x <- read.csv(file.choose(), header=TRUE)
        ```
        ☆ header=TRUEはデータの1行目に変数名が書いてあるファイルを読み込む際に、header=TRUEと指定します。(デフォルトはheader=TRUEなので指定しなくてもok)
    - ### EXCEL
        ```R
        install.packages("readxl")
        library(readxl)
        #Rにパッケージをインストールしてない人は上の作業を行ってください。
        x <- read_excel(file.choose(), sheet="Sheet1", skip=0)
    - ### TEXT
        ```R
        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'
        ```
    - ### データの確認
        ```R
        x <- read.csv(file.choose())
        x        #データの中身をすべて見たいとき
        head(x)  #データの最初の数行だけ確認したいとき

# 2. 単純な統計処理
- ## 基本処理
    <details><summary>使用するデータ</summary>
      
        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

    </details>

    - 平均値
        ```R
        mean(x$score)
        [1] 50.36667
        ```

    - 中央値
        ```R
        median(x$score)
        [1] 44
        ```

    - 分散
        ```R
        var(x$score)
        [1] 546.5851
        ```

    - 標準偏差
        ```R
        sd(x$score)
        [1] 23.37916
        ```
    
    - 四分位数
        ```R
        quantile(x$score)
           0%    25%    50%    75%   100% 
        11.00  31.00  44.00  70.75  93.00 
        ```

    - まとめ
        <details><summary>記述されていること</summary>
        
        - 最小値
        - 第1四分位数
        - 中央値
        - 平均値
        - 第3四分位数
        - 最大値
        </details>

        ```R
        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関数を使って基本処理を一気に計算します。
        ```R
        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
        ```
# 3. グラフの描画

- ## データが1つの時のグラフ
     <details><summary>使用するデータ</summary>

          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

    </details>

    - ヒストグラム
        ```R
        hist(x$score)
        ```
        ![histgram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2483440/4e3fc004-5c3e-12c1-e040-10992e3778c7.png)

    - 箱ひげ図
        ```R
        #幅 -> max: 2.2, min: 0.003
        boxplot(x$score, boxwex=1.5)
        ```
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2483440/8d759d74-b159-291d-9673-37c35615748e.png)

    - 幹葉図(みきはず)
        ```R
        stem(x$score)
          The decimal point is 1 digit(s) to the right of the |

          1 | 1
          2 | 115679
          3 | 0466
          4 | 01335
          5 | 122
          6 | 23
          7 | 01589
          8 | 15
          9 | 13
        ```

- ## データが複数存在するときのグラフ　[[6]](#参考)
     <details><summary>使用するデータ(2021年の東京の年間平均気温・降水量・風速・雲量を利用)</summary>

            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

    </details>

    - 折れ線グラフ　[[7]](#参考)
        ```R
        plot(x$month, x$ave_temp, type="b", ylim=c(0, 35), col="blue", lty=2)
        #plot(x軸, y軸, 折れ線グラフのタイプ, yの最小値・最大値, 色, 線の種類)
        ```
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2483440/2bc16a2e-3d38-a0f7-0956-73fb7f62adb6.png)


    - 散布図
        ```R
        plot(x$ave_temp, x$ave_cloud)
        #平均気温と雲の量に正の相関ある...?
        ```
       ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2483440/b2ddde0d-f126-c92e-7d3c-bbf99190b487.png)

        
    - 散布図行列
        ```R
        pairs(x[, 2:5]) #データが2列目から5列目にある時の指定方法
        ```
       ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2483440/74e32e61-90c4-f590-d323-bcc73f7fc098.png)


        <details><summary>使用するデータ</summary>

          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
        </details>

    - 種類別にデータフレームを作成する
    -> 因子型データがある場合のみ有効
        ```R
        x.0 <- subset(x, x$sex==0) #この時sex==0を女性とする
        x.1 <- subset(x, x$sex==1) #この時sex==1を男性とする
        ```
    - 種類別散布図
        ```R
        #数値をランダムに生成しているので相関はないです
        #女性だけの国語の点数と数学の点数の散布図が見れる
        plot(x.0$Japanese, x.0$Math)
        ```
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2483440/4df46ce1-822e-dcab-d33a-97b73c84013e.png)
    - 種類別散布図行列
        ```R
        pairs(x.0[, 3:7])
        ```
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2483440/fc0e5a69-7336-a33d-d640-fdbd22e9d628.png)
    - 相関係数
        ```R
        #国語と数学の相関係数
        cor(x$Japanese, x$Math)
        [1] -0.09876267
        ```
    - 相関行列
        ```R
        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
        ```
    - 種類別相関行列
        ```R
        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
        ```

# 参考
1. [Ｒのデータ型、データ構造(閲覧日:2022/12/01)](http://www.f.waseda.jp/sakas/R/Rdata.html)
1. [Rのデータ構造(閲覧日:2022/12/02)](https://htsuda.net/stats/data-basics.html)
1. [【R×栄養統計】データの読み込み方法を習得しよう【TXT・CSV,・XLSX】(閲覧日:2022/12/01)](https://www.y-shinno.com/r-nutrition-statistics-read-data/)
1. [R エラーの説明: readtableheader で見つかった不完全な最終行(閲覧日:2022/12/01)](https://www.programmingr.com/r-error-messages/incomplete-final-line-found-by-readtableheader/)
1. [apply系関数の使い方(閲覧日:2022/12/01)](http://takenaka-akio.org/doc/r_auto/chapter_07_apply.html)
1. [過去の気象データ・ダウンロード(閲覧日:2022/12/02)](https://www.data.jma.go.jp/gmd/risk/obsdl/)
1. [折れ線グラフ(閲覧日:2022/12/02)](https://stats.biopapyrus.jp/r/graph/lines.html)