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()

スポンサーリンク