R と Excel 度数分布表 ・ ヒストグラム
データ分析の基本である、ヒストグラムと度数分布表について、Rとエクセルで比較してみましょう。
度数分布表 と ヒストグラム
度数分布表とは、データを区間(階級)に分けて、それぞれ何個ずつあるかをカウントしてまとめたものです。ヒストグラムとは、その個数や回数などの度数をグラフで表現したものです。表やグラフにまとめると、どのようなデータがどのくらいの回数や頻度で現れるかを把握しやすくなり、データの分布や特徴を理解しやすくなります。例では、RのデータセットairqualityのOzoneデータを使いました。
度数分布表
度数分布表の例です。区間(0〜20、20〜40、・・・)に分けて、その区間ごとの個数をカウントしています。Excel(Libre Office)。
ヒストグラム
度数分布表に対応したグラフです。全体像や特徴がひと目でわかります。R。
度数分布表
度数分布表のデータ
データは、RのデータセットairqualityのOzoneデータを使いました。まずはじめに、complete.cases
関数で、NAを除去しました。その後、Ozone列のデータだけを選びました。ファイルに保存して使うと便利です。Excelに取り込むのも簡単です。例では、write.table
関数で、タブ区切りのファイルとして保存しています。
R起動 > data <- subset(airquality, complete.cases(airquality)) > data$Ozone 41 36 12 18 23 19 8 16 11 14 18 14 34 6 30 11 1 11 4 32 23 45 115 37 29 71 39 23 21 37 20 12 13 135 49 32 64 40 77 97 97 85 10 27 7 48 35 61 79 63 16 80 108 20 52 82 50 64 59 39 9 16 122 89 110 44 28 65 22 59 23 31 44 21 9 45 168 73 76 118 84 85 96 78 73 91 47 32 20 23 21 24 44 21 28 9 13 46 18 13 24 16 13 23 36 7 14 30 14 18 20 > write.table("data.tsv", data$Ozone, sep="\t", quote=F)
Excel 度数分布表
Excelで度数分布表を作成するには、countifs
関数を使います。指定した範囲のデータについて、与えた条件を満たす場合にカウントします。1つしか条件を指定できないcountif
関数と違って、countifs
関数では複数の条件を指定できるので、「○○より大きくて〜○○以下」というような、範囲内のカウントが指定しやすくなりました。例えば、「0〜20」の区間をカウントするには、セルの値が0より大きい・セルの値が20以下という2つの条件を指定します。条件指定は文字列なので、条件式を「””」(ダブルクォーテーション)で囲みます。
=COUNTIFS(範囲, ">0", 範囲, "<=20")
ひと工夫して、区間を簡単に変更できるようにすると便利です。先の例では、条件を「”>0″」のように直接書き込みましたが、「0」や「20」といった区間の指定をセルの値の参照で行えるようにします。すると、区間の変更時に条件式を1つずつ修正しなくても、セルの値を変更すれば度数分布表の集計内容を変更することができるようになります。セルの値を使う場合は、&
で条件式とセル名を連結します。&
記号は、文字列の連結を意味します。「”>”&D1」と書いた場合は、「”>D1セルの値”」と指定したことになります。
=COUNTIFS(範囲, ">"&D1, 範囲, "<="&F1)
R 度数分布データ
Rで度数分布データを得るするには、hist
関数を使います。hist
関数を実行したら直ぐにグラフが表示されますが、戻り値を取得することで度数分布のデータを確認することができます。
R起動 > data <- subset(airquality, complete.cases(airquality)) > ret <- hist(data$Ozone) > ret $breaks [1] 0 20 40 60 80 100 120 140 160 180 $counts [1] 36 32 14 13 9 4 2 0 1 $density [1] 0.0162162162 0.0144144144 0.0063063063 0.0058558559 0.0040540541 [6] 0.0018018018 0.0009009009 0.0000000000 0.0004504505 $mids [1] 10 30 50 70 90 110 130 150 170 $xname [1] "data$Ozone"
hist
関数の戻り値をretに代入し、retの内容を表示しています。主な値は、breaks(区間)、counts(区間での個数)です。
ヒストグラム
Excel ヒストグラム
Excelでヒストグラムを作成するには、作成した度数分布表のデータを選んで、メニューの「挿入」から縦棒グラフ
を選択します。ラベルなどを調整してグラフができたら、棒グラフの間隔をせまくして見た目を良くしましょう。以下の手順で、きれいなヒストグラムを作成することができます。Libre Officeの画面ですが、Excelでも同様の設定ができます。
・グラフを選択し、データ(系列)の上で右クリック、「データ系列の書式設定」を選ぶ。
・「要素の間隔」に0を代入。
・必要に応じて、枠線の色などを調整。
完成したら、このような感じです。
R ヒストグラム
Rでヒストグラムを作成するには、hist
関数を使います。Rでhist
関数を呼び出すと、すぐに別Windowでヒストグラムが表示されます。ヒストグラムをPNG形式の画像で保存するには、png
関数と一緒に使います。グラフの描画処理が終わったら、dev.off
関数で出力デバイスを閉じます。def.off
を忘れると、正しく保存されないので注意しましょう。
R起動 > data <- subset(airquality, complete.cases(airquality)) > ret <- hist(data$Ozone) > png("hist.png") > hist(data$Ozone) > dev.off()