5. データをファイルから読み込むには

5.1. [疑問]

でもねぇ、前節の方法だとデータの人数が増えたら、いちいち続けて手で入力し続けるの? 多くなったら面倒だし、そもそも入力ミスだって避けられない。 何か良い手はないの?

ハイ、あります。ファイルから読み込みましょう。データとプログラムを分離するためにも。

ここでは、中日ドラゴンズの選手の体格を分析することを例に説明します。 なお、以下のリンクをクリックする際にはマウスの右クリックを使って「新しいウインドウで開く」で開くようにしてください。単にクリックするとMoodle内で開いてしまうので非常に見辛くなります。

5.2. データの電子化

今回の例では、データはWeb上に提示されているものの、手元にデータが 存在するわけではない。そこで、これらの選手データをファイルの形で 保存したい。そのためのツールとして、Excelは非常にパワフルなツールだと 考えている。

このWebからデータをもらってきて、Excelに入力ください。

[蛇足] パソコン処理に慣れた方なら、Webの数値群をExcelに コピーペーストで入力できてしまうことをご存知かもしれません。

本来は各自で取り組んでほしいのだが、時間の関係もあり、 ここでは、もう既に電子化したファイルをこちらから提供することにします。 Moodleにファイルを保存しておきますので、 各自のPCにダウンロードください。 本来は各自で入力したと想定くださいね。

● Dragons24.xlsx

ファイルを開けてこのサンプルファイルをご覧いただきたいのですが、 ファイルの最初の方に、いくつかの説明が記入されていることが判るであろう。

5.3. データをCSV形式で保存

CSV形式とは、Comma Separated Valueの略で、各値がコンマ区切りの テキストファイルで保存されたファイルを指す。 CSV形式であればRから容易に読み込めるので、この形式でファイルを保存する。Excelで通常の形式(.xlsx)で保存した後、 [ファイル]-[名前をつけて保存]で ウインドウの左下にある[ファイルの種類]に「CSV UTF-8(コンマ区切り)(.csv)」を選択し保存する。その際、警告ウインドウが表示されることがあるが無視してかまわない。 保存した場所とファイル名を忘れないように。

なお、Excelの保存ファイル形式には、他に「CSV(コンマ区切り)(*.csv)」という似た形式のものもある(下の方に表示されている。保存する文字コードがShift-JISコートになる)ので、注意が必要である。

[演習5.3-1] ドラゴンズの選手データを各自のPCにCSV形式で保存せよ。

  • 以下の例では「Dragons24.csv」という名称で保存したとして説明を続ける。

【メモ】WindowsでもR 4.2.0以降(先週最新版をインストールした人はR 4.4.1のはず)は、UTF-8がデフォルトの文字コードとなった。それ以前は Shift-JIS(CP932)だった。詳細は5.8節参照。

5.4. Rのディレクトリにcsvファイルをコピー

CSV形式で保存したファイル(Dragons24.csv)を Rのディレクトリ(各自で異なる)にコピーする。 先週紹介したサイトの例をそのまま踏襲された方は、 作業ディレクトリが「Cドライブの中の、R_practiceというフォルダ」として おられるかもしれません。 私は作業ディレクトリを「D:/home_sub3/R_Dir」と指定しているので、 このディレクトリの下の、「KougiDS24というフォルダ」に 「Dragons24.csv」をコピーしました。

【余談】本講義では皆さんに「各自で興味あるデータ」の分析を してもらうことをお知らせしています。皆さんが持参されたデータが どのような媒体で持ち込まれるかは判りませんが、例えば本や雑誌といった 紙媒体なら、上記の方法で手入力してCSVファイルの形式にしてください。 また、Web等の電子媒体の場合も、データの形式を整えてCSVファイルを 準備するようにしてください。 電子化する際は本節が役に立つと思います。 お解りにならない方は遠慮なくご質問ください。

5.5. R側から読み込もう

お待たせしました。やっとR側からファイルを読み込む方法をご紹介します。 まず、保存先のディレクトリに移動します。 私はRのホームディレクトリを「D:/home_sub3/R_Dir」と指定しているので、 明示的に移動を示すなら以下の指示を入れます。 RStudioの設定で既に指定してあれば、敢えては必要ありません。

setwd("D:/home_sub3/R_Dir")  # ホームディレクトリに移動(Set Working Directory)
getwd()                      # 現在のディレクトリを表示(Get Working Directory)
## [1] "D:/home_sub3/R_Dir"
list.files()                 # ファイル名一覧
##  [1] "DNC_Tsuiseki"           "DNC21"                  "Dragons"               
##  [4] "Food"                   "grain"                  "JEES"                  
##  [7] "KougiDS20"              "KougiDS21"              "KougiDS22"             
## [10] "KougiDS23"              "KougiDS24"              "LibraryInstall2211a.R" 
## [13] "Misc"                   "NitechNSK21_R"          "NitechNSK22_R"         
## [16] "NitechNSK23_R"          "plot1.png"              "PresentationSample.Rmd"
## [19] "PresenTest.html"        "PresenTest.Rmd"         "R_Dir_NKK20"           
## [22] "StatEdu24"              "StatM20"                "StatM21"               
## [25] "StatM22"                "StatM23"                "Terao.zip"             
## [28] "Terao_Lenovo"           "Terao1"                 "Terao2"                
## [31] "Unemployment"           "確立楕円.R"
setwd("KougiDS24")           # ディレクトリを移動
list.files()                 # ファイル名一覧
##  [1] "Dragons24.csv"              "DS01_Questionnaire1.csv"   
##  [3] "DS01_Questionnaire2.csv"    "DS01_Questionnaire3.csv"   
##  [5] "DS2402_1.pdf"               "DS2402_1c.html"            
##  [7] "DS2402_1c.Rmd"              "DS2402_2.pdf"              
##  [9] "DS2402_2a.html"             "DS2402_2a.Rmd"             
## [11] "DS2402_3.pdf"               "DS2402_3a.html"            
## [13] "DS2402_3a.Rmd"              "DS2402_3b.BAK"             
## [15] "DS2402_3b.html"             "DS2402_3b.Rmd"             
## [17] "DS2403_1.pdf"               "DS2403_1a.html"            
## [19] "DS2403_1a.Rmd"              "ExcelStudent24b.jpg"       
## [21] "Exp"                        "lec01"                     
## [23] "NewsPaper"                  "OldFiles"                  
## [25] "RStudio_Display.jpg"        "RStudio_Icon.jpg"          
## [27] "StockFiles"                 "StudAll23b.csv"            
## [29] "StudAll24b.csv"             "新聞記事"                  
## [31] "労働男女集約1_抽出2EUC.csv"

ファイルを読み込みます。その際、先頭の6行には説明等の分析に必要ない 情報が書き込まれていますので、読み飛ばす(スキップ)します。 また、それに続く行に変数名が指定されているので、 これをヘッダーとして取り扱うことを指示するために「header=TRUE」を 指定しておきます。Excel入力時にこの行を準備してもらったのは このように指定できるからです。この行を準備していない場合は システム側が任意の変数名を付けてくれますが、無味簡素な名称なので、 意味が理解しやすい変数名を自分で付ける方が効率が上がると思います。

5.6. 読み込んだデータの表示

ズレがないかを目視で確認する。ただし、ブラウザの都合で漢字の横幅が不均等のためややズレたように見えることがあるので、その点はご容赦いただきたい。

Drag24<-read.csv("Dragons24.csv", skip=6, header=TRUE)  # CSVデータの読み込み
Drag24                                                  # データの表示
##    No.           Name Position  BoY BoM BoD height weight Tou   Da
## 1    7       根尾 昂     投手 2000   4  19    177     84  右   左
## 2   11 小笠原 慎之介     投手 1997  10   8    180     93  左   左
## 3   12     田島 慎二     投手 1989  12  21    181     87  右   右
## 4   13     橋本 侑樹     投手 1998   1   8    180     75  左   左
## 5   14       草加 勝     投手 2001  11  21    182     75  右   右
## 6   16       岩嵜 翔     投手 1989  10  21    189     90  右   右
## 7   17       柳 裕也     投手 1994   4  22    180     85  右   右
## 8   18     梅津 晃大     投手 1996  10  24    187     95  右   右
## 9   19     髙橋 宏斗     投手 2002   8   9    186     86  右   右
## 10  20     涌井 秀章     投手 1986   6  21    185     85  右   右
## 11  22     大野 雄大     投手 1988   9  26    184     85  左   左
## 12  24     福谷 浩司     投手 1991   1   9    183     93  右   右
## 13  26     石森 大誠     投手 1997  12   3    178     83  左   左
## 14  28       森 博人     投手 1998   5  25    177     84  右   右
## 15  31     仲地 礼亜     投手 2001   2  15    177     83  右   右
## 16  33   祖父江 大輔     投手 1987   8  11    175     75  右   左
## 17  34       福 敬登     投手 1992   6  16    181     98  左   左
## 18  36   福田 幸之介     投手 2005   8  11    181     84  左   左
## 19  38     松葉 貴大     投手 1990   8  14    179     82  左   左
## 20  41     勝野 昌慶     投手 1997   6  12    181     89  右   右
## 21  46     梅野 雄吾     投手 1999   1  13    175     84  右   右
## 22  47     砂田 毅樹     投手 1995   7  20    180     80  左   左
## 23  48     土生 翔太     投手 2001   3  10    180     93  右   右
## 24  50     清水 達也     投手 1999  11   3    184     90  右   右
## 25  54     藤嶋 健人     投手 1998   5   8    177     85  右   右
## 26  59     齋藤 綱記     投手 1996  12  18    182     91  左   左
## 27  64     福島 章太     投手 2002  10  24    177     92  左   左
## 28  67   上田 洸太朗     投手 2002   9   6    184     91  左   左
## 29  69   松木平 優太     投手 2003   2  24    178     78  右   右
## 30  90     松山 晋也     投手 2000   6  23    188     92  右   右
## 31  91         メヒア     投手 1997   3   3    193    104  右   右
## 32  92   マルティネス     投手 1996  10  11    193     93  右   左
## 33  93       フェリス     投手 1993   6  28    195    111  右   右
## 34  96     加藤 竜馬     投手 1999   5  13    185    100  右 左右
## 35  35     木下 拓哉     捕手 1991  12  18    183     95  右   右
## 36  39   宇佐見 真吾     捕手 1993   6   4    181     88  右   左
## 37  43     味谷 大誠     捕手 2003   6  14    180     85  右   左
## 38  49     加藤 匠馬     捕手 1992   4  29    175     83  右   右
## 39  57   山浅 龍之介     捕手 2004   4  21    175     82  右   左
## 40  58     石橋 康太     捕手 2000  12   7    181     94  右   右
## 41   2     田中 幹也   内野手 2000  11  28    166     68  右   右
## 42   3     高橋 周平   内野手 1994   1  18    180     90  右   左
## 43   5     村松 開人   内野手 2001   1   6    171     80  右   左
## 44   6       中田 翔   内野手 1989   4  22    184    107  右   右
## 45   9     中島 宏之   内野手 1982   7  31    180     90  右   右
## 46  25     石川 昂弥   内野手 2001   6  22    186    100  右   右
## 47  27     津田 啓史   内野手 2002  11  23    181     88  右   右
## 48  29   辻本 倫太郎   内野手 2001   8  11    168     73  右   右
## 49  32     石垣 雅海   内野手 1998   9  21    181     88  右   右
## 50  45           龍空   内野手 2002  12  30    180     77  右   左
## 51  60     山本 泰寛   内野手 1993  10  10    176     76  右   右
## 52  66       ビシエド   内野手 1989   3  10    185    108  右   右
## 53  68     福永 裕基   内野手 1996   9  16    180     85  右   右
## 54  95     ロドリゲス   内野手 2002   3  31    184     74  右   右
## 55  97     樋口 正修   内野手 1998  11  17    177     75  右   左
## 56  99       カリステ   内野手 1992   2   3    184     87  右   右
## 57   0     尾田 剛樹   外野手 2000   8   3    175     74  左   左
## 58   1     岡林 勇希   外野手 2002   2  22    175     75  右   左
## 59   4     鵜飼 航丞   外野手 1999   5  30    182    100  右   右
## 60   8     大島 洋平   外野手 1985  11   9    176     75  左   左
## 61  30     三好 大倫   外野手 1997   9  28    179     83  左   左
## 62  37     濱 将乃介   外野手 2000   5   3    181     81  右   左
## 63  42 ブライト 健太   外野手 1999   5   7    184     88  右   右
## 64  44     川越 誠司   外野手 1993   6  30    174     80  左   左
## 65  51     上林 誠知   外野手 1995   8   1    185     90  右   左
## 66  52     加藤 翔平   外野手 1991   3  28    183     90  右 左右
## 67  53     後藤 駿太   外野手 1993   3   5    180     85  右   左
## 68  55     細川 成也   外野手 1998   8   4    179     98  右   右
## 69  63   板山 祐太郎   外野手 1994   3  27    180     88  右   左
## 70  94   ディカーソン   外野手 1990   5  26    190    104  左   左
## 71 201     竹内 龍臣 育成選手 2001  12  11    180     85  右   右
## 72 202     アルバレス 育成選手 1999   1  16    192     92  右   右
## 73 204       加藤 翼 育成選手 2002  12  14    179     80  右   右
## 74 205     垣越 建伸 育成選手 2000   4   3    185    100  左   左
## 75 208       石川 翔 育成選手 1999  12  14    180     89  右   左
## 76 210     岡田 俊哉 育成選手 1991  12   5    178     69  左   左
## 77 212     野中 天翔 育成選手 2005   2   5    180     83  左   左
## 78 213     森山 暁生 育成選手 2005   1  11    183     84  左   左
## 79 214       近藤 廉 育成選手 1998   9  22    180     87  左   左
## 80 216     菊田 翔友 育成選手 2003   9  25    182     88  右   右
## 81 215     日渡 騰輝 育成選手 2004   9  20    173     89  右   左
## 82 207     星野 真生 育成選手 2003  12   1    176     78  右   右
## 83 218     川上 理偉 育成選手 2001   3  10    178     85  右   右
## 84 209     福元 悠真 育成選手 1999  12   1    180     85  右   右
## 85 220       モニエル 育成選手 2001   4  17    190    106  右   右

【注意】読み込んだデータの一覧が表示されたと思うが、文字化けしている場合は、次節を参考に読み込み方法にオプションを追加せよ。

[演習5.6-1] 上記の例では、6行スキップしているが、これを3行や10行スキップに変更すると、どのような現象が起きるか。各自で表示を想像した後に実際に確かめてみよ。

5.7 データの各種属性を眺めてみよう

データの内容以外にも、データのサイズ(行数、列数)や変数名を確認してみましょう。 選手数が85名で、変量数が10個(No., Name, Position, …, height, weight, Tou, Da)のデータであることが判る。 電子化した際のデータが全て正確に読み込まれているか確認せよ。

dim(Drag24)         # データサイズの表示
## [1] 85 10
colnames(Drag24)    # 変量名の表示
##  [1] "No."      "Name"     "Position" "BoY"      "BoM"      "BoD"     
##  [7] "height"   "weight"   "Tou"      "Da"
## 基本情報を概観してみる
str(Drag24)      # データの内容を情報付きで表示(Structure)
## 'data.frame':    85 obs. of  10 variables:
##  $ No.     : int  7 11 12 13 14 16 17 18 19 20 ...
##  $ Name    : chr  "根尾 昂" "小笠原 慎之介" "田島 慎二" "橋本 侑樹" ...
##  $ Position: chr  "投手" "投手" "投手" "投手" ...
##  $ BoY     : int  2000 1997 1989 1998 2001 1989 1994 1996 2002 1986 ...
##  $ BoM     : int  4 10 12 1 11 10 4 10 8 6 ...
##  $ BoD     : int  19 8 21 8 21 21 22 24 9 21 ...
##  $ height  : int  177 180 181 180 182 189 180 187 186 185 ...
##  $ weight  : int  84 93 87 75 75 90 85 95 86 85 ...
##  $ Tou     : chr  "右" "左" "右" "左" ...
##  $ Da      : chr  "左" "左" "右" "左" ...

これらの結果から、85名、10変量のデータである。 各変量はそれぞれ、文字型(chr)か整数型(int)かが判る。 右側には例示もされている。

そこで、今度は読み込んだデータの一部を閲覧してみよう。 その際の指定方法は3.2節や3.3節で紹介したベクトルや行列の要素位置を明示的に指定する表記方法を用いて指定する。

Drag24[1,]        # 1人目だけの表示
##   No.     Name Position  BoY BoM BoD height weight Tou Da
## 1   7 根尾 昂     投手 2000   4  19    177     84  右 左
Drag24[5,]        # 5人目だけの表示
##   No.     Name Position  BoY BoM BoD height weight Tou Da
## 5  14 草加 勝     投手 2001  11  21    182     75  右 右
Drag24[1:10,]     # 先頭10人の選手を表示
##    No.           Name Position  BoY BoM BoD height weight Tou Da
## 1    7       根尾 昂     投手 2000   4  19    177     84  右 左
## 2   11 小笠原 慎之介     投手 1997  10   8    180     93  左 左
## 3   12     田島 慎二     投手 1989  12  21    181     87  右 右
## 4   13     橋本 侑樹     投手 1998   1   8    180     75  左 左
## 5   14       草加 勝     投手 2001  11  21    182     75  右 右
## 6   16       岩嵜 翔     投手 1989  10  21    189     90  右 右
## 7   17       柳 裕也     投手 1994   4  22    180     85  右 右
## 8   18     梅津 晃大     投手 1996  10  24    187     95  右 右
## 9   19     髙橋 宏斗     投手 2002   8   9    186     86  右 右
## 10  20     涌井 秀章     投手 1986   6  21    185     85  右 右
Drag24[20:30,]    # 20番目から30番目までの11人の選手を表示
##    No.         Name Position  BoY BoM BoD height weight Tou Da
## 20  41   勝野 昌慶     投手 1997   6  12    181     89  右 右
## 21  46   梅野 雄吾     投手 1999   1  13    175     84  右 右
## 22  47   砂田 毅樹     投手 1995   7  20    180     80  左 左
## 23  48   土生 翔太     投手 2001   3  10    180     93  右 右
## 24  50   清水 達也     投手 1999  11   3    184     90  右 右
## 25  54   藤嶋 健人     投手 1998   5   8    177     85  右 右
## 26  59   齋藤 綱記     投手 1996  12  18    182     91  左 左
## 27  64   福島 章太     投手 2002  10  24    177     92  左 左
## 28  67 上田 洸太朗     投手 2002   9   6    184     91  左 左
## 29  69 松木平 優太     投手 2003   2  24    178     78  右 右
## 30  90   松山 晋也     投手 2000   6  23    188     92  右 右
Drag24[,7]     # 身長を全員分表示(方法1)
##  [1] 177 180 181 180 182 189 180 187 186 185 184 183 178 177 177 175 181 181 179
## [20] 181 175 180 180 184 177 182 177 184 178 188 193 193 195 185 183 181 180 175
## [39] 175 181 166 180 171 184 180 186 181 168 181 180 176 185 180 184 177 184 175
## [58] 175 182 176 179 181 184 174 185 183 180 179 180 190 180 192 179 185 180 178
## [77] 180 183 180 182 173 176 178 180 190
Drag24$height  # 身長を全員分表示(方法2)
##  [1] 177 180 181 180 182 189 180 187 186 185 184 183 178 177 177 175 181 181 179
## [20] 181 175 180 180 184 177 182 177 184 178 188 193 193 195 185 183 181 180 175
## [39] 175 181 166 180 171 184 180 186 181 168 181 180 176 185 180 184 177 184 175
## [58] 175 182 176 179 181 184 174 185 183 180 179 180 190 180 192 179 185 180 178
## [77] 180 183 180 182 173 176 178 180 190

5.8. データファイルの漢字コードに注意

初回に説明したように、RやRStudioは、Windowsのみならず、MacやLinuxでも利用可能である。 プログラム自身はそのまま流用できるが、 データファイルの「漢字コードの違い」には注意が必要である。

各OSのデフォルトの漢字コードは以下のようになっている。

この違いは、データファイルをRから読み込む際に利用するread.csv()の利用時に 問題となることがある。データファイルの漢字コードを明示的に指定するには、 オプションである「fileEncoding=」を使って指定する必要がある。

●Macの場合: 想像だが「fileEncoding="utf8"」を指定しなくても読み込めるのではないか。

Drag24<-read.csv("Dragons24.csv", skip=6, header=TRUE, fileEncoding="utf8")

●Windowsの場合: 
5.3節で説明したように、RがデフォルトでUTF-8コードを用いることになったので、
csvファイルを作成する際に、UTF-8コードを指定しておけば、「fileEncoding=」を
指定しなくても読み込める。しかしもし、Shift-JISコードで保存した場合は、
以下の指定で読み込めると思われる。

Drag24<-read.csv("Dragons24.csv", skip=6, header=TRUE, fileEncoding="CP932")

このように漢字コードを陽に指定する必要がある場合があることを覚えておこう。


6. 初歩的な統計関数

データが準備できましたので、分析していきましょう。 まずは手始めに簡単な統計量から見ていきましょう。

6.1. 基礎統計量

summary(Drag24)         # 要約統計量(一気に全部を表示)
##       No.             Name             Position              BoY      
##  Min.   :  0.00   Length:85          Length:85          Min.   :1982  
##  1st Qu.: 25.00   Class :character   Class :character   1st Qu.:1993  
##  Median : 47.00   Mode  :character   Mode  :character   Median :1998  
##  Mean   : 71.33                                         Mean   :1997  
##  3rd Qu.: 92.00                                         3rd Qu.:2001  
##  Max.   :220.00                                         Max.   :2005  
##       BoM            BoD            height          weight      
##  Min.   : 1.0   Min.   : 1.00   Min.   :166.0   Min.   : 68.00  
##  1st Qu.: 4.0   1st Qu.: 8.00   1st Qu.:178.0   1st Qu.: 82.00  
##  Median : 6.0   Median :15.00   Median :180.0   Median : 86.00  
##  Mean   : 6.8   Mean   :15.41   Mean   :180.8   Mean   : 87.05  
##  3rd Qu.:10.0   3rd Qu.:22.00   3rd Qu.:184.0   3rd Qu.: 92.00  
##  Max.   :12.0   Max.   :31.00   Max.   :195.0   Max.   :111.00  
##      Tou                 Da           
##  Length:85          Length:85         
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
summary(Drag24$height)  # 要約統計量(指定した変量だけを表示)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   166.0   178.0   180.0   180.8   184.0   195.0
mean(Drag24$height)  # 平均値
## [1] 180.8353
sd(Drag24$height)    # 標準偏差
## [1] 5.105662
table(Drag24$Tou)    # 頻度表(投球腕)
## 
## 右 左 
## 64 21
table(Drag24$Da)     # 頻度表(打席)
## 
##   右   左 左右 
##   45   38    2
table(Drag24$Tou, Drag24$Da)   # 頻度表(2次元)
##     
##      右 左 左右
##   右 45 17    2
##   左  0 21    0

[演習6.1-1] 上記では、離散変量(投球腕、打席)の頻度を集計した。連続変量(身長、体重)の頻度を取るとどうなると予想されるか?

table(Drag24$height)
## 
## 166 168 171 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 
##   1   1   1   1   1   6   3   6   4   4  17   9   4   4   7   5   2   1   1   1 
## 190 192 193 195 
##   2   1   2   1

[答え] 連続変量の個々の値の頻度が表示される。 これは我々が求めている結果であろうか? もし、ある区切り幅の中に 含まれる人数を頻度として調べたいのであれば、 区切り幅を指定する必要がある。以下では165cmから5cm刻みで 195cmまでの各区間に含まれる頻度を表示している。

category_height<-cut(Drag24$height,
                     breaks=seq(165,195,5), right=FALSE)
table(category_height)
## category_height
## [165,170) [170,175) [175,180) [180,185) [185,190) [190,195) 
##         2         3        23        41        10         5

区間の左側が閉区間、右側が開区間になっているのが、 カッコの違いで理解できる。 デフォルトでは右側が閉区間になってしまうので、 「right=FALSE」を指定して、右側を開区間とすることを指定している。

[演習6.1-2] 試しに「right=FALSE」を外すとどのような頻度表になるかを各自で試してみよ。

6.2. 視覚的表現: 樹葉図、ヒストグラム、箱ひげ図

stem(Drag24$height)               # 樹葉図(Stem and Leaf)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   16 | 68
##   17 | 134
##   17 | 55555566677777788889999
##   18 | 00000000000000000111111111222233334444444
##   18 | 5555566789
##   19 | 00233
##   19 | 5

樹葉図は電車の時刻表のような表示形式である。 一の位の内容が目視できて便利に感じる。

ヒストグラムを描いてみる。

hist(Drag24$height)  # ヒストグラム

ヒストグラムを描く際に、何もオプションを指定していないと、 開始点や区間幅等はRが決めた値で描いてくれる。 しかし、Rはデフォルトで区間が<超える、以下>となっており、 日本で通常見られる<以上、未満>となっていない。 そこで、<以上、未満>となるように指定するために「right=FALSE」を指定しておく。 意味は右端を「未満」(開区間)にすることを指定している。

hist(Drag24$height, right=FALSE)  # ヒストグラム(右端が開区間)

もし、好みの開始点や区間幅にしたいのであれば、 こちらから陽に指定することもできる。 加えて、読み易さの観点から、点線を追記してある。 lty(点線, Line Typeか)にはいくつか種類があり、 補助線の場合は3番が適当ではないかと思っている(私見)。

hist(Drag24$height, breaks = seq(160,200,10), 
     ylim=c(0,50), right=FALSE)                # 区切りを指定
abline(h=seq(0,50,10), lty=3)                  # 点線を追記

[演習6.2-1] 点線の種類もいくつか用意されているので、各自でlty の数値を変えて好みの点線を見付けてみよ。

なお、点線の種類を試す際、より密度の濃い線を描画した後に、種類の異なる種類の点線を描画しても「上書き」となるため、点線の種類が判読できないことが起こる。よって、毎回ヒストグラムから描画し始める必要がある。

他にも分布形状を把握するのに便利な手法として箱ひげ図もある。

boxplot(Drag24$height)                   # 縦方向に箱ひげ図

横方向に伸びる箱ひげ図を表示したい場合は、「horizontal=TRUE」を指定する。なお、「TRUE」は真理値の「真」であり、デフォルトでは偽(FALSE)となっているため陽に指定する必要がある。また、それぞれは「T」、「F」と短縮して指定してもかまわない。

boxplot(Drag24$height, horizontal=TRUE)  # 横方向に箱ひげ図
abline(v=seq(170,195,5), lty=3)          # 点線を追記

[演習6.2-2] 一つ上の箱ひげ図(縦方向のもの)には、5cmごとの点線が無いため、各箇所の数値が読み取りづらい。下の箱ひげ図(横方向のもの)のように点線を追加するにはどのように指定すれば良いか各自考えて試してみよ。

6.3. 2次元のデータに対しては: 散布図、相関係数

plot(Drag24$height,Drag24$weight)  # 散布図
abline(v=seq(160,200,5),lty=3)     # 点線を追記
abline(h=seq(70,100,10),lty=3)     # 点線を追記

cor(Drag24$height, Drag24$weight)   # 相関係数
## [1] 0.6942279
setwd("D:/home_sub3/R_Dir")  # ホームディレクトリに移動(Set Working Directory)

【思い】Rには統計分析に有益な関数が準備されているので、それらを駆使して分析ができるようになってほしい。

7. プログラムの保存

ここまでSourceペインに入力してきた式は全体としてプログラムと呼ばれる。 いろいろな処理を手順を追って実行する命令群とも言える。 1行ずつ、もしくは複数行をまとめて実行することができることは 既に紹介した。 苦労して作成したものなので、保存しておこう。

RStudio画面の左上にある[File]-[Save] もしくは[Save As]と進んで 自分の希望の場所(ディレクトリ)に希望の名称(ファイル名)で保存せよ。 なお、ファイルの属性には「.R」が自動的に付けられる。 また、保存したプログラムは[File]-[Open File]で呼び出すことができる。

[演習7-1] 作成したプログラム(Sourceペイン)に好みのファイル名を付けて保存せよ。

  [例] DragonsPrg24.R

[演習7-2] 本日の講義では主に選手の「身長データ」について分析した。同様に体重データや誕生年等、自分の関心のある変量で分析してみよ。それらを通して、各関数の動作を確かめよ。

83. 参考

このページで取り扱ったプログラムだけを抜き出して以下に列挙しておく。


## 5.5. R側から読み込もう
setwd("D:/home_sub3/R_Dir")  # ホームディレクトリに移動(Set Working Directory)
getwd()                      # 現在のディレクトリを表示(Get Working Directory)
list.files()                 # ファイル名一覧
setwd("KougiDS24")           # ディレクトリを移動
list.files()                 # ファイル名一覧

## 5.6. 読み込んだデータの表示
Drag24<-read.csv("Dragons24.csv", skip=6, header=TRUE)  # CSVデータの読み込み
Drag24                                                  # データの表示

## 5.7 データの各種属性を眺めてみよう
dim(Drag24)         # データサイズの表示
colnames(Drag24)    # 変量名の表示

## 基本情報を概観してみる
str(Drag24)      # データの内容を情報付きで表示(Structure)

Drag24[1,]        # 1人目だけの表示
Drag24[5,]        # 5人目だけの表示

Drag24[1:10,]       # 先頭10人の選手を表示
Drag24[20:30,]      # 20番目から30番目までの11人の選手を表示

Drag24[seq(1,10),]  # 先頭10人の選手を表示(別表現)
Drag24[seq(20,30),] # 20番目から30番目までの11人の選手を表示(別表現)

Drag24[,7]     # 身長を全員分表示(方法1)
Drag24$height  # 身長を全員分表示(方法2)

## 6.1. 基礎統計量
summary(Drag24)         # 要約統計量(一気に全部を表示)
summary(Drag24$height)  # 要約統計量(指定した変量だけを表示)

mean(Drag24$height)  # 平均値
sd(Drag24$height)    # 標準偏差

table(Drag24$Tou)    # 頻度表(投球腕)
table(Drag24$Da)     # 頻度表(打席)
table(Drag24$Tou, Drag24$Da)   # 頻度表(2次元)

table(Drag24$height)

category_height<-cut(Drag24$height,
                     breaks=seq(165,195,5), right=FALSE)
table(category_height)

## 6.2. 視覚的表現: 樹葉図、ヒストグラム、箱ひげ図
stem(Drag24$height)               # 樹葉図(Stem and Leaf)

hist(Drag24$height, right=FALSE)  # ヒストグラム
hist(Drag24$height, breaks = seq(160,200,10), 
     ylim=c(0,50), right=FALSE)                # 区切りを指定
abline(h=seq(0,50,10), lty=3)                  # 点線を追記

boxplot(Drag24$height)                   # 縦方向に箱ひげ図
boxplot(Drag24$height, horizontal=TRUE)  # 横方向に箱ひげ図
abline(v=seq(170,190,5), lty=3)          # 点線を追記

## 6.3. 2次元のデータに対しては: 散布図、相関係数
plot(Drag24$height,Drag24$weight)  # 散布図
abline(v=seq(160,200,5),lty=3)     # 点線を追記
abline(h=seq(70,100,10),lty=3)     # 点線を追記

cor(Drag24$height,Drag24$weight)   # 相関係数

setwd("D:/home_sub3/R_Dir")  # ホームディレクトリに移動(Set Working Directory)