LoginSignup
0
0

More than 1 year has passed since last update.

Rで単純な統計計算

Last updated at Posted at 2022-12-01

はじめに

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

      x <- read.csv(file.choose(), header=TRUE)
      
      ☆ header=TRUEはデータの1行目に変数名が書いてあるファイルを読み込む際に、header=TRUEと指定します。(デフォルトはheader=TRUEなので指定しなくてもok)
    • 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
      

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
    
    • ヒストグラム

      hist(x$score)
      

      histgram.png

    • 箱ひげ図

      #幅 -> max: 2.2, min: 0.003
      boxplot(x$score, boxwex=1.5)
      

      image.png

    • 幹葉図(みきはず)

      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]

    使用するデータ(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の最小値・最大値, 色, 線の種類)
      

    image.png

    • 散布図

      plot(x$ave_temp, x$ave_cloud)
      #平均気温と雲の量に正の相関ある...?
      

      image.png

    • 散布図行列

      pairs(x[, 2:5]) #データが2列目から5列目にある時の指定方法
      

      image.png

      使用するデータ
      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)
      

      image.png

    • 種類別散布図行列

      pairs(x.0[, 3:7])
      

      image.png

    • 相関係数

      #国語と数学の相関係数
      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
      

参考

  1. Rのデータ型、データ構造(閲覧日:2022/12/01)
  2. Rのデータ構造(閲覧日:2022/12/02)
  3. 【R×栄養統計】データの読み込み方法を習得しよう【TXT・CSV,・XLSX】(閲覧日:2022/12/01)
  4. R エラーの説明: readtableheader で見つかった不完全な最終行(閲覧日:2022/12/01)
  5. apply系関数の使い方(閲覧日:2022/12/01)
  6. 過去の気象データ・ダウンロード(閲覧日:2022/12/02)
  7. 折れ線グラフ(閲覧日:2022/12/02)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0