第1章 データの要約

最終更新日 2013 09 14

    Rの基礎

  • コンソール

    Rはコンソールと呼ばれるウィンドウに命令を入力してEnterキーを押すと,指定された命令が実行されます.
    命令はプロンプトと呼ばれる ">" 記号の右に入力します.
    例:足し算掛け算

    > 1 + (2 * 3) - (4 / 5)
    [1] 6.2
    		      



    数値などの前後にあるスペースは省いても問題ありませんが,空白を挟む方が読みやすくなります.

    変数

  • 代入

    Rではデータに名前をつけて登録します.これを変数と言います.変数を登録するには <- という記号を使います.データに名前を付ける操作を代入といいます.
    例:8 という数字を x という名前で登録します.名前は何でもいいのですが,数字で始まってはいけません.

     x <- 8

    例:1, 2, 3, 4, 5 という5つの数字を x2 という名前で登録します.連続する整数は「:」を間に挟んで指定することができます.

     x2 <- 1:5 

    例:2, 6, 8 という3つの数字に z という名前で登録します.規則性のない複数の数値は c() を使います.丸括弧の内部に,「,」を挟んで羅列します.

     z <- c(2, 6, 8) 

    例:登録したデータを確認します.変数名を入力してEnterを押すだけです

    > z <- c(2, 6, 8)
    > z
    [1] 2 6 8		      
    		      


    データ形式

  • ベクトル

    Rに特有のデータ形式の名前です.ベクトルとは,要するに複数の数字などを1つにまとめたものです.上の「変数」で代入操作した結果はすべてベクトルです.下の実行例でXはベクトルです.

    > X <- c(3, 6, 8)
    > X
    [1] 3  6  8
    		      

  • データフレーム

    データフレーム は,Excelなどの表計算ソフトで言うシートに近いものです.たとえばRのコンソールで cars とだけ入力してEnterを押すと,次のような表示が出ます(後半の出力部分は掲載を省略しました).

    > cars
       speed dist
    1      4    2
    2      4   10
    3      7    4
    4      7   22
    5      8   16
    6      9   10
    7     10   18
    8     10   26
    9     10   34
    10    11   17		      
    		      

    左端の数値はデータそのものではなく,データの行数を表してます.列数と行数に制限はありません.
    cars データには2つの列があります.speed と dist です(走行速度と停止までの距離). このような形式で保存されたデータをRではデータフレームといいます.

  • 添字

    データの順番を表す概念に添字があります.添字を使うと

    データフレームから特定の列や行だけを取り出すことができます.
    まずデータフレームから特定の列をまるまる取り出すには「$」を使います.

    > cars$speed
     [1]  4  4  7  7  8  9 10 10 10 11 11 12 12 12 12 13 13 13
    [19] 13 14 14 14 14 15 15 15 16 16 17 17 17 18 18 18 18 19
    [37] 19 19 20 20 20 20 20 22 23 24 24 24 24 25		      
    		      

    一番左端に[1],[19],[37]というのは,データではありません.その右隣に表示されている数値が,データの何番目の要素であるかを示す表示です.たとえば[19]はその右にある13が,carsデータの speed 列の19番目(carsデータの19行目)の要素であることを意味します.[37]の隣の19は,37番目という意味です. データの添字ともいいます.

    例えば「car$speed」の後ろに「19」をつけてEnterを押すと,cars データの speed 列の19番目の要素だけが表示されます.

    > cars$speed [19]
    [1] 13		      
    		      

    行数を指定してデータを取り出すには,データフレームの名前の後ろに角括弧をつけます.各括弧の中は「,」で分け,コンマの前が行番号,後ろが列番号になります.省略した場合はすべての行ないしすべての列を指定したことになります.

    > cars[1,]
      speed dist
    1     4    2
    ># carsデータの1-3行のすべての列を抽出
    > cars[1:3,]
      speed dist
    1     4    2
    2     4   10
    3     7    4
    ># carsデータの3行目と6行目の2列目だけを抽出
    > cars[c(3,6), 2]
    [1]  4 10
    ># carsデータの3行目と6行目の1-2列目を抽出
    > cars[c(3,6), 1:2]
      speed dist
    3     7    4
    6     9   10		      
    		      

  • データフレームの作成

    一般にデータフレームは,Excelなどの表計算ソフトで作成したデータを読み込むことで作成されます.ただし,手作業で作成することもできます.利用頻度は低いでしょうが,一応,紹介します.

    > df <- data.frame(X = 1:3, Y = c("A", "B", "C"))
    > df
      X Y
    1 1 A
    2 2 B
    3 3 C		      
    		      

    data.frame()の丸括弧内に,列名としてXとYを指定して,それぞれ1から3までの整数,文字A,B,Cを変数として含むデータフレーム df を作成しました.


  • 関数

    Rではデータを操作するのに関数を使います.関数では丸括弧の内部にデータを指定します.丸括弧に指定する要素を引数 といいます

    例:bento7データの平均値を求めます.mean 関数を使います.

    > mean (bento7)
    [1] 221
    		      

    これを「bento7を引数にmean関数を実行する」などと表現することがあります.

    例:bento7データを並び替えます.sort 関数を使います.

    > sort (bento7)
    月  火  木  金  日  水  土 
    181 194 206 208 221 265 272 
    		      

    例:bento7データの中央値を求めます.median 関数を使います.

    > median (bento7)
    [1] 208


    データ操作

  • 添字

    データから一部を取り出すことができます
    例:bento7データから2番目を取り出します

    > bento7 [2]
    火 
    194 
    		      

    例:bento7データから2,6番目を取り出します
    > bento7 [c(2,6)]
    火  土 
    194 272 
    		      

    例:bento7データの6番目の要素を500に変更します

    > bento7 [6] <- 500
    > bento7
    月  火  水  木  金  土  日 
    181 194 265 206 208 500 221 
    		      


    データフレーム

  • その操作

    複数の変数をまとめたデータをデータフレームといいます
    例:bentoデータは「お店」と「売上個数」の二つの変数からなります
    「お店」という変数には「正規屋」と「がんま亭」の2つの水準があります.
    bentoデータの冒頭部分だけをhead()関数で確認します.

    > head (bento)
    売上個数   お店
    1      181 正規屋
    2      194 正規屋
    3      265 正規屋
    4      206 正規屋
    5      208 正規屋
    6      272 正規屋
    		      

    例:bentoデータの「売上個数」変数だけを「$」を使って取り出します.

    > bento$売上個数
    [1] 181 194 265 206 208 272 221 152 176 185 252 217 219 207
    [15] 181 274 223 124 231 184 160 194 162 174 178 136 237 209
    [29] 157 253 207 204 209 209 209 208 208 205 203 203 202 204
    [43] 199 216 211 199 203 203 209 205 206 205 205 212 204 213
    [57] 197 208 206 206
    		      

    ちなみに左端の [1] や [15] はデータの順番(位置)を表しています.たとえば[39] の横にある 157 というのは,bentoデータの39行目の「売上個数」変数の具体的な数値が 157 であるという意味です.
    例:bentoデータで「お店」が「正規屋」であるデータの冒頭10行を取り出します.head 関数を併用します.

    > head (bento [ bento$お店 == "正規屋", ], 10)
       売上個数   お店
    1       181 正規屋
    2       194 正規屋
    3       265 正規屋
    4       206 正規屋
    5       208 正規屋
    6       272 正規屋
    7       221 正規屋
    8       152 正規屋
    9       176 正規屋
    10      185 正規屋
    		      

    bento [ bento$お店 == "正規屋", ] の部分を文章で書くと,bento データから,お店変数の登録内容が「正規屋」である行をすべて取り出せ,という命令になります.

    例:bentoデータで「お店」が「がんま亭」であるデータの最後の10行を取り出します.tail 関数を併用します

    > tail (bento [ bento$お店 == "がんま亭", ], 10)
       売上個数     お店
    51      206 がんま亭
    52      205 がんま亭
    53      205 がんま亭
    54      212 がんま亭
    55      204 がんま亭
    56      213 がんま亭
    57      197 がんま亭
    58      208 がんま亭
    59      206 がんま亭
    60      206 がんま亭
    		      

    bento [ bento$お店 == "がんま亭", ] の部分を文章で書くと,bento データから,お店変数の登録内容が「がんま亭」である行をすべて取り出せ,という命令になります.

    例:bentoデータで「お店」ごとに「売上個数」の概要を求めます.by 関数の内部で,概要を表示するsummary関数を指定します.summary関数は,変数の最小値(Min.),第1四分位数(1st Qu.),中央値(Median),平均(Mean),第3四分位数(3rd Qu.),最大値(Max.)を計算します.

    > by(bento$売上個数, bento$お店, summary)
    bento$お店: がんま亭
    Min.    1st Qu.  Median    Mean    3rd Qu.    Max. 
    197.0   203.2    205.5     205.9   208.8      216.0 
    --------------------------------------------- 
    bento$お店: 正規屋
    Min.    1st Qu.  Median    Mean    3rd Qu.    Max. 
    124.0   176.5    200.0     201.1   222.5      274.0 
    

    例:omuデータで「弁当名」ごとに「売上個数」の概要を求めます.by 関数を使います

    > by(omu$売上個数, omu$弁当名, summary)
    omu$弁当名: オムライス
    Min.    1st Qu.  Median    Mean    3rd Qu.    Max. 
    2.00    7.00     8.00      8.80    9.75      18.00 
    --------------------------------------------- 
    omu$弁当名: オムライス弁当
    Min.   1st Qu.  Median    Mean    3rd Qu.    Max. 
    7.00   11.00    12.50     13.07   14.75      21.00 
    


    グラフィックス

  • 箱ヒゲ図

    Rではグラフを作成する場合も関数を使います.本書ではggplot2という機能を使ってグラフを作成していました.
    ここでは,もう少しシンプルな方法でグラフを作成してみます.

    例:箱ヒゲ図を作成します.boxplot()関数にデータを指定します.まずは正規屋さんのみの弁当売上個数データ (bentoDF) を箱ヒゲ図化

    > boxplot (bentoDF)
    



    例:正規屋さんとがんま亭の売上個数を比較する箱ヒゲ図

    > boxplot(売上個数 ~ お店, data = bento)
    



    説明:boxplot()関数の中にある「売上個数 ~ お店」は「売上個数を,お店の種類(水準)ごとに分けてグラフ化する」と読みます.bento データの「お店」変数には「正規屋」と「がんま亭」の2種類があります.お店ごとに箱がべつべつに描かれます.

    例:オムライスの種類ごとに箱ヒゲ図

    > boxplot(売上個数 ~ 弁当名, data = omu)
    



    説明:boxplot()関数の中にある「売上個数 ~ 弁当名」は「売上個数を,お弁当の種類(水準)ごとに分けてグラフ化する」と読みます.omu データの「弁当名」変数には「オムライス」と「オムライス弁当」の2種類があります.お弁当ごとに箱がべつべつに描かれます.