Excelによるデータソート・集計・グラフとRの初歩

第6回授業の獲得目標: [worried]

  • 1. エクセルによるデータの並び替え・集計・グラフ作成に習熟する
  • 2. Rの基本操作を習得する
  • 3.Rで「沢山のデータを一まとめにして扱う方法」を理解しよう
  • 4.Rでグラフを描いてみよう

エクセルによるデータの並び替え・集計・グラフ作成 [smile]

前回の課題はもしかすると簡単すぎたのかもしれない。初回アンケートによると、高校でも、並び替え・集計・グラフの作成はやっている人が多いようだ。そこで、今回は、もう少し複雑なデータを使って、エクセルによるデータ並び替え・集計・グラフ作成という3つの基本操作に習熟してもらおう。

演習1: グループワーク(+出席確認フィードバック)

まずは、授業moodleページにある、演習1をやろう(でも、まだログインできていない人は、正面スクリーンの情報や、同じグループの人の画面をみてグループワークをやってほしい)。
下には、1986年から2006年までの、日本人の死亡要因の統計データが載っている。このデータをみて、どの死亡要因同士がお互いに相関(正の相関でも負の相関でも可)しているかを、2組考えてみよう。グループで相談して考えること。また、考えた結果を、授業moodleページの演習1から、各自が入力すること(データ送信をもって、出席確認とします。出席確認演習なので、授業時間内に、必ず各人が回答を送信すること)。

  • 厚生労働省統計表データベースシステムで公開されている、「1C 上巻 死亡 第5.12表_ 死因年次推移分類別にみた性別死亡数・率(人口10万対)」の表から、1986年以降の男女別死亡数のみ抜粋した表を使う。以下に、テキストとしてデータを添付しておく。
性別結核悪性新生物糖尿病高血圧性疾患心疾患脳血管疾患肺炎慢性気管支炎及び肺気腫喘息胃潰瘍及び十二指腸潰瘍肝疾患腎不全老衰不慮の事故交通事故自殺死亡者数総計
2005157919660371312145839796365757310852515651897110079463668324591701522236584970
2006151719805272682095828116134856572809312901924109099714687223329625821419581370
2004155519309666942066774656154751306816415761920107058806617223667735521955557097
200675213126263823715902136692050670245514881479535811444208921494127908502503080
2003161518691267092016779896327450614865718462104107038686628823969756523396551746
200571712933864903690891466919049931246016331593542311065196771527230138317498826
1999211417581765272376739796645249903845128422250114548309660025551918922402534778
2002158418403366312108749866222947033828918722089105328428620924283817121677535305
19942290146896527628247886855510469396777331019561296283747333240821059314058476080
2000187617914064892163721566312746722823723002161110688029601725162907221656525903
19932424142222497231178830955279457976241346319651327984257324233971092013540476462
2001171518139363682102727276314645756824420862121109118202609424993869821085528768
200372212263161703581815566879344328257618551615503410135171611474533488713463205
200477512726259433640821606750844228244917071489518010311179541452631968292471505
19998211147396287427477100725374409127462559180351319395162291452839229011447253
1998197717230664242360711346552942663747127482131111677731629324984955222349512128
19952267159623710730276971869587424198018405222741157678006684282291077214231501276
19922514139674475831748638455431423285952330819171339481237613236061143513516465544
1997195516707662952537697766579042314749730272127113777714638425157982415901497796
20027331205356004351377532680284038825441899165149589757164731436035728272447074
20007801163445814390074585694024021626402173170850119231151961432237858595435750
19912449134475463334108364655740398435955338219701311376417676228791140912477450344
20017761192655779375575565687103954927001928176549379488160511450336808290441563
19902745130395449133998177457627385965664341219331325676328054221991148112316443718
19962064164824639426136897766479384727195330820871119874886372254851017014853488605
19988181116156113435671986722903728926842400174049668907150811394139129406424356
19959111033997118519569488769653721029593201204054428387148091709443757189420863
19977871083376075434770398729073659027002634174952228901150501372941577593415606
1994804967745596511480711647293641524352545172264109002161311203342766865399853
1993825934855267524391988635153534122992747171566448732157911132042736976402070
19892676127211439934867790156938334705277330219951313873247877218481146412939427114
19967941063596444463269252738873249927282687183153198708145061369941737285407606
19882954122015456938927864060832324855230359619921332069838910213581092714290428094
1992833922435065551489162626273194622202621166467688822157481107143937377391099
1991876892525001567385232627083021422272559171767047919155241027643457398379453
199091987018497958478370464317295982170253516826444794316133992343477772376587
19872959119161426140907256658744279304741348520671305362398658201241022515281408094
19863112113589433545557207261832267394825365822971328260999129204801019616499406918
198985185414481257857893063714254931954250616706581752915904920141658186361480
198891883455507863667928067863245701987256116966461724117490885438318505364920
1987106380402487366447134364882210831873255218076233638816616813135378550343078
1986105878065480971347050967457205171908270019306250595817681813033929168343702

まずは、上のデータを使って、次の3つの演習をやってみよう。
それぞれの演習の下の画像をクリックすると答えが表示されてしまうので、まずは、自分でやって考えてみよう。
しばらくTAの新村さんと2人で教室内を巡回するので、わからないことは、どんどん質問するように。
あと、分かっているとは思うけれど、上のテキストファイルをエクセルのシートに持って行く方法も考えてみよう。

  • 演習1: 表の中で、肺炎による死亡数が最も多いのは、どちらの性別の何年のデータか?(ヒント:どれか1つの列をキーにして並べ替え)

    sort_.gif

  • 演習2: 男女それぞれについて、不慮の事故による死亡数の総計を集計して答えなさい。(ヒント:どれか2つのキーで並べ替えてから集計)

    sum_1.gif

  • 演習3:三代疾病による男女の死亡者数の合計の推移を1986年から2006年までグラフにしなさい。
    • 並び替え:
      #3_1.gif
    • 集計:1
      #3_2.gif
    • グラフにするデータの選択
      #3_3.gif
    • グラフの表示
      #3_4.gif

  • 発展演習:以上の操作がいずれもできた人は、グラフの作成をRでやるにはどうすれば良いか、考えてみよう。

データの選択を個別に行って、グラフを自由に変更

先ほど作ったグラフをクリックすると、画面が「デザイン」タブに移動する。ここでデータの選択をクリックすれば、グラフに表示するデータを自由に追加・削除できる。

  • グラフを選択して「データの選択」をクリック
    graph_panel.GIF
    • 左側のパネルが、グラフとして表示したいデータ(系列値)、右側のパネルが横軸に表示する値になる(項目軸ラベル)
  • 新しいデータをグラフに表示したいときは、凡例項目で「追加」をクリック
    • 例:男女それぞれで結核による死亡者数の推移をグラフにする
      • 性別(降順)、年(昇順)でソート
      • 男性の結核死亡者数だけを選択して、折れ線グラフ作成。横軸が年になっていないが気にしない
        graph1.gif
      • 横軸(項目軸)の追加:グラフをクリックして、「データの選択」ウィンドウを表示
        右側のパネルで「編集」をクリックし、「軸ラベルの範囲」に「年」を指定。
        graph2.gif
      • 新しいデータ(系列値)の追加:「データの選択」ウィンドウで、
        左側の「凡例項目(系列)」のパネルで、「追加」をクリック
        系列名に「結核(女)」と入力
        系列値に女性の結核死亡者数を選択して入力
        graph3.gif
      • 男女それぞれの結核による死亡者数がグラフに表示された
        graph4.gif

セルの操作には関数を使おう!

エクセルの'関数'というはとても便利だ。たとえば、前々回の授業で使ったSUM()という関数は、()の範囲のセル中の値を合計してくれる。その他にも平均を出したければAVERAGE()という関数を使えばいいし、文字列の一部を抜き出したければLEFT()等の関数が使える。いろんな関数とその使い方は、ヘルプファイルに書かれているので見ておこう。
よくつかう関数として、

average()
round()
countif()

注意:関数は非常に沢山あるので、全部覚えようなどと思う必要は無い。
      こんなことができると知っていれば、使う時にヘルプを見れば良い!
  • 発展演習(時間の余った人のみ): 上の表のデータから、3大疾病の新しい方から5年分のデータの平均を男女それぞれで計算して、棒グラフで表してみよう。

Rの基本操作を理解しよう: [smile]

さて、けっこうたくさんの人がエクセルの操作はもう知っているらしいので、今回はちょっとマイクロソフトオフィスのソフトウェアからは離れて、実際に生物学の研究論文等のグラフ作成に使われるRを試してみよう。= Rはフリーの統計解析ソフトでとても有名なソフトで、使い方を覚えておくと、きっと今後の研究に役に立つ。

Rのインストール(大学では不要)

数年前から大学の教育用端末に、Rがインスト−ルされているので、授業ではインストール作業は不要になった。
おうちの自分のパソコンでRを使いたい場合、

のいずれかにアクセスして、ダウンロードしてインストールする。Windows , Mac, Linuxのどれでも使える。

Rを起動する

では、スタートメニューから、Rを起動しよう。
R起動すると~、画面が切り替わり、小さいウィンドウの中にいくつかのメッセージと、一番最後に、

>

が表示される。この">"をプロンプトと言う。プロンプトの右側には通常、カーソルがあり、「このマークの後に何かコマンド(命令)を打ち込んでくださいよ」とあなたに促している。式を入力して、最後にenter(or returnキー)を押せば計算される。

Rによる簡単な数値計算: Rは関数電卓代わりに使える! [smile]

以下、Rを使った簡単な計算。プロンプト(>)から右の部分をコピーペーストすれば、計算できる。

> 4/3*pi*5^3  #半径5の球の体積

> pi  #円周率が表示される(デフォルトでは小数点以下6桁まで)

> (1+ 2 +  3   +    4     +    5    )/5   #式の間に半角スペースがいくつか入っても大丈夫

> 【ここでキーボードの上矢印(↑)を押す: 前に入力した命令を表示させることができる】

> (10 + 2 +  3   +  4 + 15 )/5   #前に入力した式が表示されるので、左矢印(←)でカーソルを動かし修正
  • 足し算・引き算のまとめ
    演算子意味使用例
    +足し算> 4+3
    [1] 7
    -引き算> 4-3
    [1] 1
    *掛け算> 4*3
    [1] 12
    /割り算> 4/3
    [1] 1.333333
    ^累乗> 4^3
    [1] 64
    %/%整数商> 7%/%3
    [1] 2
    %%剰余> 7%%3
    [1] 1

    授業で解説するRのコマンドを別ページにまとめておきます。 → Rコマンド一覧

オブジェクトへの数値の代入

Rでは、好きな名前をつけたオブジェクト("もの")に、数値や文字列などのデータを代入できます。オブジェクトには大文字小文字の区別があります。

> x = 3  #xに3という数字を代入した
> X = 4  #Xに4という数字を代入した
> x + X #xとXの足し算   (なお、#の後はコメント文と呼ばれ、処理には関係の無い説明を書いておける)

なお、上では"="を使って数値を代入しましたが、 "<-"を使っても同じことができます。

> x <- 3
> X <- 4
> x+X

(Rの代入はもともと "<- " だけだったが、比較的最近、 " = " も使えるようになった)

Rで「沢山のデータを一まとめにして扱う方法」を理解しよう [smile]

みなさんは、沢山のデータを1まとめにして扱う方法をすでに知っている。 例えばエクセルを使った計算では、

10.45.63.16.421.7

という表を使ってデータを一まとめにし、sum()関数をつかったり、1つのセルに5を足すという計算結果を全部のセルにコピペして、全ての値に5ずつ0足した結果を得たりした。
#09_1.gif

でも、Rのように、命令文を1行ずつ入力して計算するソフトウェアの場合、データをまとめて扱うにはどうすればいいだろうか?
もちろん、下のように1行ずつ計算式を打ち込んでも答えはでるが、データの数が多くなると、面倒すぎる。

(こんなやり方だと面倒くさい)
> 10.4+5.6+3.1+6.4+21.7
> 10.4+5
> 5.6+5

Rでは、データを横1行に並べて扱う(これをベクトルという)

そこで、Rでは、たくさんのデータを一まとめにして扱うときには、カンマで区切って横1行に並べて使う。このようなデータの構造をベクトルと呼ぶ。ベクトルとうと、高校の数学でやった「大きさと方向をもった量」を思い出すと思うが、

Rで使うベクトルは、同じ種類のデータに順番をつけて並べたもの

と定義しておこう。これは、Rが沢山のデータをまとめて処理するために用いる、データの構造だ。例えば、

(10.4, 5.6, 3.1, 6.4, 21.7)

というデータの集まりは、同じタイプのデータに順番をつけてひとまとめにしたものであり、Rでいうところのベクトルだ。
そして、Rでデータを一まとめにして使うときに必要なのが、c()という関数。

Rを使う上で、これだけは絶対に覚えておこう
Rでデータを一まとめにして扱うときには、 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

と、オブジェクトの名前に順番を[]に入れたものをくっつける事で、目的の要素を取り出すことができる。

オブジェクトへのベクトルの代入

では、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でグラフを描いてみよう [smile]

では、いよいよ、Rで簡単なグラフを描いてみよう。まずやらなければならないのは、

オブジェクトにデータを代入

することだ。そこで、先ほどエクセルで集計につかった表に戻って、年、結核、心疾患のそれぞれの男女別のデータを、それぞれ

年 を year に
結核・男 を m_k
結核・女 を f_k
心疾患・男 を m_h
心疾患・女 を f_h

に代入しよう。

scan()によるデータの入力

このとき、上でつかった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についても値を入力しておこう。

グラフの作成

それでは最も基本的なグラフ作成関数であるplot()を使ってみよう。操作は、以下のように入力するだけ。

>plot(year,m_k)

下のようなグラフが表示されただろうか?
&ref(): File not found: "#6_2.gif" at page "授業/H26/情報処理/07";
折れ線グラフにしたければ、こうやってみるといい。

> plot(year,m_k, type="l")


グラフにいろんな工夫をしたい場合は、 http://cse.naro.affrc.go.jp/takezawa/r-tips/r/48.html を読んでみよう。

Rを一人で使う場合: 参考になる情報

まず最初に参考書の紹介だが、Rには様々な参考書が出版されているので、どれか一冊を選んで買ってきて、随時参照しながら操作をするといいだろう。フリーのオンライン情報だけを使って使いたい人は、次のようにするといい。

1. Rの命令一覧が載っている説明書のPDF(上記)を画面に表示させる
2. Adobe Readerの検索機能を使って、行いたい処理を検索
3. 説明を読んで入力すべき命令文をコピー
4. Rにペーストして、値を編集して実行

こうやって、常に説明書を参照しながら操作すれば、命令を覚える必要は無い。

課題はmoodleページから提出: 


Last-modified: 2015-05-13 (水) 16:46:08 (3321d)