*&size(24){編集中!!};Excelによるデータソート・集計・グラフとRの初歩 [#nd39bdff] *Excelによるデータソート・集計・グラフとRの初歩 [#nd39bdff] #contents **第6回授業の獲得目標:&worried; [#pc1c64b6] -''1. エクセルによるデータの並び替え・集計・グラフ作成に習熟する'' -''2. Rの基本操作を習得する'' -''3.Rで「沢山のデータを一まとめにして扱う方法」を理解しよう'' -''4.Rでグラフを描いてみよう'' **エクセルによるデータの並び替え・集計・グラフ作成⌣ [#ef9281db] 前回の課題はもしかすると簡単すぎたのかもしれない。初回アンケートによると、高校でも、並び替え・集計・グラフの作成はやっている人が多いようだ。そこで、今回は、もう少し複雑なデータを使って、エクセルによるデータ並び替え・集計・グラフ作成という3つの基本操作に習熟してもらおう。 ***演習1: グループワーク(+出席確認フィードバック) [#s7707123] まずは、授業moodleページにある、演習1をやろう(でも、まだログインできていない人は、正面スクリーンの情報や、同じグループの人の画面をみてグループワークをやってほしい)。~ 下には、1986年から2006年までの、日本人の死亡要因の統計データが載っている。このデータをみて、どの死亡要因同士がお互いに相関(正の相関でも負の相関でも可)しているかを、2組考えてみよう。グループで相談して考えること。また、考えた結果を、授業moodleページの演習1から、各自が入力すること(データ送信をもって、出席確認とします。出席確認演習なので、授業時間内に、必ず各人が回答を送信すること)。 -[[厚生労働省統計表データベースシステム>http://wwwdbtk.mhlw.go.jp/toukei/cgi/sse_kensaku]]で公開されている、「1C 上巻 死亡 第5.12表_ 死因年次推移分類別にみた性別死亡数・率(人口10万対)」の表から、1986年以降の男女別死亡数のみ抜粋した表を使う。以下に、テキストとしてデータを添付しておく。 |性別|年|結核|悪性新生物|糖尿病|高血圧性疾患|心疾患|脳血管疾患|肺炎|慢性気管支炎及び肺気腫|喘息|胃潰瘍及び十二指腸潰瘍|肝疾患|腎不全|老衰|不慮の事故|交通事故|自殺|死亡者数総計|h |男|2005|1579|196603|7131|2145|83979|63657|57310|8525|1565|1897|11007|9463|6683|24591|7015|22236|584970| |男|2006|1517|198052|7268|2095|82811|61348|56572|8093|1290|1924|10909|9714|6872|23329|6258|21419|581370| |男|2004|1555|193096|6694|2066|77465|61547|51306|8164|1576|1920|10705|8806|6172|23667|7355|21955|557097| |女|2006|752|131262|6382|3715|90213|66920|50670|2455|1488|1479|5358|11444|20892|14941|2790|8502|503080| |男|2003|1615|186912|6709|2016|77989|63274|50614|8657|1846|2104|10703|8686|6288|23969|7565|23396|551746| |女|2005|717|129338|6490|3690|89146|69190|49931|2460|1633|1593|5423|11065|19677|15272|3013|8317|498826| |男|1999|2114|175817|6527|2376|73979|66452|49903|8451|2842|2250|11454|8309|6600|25551|9189|22402|534778| |男|2002|1584|184033|6631|2108|74986|62229|47033|8289|1872|2089|10532|8428|6209|24283|8171|21677|535305| |男|1994|2290|146896|5276|2824|78868|55510|46939|6777|3310|1956|12962|8374|7333|24082|10593|14058|476080| |男|2000|1876|179140|6489|2163|72156|63127|46722|8237|2300|2161|11068|8029|6017|25162|9072|21656|525903| |男|1993|2424|142222|4972|3117|88309|55279|45797|6241|3463|1965|13279|8425|7324|23397|10920|13540|476462| |男|2001|1715|181393|6368|2102|72727|63146|45756|8244|2086|2121|10911|8202|6094|24993|8698|21085|528768| |女|2003|722|122631|6170|3581|81556|68793|44328|2576|1855|1615|5034|10135|17161|14745|3348|8713|463205| |女|2004|775|127262|5943|3640|82160|67508|44228|2449|1707|1489|5180|10311|17954|14526|3196|8292|471505| |女|1999|821|114739|6287|4274|77100|72537|44091|2746|2559|1803|5131|9395|16229|14528|3922|9011|447253| |男|1998|1977|172306|6424|2360|71134|65529|42663|7471|2748|2131|11167|7731|6293|24984|9552|22349|512128| |男|1995|2267|159623|7107|3027|69718|69587|42419|8018|4052|2274|11576|7800|6684|28229|10772|14231|501276| |男|1992|2514|139674|4758|3174|86384|55431|42328|5952|3308|1917|13394|8123|7613|23606|11435|13516|465544| |男|1997|1955|167076|6295|2537|69776|65790|42314|7497|3027|2127|11377|7714|6384|25157|9824|15901|497796| |女|2002|733|120535|6004|3513|77532|68028|40388|2544|1899|1651|4958|9757|16473|14360|3572|8272|447074| |女|2000|780|116344|5814|3900|74585|69402|40216|2640|2173|1708|5011|9231|15196|14322|3785|8595|435750| |男|1991|2449|134475|4633|3410|83646|55740|39843|5955|3382|1970|13113|7641|7676|22879|11409|12477|450344| |女|2001|776|119265|5779|3755|75565|68710|39549|2700|1928|1765|4937|9488|16051|14503|3680|8290|441563| |男|1990|2745|130395|4491|3399|81774|57627|38596|5664|3412|1933|13256|7632|8054|22199|11481|12316|443718| |男|1996|2064|164824|6394|2613|68977|66479|38472|7195|3308|2087|11198|7488|6372|25485|10170|14853|488605| |女|1998|818|111615|6113|4356|71986|72290|37289|2684|2400|1740|4966|8907|15081|13941|3912|9406|424356| |女|1995|911|103399|7118|5195|69488|76965|37210|2959|3201|2040|5442|8387|14809|17094|4375|7189|420863| |女|1997|787|108337|6075|4347|70398|72907|36590|2700|2634|1749|5222|8901|15050|13729|4157|7593|415606| |女|1994|804|96774|5596|5114|80711|64729|36415|2435|2545|1722|6410|9002|16131|12033|4276|6865|399853| |女|1993|825|93485|5267|5243|91988|63515|35341|2299|2747|1715|6644|8732|15791|11320|4273|6976|402070| |男|1989|2676|127211|4399|3486|77901|56938|33470|5277|3302|1995|13138|7324|7877|21848|11464|12939|427114| |女|1996|794|106359|6444|4632|69252|73887|32499|2728|2687|1831|5319|8708|14506|13699|4173|7285|407606| |男|1988|2954|122015|4569|3892|78640|60832|32485|5230|3596|1992|13320|6983|8910|21358|10927|14290|428094| |女|1992|833|92243|5065|5514|89162|62627|31946|2220|2621|1664|6768|8822|15748|11071|4393|7377|391099| |女|1991|876|89252|5001|5673|85232|62708|30214|2227|2559|1717|6704|7919|15524|10276|4345|7398|379453| |女|1990|919|87018|4979|5847|83704|64317|29598|2170|2535|1682|6444|7943|16133|9923|4347|7772|376587| |男|1987|2959|119161|4261|4090|72566|58744|27930|4741|3485|2067|13053|6239|8658|20124|10225|15281|408094| |男|1986|3112|113589|4335|4555|72072|61832|26739|4825|3658|2297|13282|6099|9129|20480|10196|16499|406918| |女|1989|851|85414|4812|5785|78930|63714|25493|1954|2506|1670|6581|7529|15904|9201|4165|8186|361480| |女|1988|918|83455|5078|6366|79280|67863|24570|1987|2561|1696|6461|7241|17490|8854|3831|8505|364920| |女|1987|1063|80402|4873|6644|71343|64882|21083|1873|2552|1807|6233|6388|16616|8131|3537|8550|343078| |女|1986|1058|78065|4809|7134|70509|67457|20517|1908|2700|1930|6250|5958|17681|8130|3392|9168|343702| まずは、上のデータを使って、次の3つの演習をやってみよう。~ それぞれの演習の下の画像をクリックすると答えが表示されてしまうので、まずは、自分でやって考えてみよう。~ しばらくTAの新村さんと2人で教室内を巡回するので、わからないことは、どんどん質問するように。 ~ あと、分かっているとは思うけれど、上のテキストファイルをエクセルのシートに持って行く方法も考えてみよう。 ~ -''演習1'': 表の中で、肺炎による死亡数が最も多いのは、どちらの性別の何年のデータか?(ヒント:どれか1つの列をキーにして並べ替え)~ ~ &ref(授業/H23/情報処理/06/sort_.gif,60%); ~ ~ -''演習2'': 男女それぞれについて、不慮の事故による死亡数の総計を集計して答えなさい。(ヒント:どれか2つのキーで並べ替えてから集計)~ ~ &ref(授業/H23/情報処理/06/sum_1.gif,60%); ~ ~ -''演習3'':三代疾病による男女の死亡者数の合計の推移を1986年から2006年までグラフにしなさい。 ~ --並び替え:~ &ref(授業/H23/情報処理/06/#3_1.gif,60%); --集計:1~ &ref(授業/H23/情報処理/06/#3_2.gif,60%); --グラフにするデータの選択~ &ref(授業/H23/情報処理/06/#3_3.gif,60%); --グラフの表示~ &ref(授業/H23/情報処理/06/#3_4.gif,60%); ~ ~ -''発展演習'':以上の操作がいずれもできた人は、グラフの作成をRでやるにはどうすれば良いか、考えてみよう。 ***データの選択を個別に行って、グラフを自由に変更 [#cfbfefc1] 先ほど作ったグラフをクリックすると、画面が「デザイン」タブに移動する。ここで''データの選択''をクリックすれば、グラフに表示するデータを自由に追加・削除できる。 -グラフを選択して「データの選択」をクリック~ &ref(授業/H23/情報処理/06/graph_panel.GIF,60%); --左側のパネルが、グラフとして表示したいデータ(系列値)、右側のパネルが横軸に表示する値になる(項目軸ラベル) -新しいデータをグラフに表示したいときは、凡例項目で「追加」をクリック --例:男女それぞれで結核による死亡者数の推移をグラフにする ---性別(降順)、年(昇順)でソート ---男性の結核死亡者数だけを選択して、折れ線グラフ作成。横軸が年になっていないが気にしない~ &ref(授業/H23/情報処理/06/graph1.gif,60%); ---横軸(項目軸)の追加:グラフをクリックして、「データの選択」ウィンドウを表示~ 右側のパネルで「編集」をクリックし、「軸ラベルの範囲」に「年」を指定。~ &ref(授業/H23/情報処理/06/graph2.gif,60%); ---新しいデータ(系列値)の追加:「データの選択」ウィンドウで、~ 左側の「凡例項目(系列)」のパネルで、「追加」をクリック~ 系列名に「結核(女)」と入力~ 系列値に女性の結核死亡者数を選択して入力~ &ref(授業/H23/情報処理/06/graph3.gif,60%); ---男女それぞれの結核による死亡者数がグラフに表示された~ &ref(授業/H23/情報処理/06/graph4.gif,60%); ***セルの操作には関数を使おう! [#acd2b07a] エクセルの'関数'というはとても便利だ。たとえば、前々回の授業で使ったSUM()という関数は、()の範囲のセル中の値を合計してくれる。その他にも平均を出したければAVERAGE()という関数を使えばいいし、文字列の一部を抜き出したければLEFT()等の関数が使える。いろんな関数とその使い方は、ヘルプファイルに書かれているので見ておこう。~ よくつかう関数として、 average() round() countif() 注意:関数は非常に沢山あるので、全部覚えようなどと思う必要は無い。 こんなことができると知っていれば、使う時にヘルプを見れば良い! -''発展演習''(時間の余った人のみ): 上の表のデータから、3大疾病の新しい方から5年分のデータの平均を男女それぞれで計算して、棒グラフで表してみよう。 **Rの基本操作を理解しよう:⌣ [#t363445e] さて、けっこうたくさんの人がエクセルの操作はもう知っているらしいので、今回はちょっとマイクロソフトオフィスのソフトウェアからは離れて、実際に生物学の研究論文等のグラフ作成に使われるRを試してみよう。= Rはフリーの統計解析ソフトでとても有名なソフトで、使い方を覚えておくと、きっと今後の研究に役に立つ。 ***Rのインストール(大学では不要) [#nf57e8da] 数年前から大学の教育用端末に、Rがインスト−ルされているので、授業ではインストール作業は不要になった。~ おうちの自分のパソコンでRを使いたい場合、 -http://essrc.hyogo-u.ac.jp/cran/ か -http://cran.md.tsukuba.ac.jp/ か -http://cran.ism.ac.jp/ のいずれかにアクセスして、ダウンロードしてインストールする。Windows , Mac, Linuxのどれでも使える。 ***Rを起動する [#s90d89f3] では、スタートメニューから、Rを起動しよう。~ R起動すると~、画面が切り替わり、小さいウィンドウの中にいくつかのメッセージと、一番最後に、 > が表示される。%%%この">"をプロンプトと言う%%%。プロンプトの右側には通常、カーソルがあり、「このマークの後に何かコマンド(命令)を打ち込んでくださいよ」とあなたに促している。式を入力して、最後にenter(or returnキー)を押せば計算される。 ***Rによる簡単な数値計算: Rは関数電卓代わりに使える! ⌣ [#v6c5c343] 以下、Rを使った簡単な計算。プロンプト(>)から右の部分をコピーペーストすれば、計算できる。 > 4/3*pi*5^3 #半径5の球の体積 > pi #円周率が表示される(デフォルトでは小数点以下6桁まで) > (1+ 2 + 3 + 4 + 5 )/5 #式の間に半角スペースがいくつか入っても大丈夫 > 【ここでキーボードの上矢印(↑)を押す: 前に入力した命令を表示させることができる】 > (10 + 2 + 3 + 4 + 15 )/5 #前に入力した式が表示されるので、左矢印(←)でカーソルを動かし修正 -足し算・引き算のまとめ |演算子| 意味| 使用例|h | + | 足し算| > 4+3&br; [1] 7| | -| 引き算|> 4-3&br; [1] 1| | * | 掛け算|> 4*3&br;[1] 12| | / | 割り算|> 4/3&br; [1] 1.333333| | ^ | 累乗|> 4^3&br; [1] 64| | %/% | 整数商|> 7%/%3&br; [1] 2| | %% | 剰余|> 7%%3&br;[1] 1| ~ 授業で解説するRのコマンドを別ページにまとめておきます。 →&size(16){&color(green){ [[Rコマンド一覧>授業/H20/情報処理/R関数一覧]]};}; ***オブジェクトへの数値の代入 [#d327272f] Rでは、好きな名前をつけた''オブジェクト''("もの")に、数値や文字列などのデータを代入できます。オブジェクトには大文字小文字の区別があります。 > x = 3 #xに3という数字を代入した > X = 4 #Xに4という数字を代入した > x + X #xとXの足し算 (なお、#の後はコメント文と呼ばれ、処理には関係の無い説明を書いておける) なお、上では"="を使って数値を代入しましたが、 "<-"を使っても同じことができます。 > x <- 3 > X <- 4 > x+X (Rの代入はもともと "<- " だけだったが、比較的最近、 " = " も使えるようになった) ** Rで「沢山のデータを一まとめにして扱う方法」を理解しよう⌣ [#s6589757] みなさんは、沢山のデータを1まとめにして扱う方法をすでに知っている。 例えばエクセルを使った計算では、 |10.4|5.6|3.1| 6.4|21.7| という表を使ってデータを一まとめにし、sum()関数をつかったり、1つのセルに5を足すという計算結果を全部のセルにコピペして、全ての値に5ずつ0足した結果を得たりした。~ &ref(授業/H21/情報処理/09/#09_1.gif);~ ~ でも、Rのように、%%%命令文を1行ずつ入力%%%して計算するソフトウェアの場合、データを''まとめて''扱うにはどうすればいいだろうか?~ もちろん、下のように1行ずつ計算式を打ち込んでも答えはでるが、データの数が多くなると、面倒すぎる。~ (こんなやり方だと面倒くさい) > 10.4+5.6+3.1+6.4+21.7 > 10.4+5 > 5.6+5 ***Rでは、%%%データを横1行に並べて扱う%%%(これをベクトルという) [#wa637665] そこで、Rでは、たくさんのデータを一まとめにして扱うときには、%%%カンマで区切って横1行に並べて使う%%%。このようなデータの構造を''ベクトル''と呼ぶ。''ベクトル''とうと、高校の数学でやった「大きさと方向をもった量」を思い出すと思うが、 Rで使うベクトルは、同じ種類のデータに順番をつけて並べたもの と定義しておこう。これは、Rが沢山のデータをまとめて処理するために用いる、''データの構造''だ。例えば、~ (10.4, 5.6, 3.1, 6.4, 21.7) というデータの集まりは、%%%同じタイプのデータに順番をつけてひとまとめにしたものであり%%%、Rでいうところのベクトルだ。~ そして、Rでデータを一まとめにして使うときに必要なのが、''c()''という関数。 |SIZE(16):COLOR(red):''Rを使う上で、これだけは絶対に覚えておこう''| |SIZE(16):''Rでデータを一まとめにして扱うときには、 &color(blue){c( )}; という関数を使う''| ~ 例えば、上のデータを、x というオブジェクトに代入したいときには、 x=c(10.4, 5.6, 3.1, 6.4, 21.7) という命令を使う。上の命令を入力した後、「 x 」とだけ入力すると、xの内容が表示される。 > x [1] 10.4 5.6 3.1 6.4 21.7 上の結果に表示された[1]は何だろうか?これは、表示された行の最初の数字が、ベクトルの1番目の要素だということを意味している。では、次のようなベクトルをyに代入して、内容を表示させてみよう。 > y=c(1984,1985,1986,1987,1988,1989,1990,1991,1992,1993, 1994,1995,1996,1997,1998,1999,2000,2001) ウィンドウの大きさによって表示のされ方は異なるが、もし1行に収まらなければ、 > y [1] 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 [15] 1998 1999 2000 2001 というように、2行目の始まりに[15]というような数字が表示される。これは、2行目が15番目の要素から始まっていることを示している。~ 「ベクトル」とは、%%%同じタイプのデータに順番をつけて一まとめにしたもの%%%だった。では、一まとめの中から、例えば、「5番目の要素」だけを取り出すにはどうすればいいだろうか?勘のいい人はもう気づいているかもしれないが、~ > y[5] [1] 1988 と、オブジェクトの名前に順番を[]に入れたものをくっつける事で、目的の要素を取り出すことができる。 ***オブジェクトへのベクトルの代入 [#fdf1f251] では、Rで、沢山のデータを一まとめにして、いろいろ計算してみよう。 ~まずはおさらい。上で出てきた、 ''c()'' という関数を使って、オブジェクトにデータを代入でする。 > x=c(1,2,3,4,5,6,7) > entterキーを押しても何もおこらない?いえいえ。エラーメッセージが何も表示されず、新しいプロンプトが表示されたら大成功。~ (もし、上のようにならなかった人は、半角・全角の文字の違いとコンマやカッコに注意してもう一度やってみよう。) では、プロンプトの後に"x"と入力して、結果を見てみよう。 >x [1] 1 2 3 4 5 6 7 上の様に表示されれば「xというオブジェクトに(1,2,3,4,5,6,7)が代入されたことになる。では、このデータを対象に、統計解析の基本である平均値の計算を計算してみよう。 mean()という関数(meanは英語で平均値の意味)で一まとめにしたデータ(ベクトル)の平均値が計算できる。 命令の入力に自信の無い人は、下の囲みの中をコピー・ペースト。 >mean(x) [1] 4 平均値"4"が表示されれば大成功(これで、あなたがRを使って行う、初めての統計解析は、無事に成功した)~ では、数値をもう少し変えて、自分の好きな値で計算してみよう。。。 上で説明したように、キーボードの"↑"記号を何回か押してみると、 > x=c(1,2,3,4,5,6,7) と表示された。そしたら"←"と"Back space"などを使って、数値を好きに変更して、最後に"Enter"キーを押そう。 > x=c(1232,223.33,3 ,4 , 5666) 半角文字であるかぎり、別にスペースがいくつ入っていても大丈夫。入力したら、上と同じことをしてみると、 > x [1] 1232.00 223.33 3.00 4.00 5666.00 > mean(x) [1] 1425.666 これで、自分の好きな値を入力して、平均を計算することができた。 **Rでグラフを描いてみよう ⌣ [#pc0e3a7e] では、いよいよ、Rで簡単なグラフを描いてみよう。まずやらなければならないのは、 オブジェクトにデータを代入 することだ。そこで、先ほどエクセルで集計につかった表に戻って、年、結核、心疾患のそれぞれの男女別のデータを、それぞれ 年 を year に 結核・男 を m_k 結核・女 を f_k 心疾患・男 を m_h 心疾患・女 を f_h に代入しよう。 ***scan()によるデータの入力 [#q4b9d6a6] このとき、上でつかったc()という関数を使うのではなく、''scan()''という関数を使うと、エクセルからのコピーペーストで値をオブジェクトに代入できる。~ まず、1986-2006の年のデータをyearに入れるには、 > year = scan() #ここでEnterを押す 1: すると、「1:」という表示になるので、、エクセルのシートから1986から2006までのデータをペーストすると 1: 1986 2: 1987 3: 1988 4: 1989 5: 1990 6: 1991 7: 1992 8: 1993 9: 1994 10: 1995 11: 1996 12: 1997 13: 1998 14: 1999 15: 2000 16: 2001 17: 2002 18: 2003 19: 2004 20: 2005 21: 2006 22: #最後にEnterを押す これで21年分の年のデータが、yearに入った。試しに >year と入力してみよう。下のようになるはずだ。 [1] 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 [16] 2001 2002 2003 2004 2005 2006 ~ 同様にして、m_k, f_k, m_h, f_hについても値を入力しておこう。 ***グラフの作成 [#c56d3ed0] それでは最も基本的なグラフ作成関数である''plot()''を使ってみよう。操作は、以下のように入力するだけ。 >plot(year,m_k) 下のようなグラフが表示されただろうか?~ &ref(./#6_2.gif,30%); ~ 折れ線グラフにしたければ、こうやってみるといい。 > plot(year,m_k, type="l") ~ グラフにいろんな工夫をしたい場合は、 http://cse.naro.affrc.go.jp/takezawa/r-tips/r/48.html を読んでみよう。 -今回は簡単なグラフを点で作成しただけだが、線で結んだり、色をかえたり、いろんなことができる。下の参考資料を見て、いろいろと試してみよう。 --[[船尾さん>http://cse.naro.affrc.go.jp/takezawa/funao.html]]という方が書かれた詳しい説明です([[竹澤さんのホームページ>http://cse.naro.affrc.go.jp/takezawa/index2.html]]内にあります). ---HTML版: http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html ---PDF版: http://cse.naro.affrc.go.jp/takezawa/r-tips.pdf --[[R初心者のためのR操作ゼミ>http://www7.atwiki.jp/hayatoiijima/m/pages/34.html?guid=on#id_b78c54f1]] ***Rを一人で使う場合: 参考になる情報 [#c3b9a437] まず最初に参考書の紹介だが、Rには様々な参考書が出版されているので、どれか一冊を選んで買ってきて、随時参照しながら操作をするといいだろう。フリーのオンライン情報だけを使って使いたい人は、次のようにするといい。 1. Rの命令一覧が載っている説明書のPDF(上記)を画面に表示させる 2. Adobe Readerの検索機能を使って、行いたい処理を検索 3. 説明を読んで入力すべき命令文をコピー 4. Rにペーストして、値を編集して実行 こうやって、常に説明書を参照しながら操作すれば、命令を覚える必要は無い。 **課題はmoodleページから提出: 締切は6月5日正午 [#n2df1e02] **課題はmoodleページから提出: [#be5b919e]