度数分布(ヒストグラム) | package入門(rpnマイスター編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | package入門 | ポテンシャルを飛躍的に高めるrpnパッケージを学習。

HOME > 講座 > package入門 > rpnマイスター編 > 度数分布(ヒストグラム)

hatena twitter facebook rss ソーシャルブックマーク

度数分布(ヒストグラム)

 データの全体像を掴むために一番手っ取り早くて、一番信頼性の高い方法が度数分布でしょう。その度数分布を簡単に速く作ることができればいいですね。

ビジネス統計(基礎編)度数分布の詳しい説明をしていますが、本来は階級数や階級幅をどう決めるかに多少のセンスが必要です。もちろん、センスに頼らずに統計的に妥当な階級数・幅を見つける方法も基礎編で取り上げています。

しかし、階級数や幅はある程度自動で決めてもらっていいから、早くデータの分布状況を確認したいという要求があることも事実です。そこで、rpnマイスターパッケージではfreqとstemleafを用意しました。それぞれ微妙に利用方法が異なるのですが、freqは階級数が少なくて度数が多い場合、stemleafは階級数が多くて度数が少ない場合に適しています。

黒点数の度数分布

 具体的な例題で示したほうが分かりやすいでしょう。data.txtに309年間の黒点観測データがあるとします。データの並びを再掲します。

  1700 5
  1701 11
  1702 16
     :
  (中略)
     :
  2006 15.2
  2007 7.5
  2008 2.9


これらの黒点数の度数分布を作ります。まず、黒点数の小数点を切り捨てます(四捨五入でも構いません)。そして、整数になった黒点数の度数をカウントして度数分布を作ります。以下が度数分布を作るrpn式になります。

  >rpn x _ i <data.txt | rpn -c freq
  5 8
  11 8
  16 8
   :
  (中略)
   :
  145 1
  94 1
  119 1


先のrpn式で黒点数の小数を切り捨てたデータを、次のfreqプログラムに渡しています。freqは渡されたデータから度数分布を作っていきます。一番目の"5 8"は黒点数が5だった年が8回あったことを示しています。最後の"119 1"は黒点数が119だった年が1回です。ちなみに黒点数と度数の組み合わせはソートされていないので、注意してください。

この度数分布ですが、中略とあるように黒点数と度数の組み合わせが多くなります。以下のrpn式で行数をカウントしてみます。

  >rpn x _ i <data.txt | rpn -c freq | rpn -c count
  120


120もありますね。この度数分布の基本統計量はどうでしょうか。

  >rpn x _ i <data.txt | rpn -c freq | rpn -c statinfo
  デ ー タ        120     120
  最 小 値        0       1
  最 大 値        190     11
  範    囲        190     10
  合 計 値(Σ)    8321    309
  平 均 値(μ)    69.3417 2.575
  分 散 値(σ2)   2187.74 3.72771
  標準偏差(σ)    46.7733 1.93073
  分 散 値(s2)   2206.13 3.75903
  標準偏差(s)    46.9694 1.93882
  歪度(a3≒0)    0.436502        1.5707
  尖度(a4≒3)    2.24117 5.7322
  変動係数(ν)    0.677362        0.752941


度数の最小が1で、最大が11です。xypとnpdを使ってグラフにしてみましょう。

  >rpn x _ i <data.txt | rpn -c freq | xyp -x,190 -y,15 -s50 | npd
  度数
  ^ 15
  |        平均
  |         :
  |         :
  |        *:
  |         :
  |         :
  |***      :
  |*        : *
  |**       :  *
  | **  *** :*
  **  **** *:
  *  **  ***: * *  *** **
  | * *** * * ******  **         *     190
  |  * **  ***   ******************    * *
  +---------|----------|---------|-------> 黒点数


freqで度数分布にしたデータをxypに引き渡しています。xypはx軸を黒点数、y軸を度数としてグラフ化しています。グラフはそのままnpdに渡されて、多少の修飾(文字の追加・修正等)をしています。

分布図から黒点数が多くなるに従って、度数が急激に少なくなっていることが分かりますね。ちなみに、":"は全ての黒点数の平均です。度数分布から平均値を計算する場合は以下のrpn式になります。

  >rpn x _ i <data.txt | rpn -c freq | rpn * @s + #s -e @s 309 /
  49.3689


大体、50個です。階級と度数を掛けたものを合計して、全データ数の309で割って平均値を出しています。もちろん、単純に以下の方法でも構いません。こちらの方がより正確な平均値です。

  >rpn x _ <data.txt | rpn -c mean
  49.7521


全黒点数のデータをmeanプログラムに渡して、平均値を計算させています。

黒点数を丸めて再度、度数分布

 上の度数分布ですが、細かすぎて分からないという場合はfreqで度数分布を作る前に数値を丸めます。具体的には0から9までの数値を0に、10から19までの数値を10に丸めてしまいます。

この丸めた数値で再度、度数分布を作るとどうなるでしょうか。以下にそのrpn式を示します。

  >rpn x _ i 10 / i 10 * <data.txt | rpn -c freq
  0 46
  10 44
  20 32
  30 31
  50 13
  40 33
  60 33
  70 11
  120 4
  100 13
  80 13
  110 8
  90 10
  150 6
  130 6
  140 4
  190 1
  180 1


今度はあまり長くならずに表示できました。この度数分布表を眺めていても傾向がある程度分かりますが、一応xypでグラフにしてみましょう。度数分布からx軸の最大が190、y軸の最大が46であることが分かります。

  >rpn x _ i 10 / i 10 * <data.txt | rpn -c freq | xyp -x,190 -y,50 -s50,10 | npd
  度数
  ^ 50
  * *
  -        平均
  |         :
  |         :
  -   * * * : *
  |         :
  |         :
  -         :
  |         :
  |         :
  -         *   * *   *
  |         :       *   *
  |         :             * * * *      190
  |         :                         *  *
  +---------|----------|---------|-------> 黒点数


数値を丸めて度数分布図を作ったほうが分かりやすいですね。黒点数が増えると度数が急激に少なくなる傾向がはっきり分かると同時に黒点数が少ない0から9個、10個から19個の分布がとても多いことが、前の度数分布図よりもはっきりと分かりますね。

幹葉表示で一石二鳥

 freqによる度数分布作成は面倒な階級数や幅の検討を省略してくれますが、もっと楽な方法はないでしょうか。それがstemleafプログラムです。幹葉表示と言われる度数分布の表現法なのですが、詳しくはかんたんデータ分析講座シェア分析 part3にありますので、ここでは簡単に実行例だけを示します。

幹葉表示を発案したのはジョン・テューキー(1915~2000)です。テューキーは高速フーリエ変換(FFT)、探索的データ解析を開発。ルートグラム、箱髭図、10本の集計図を提案しています。
  >rpn x _ i <data.txt | rpn -c stemleaf
   0 | 0001112222333444455555555666666677778888889999
   1 | 00000011111111222223333344555556666666677789
   2 | 00001111222233444566667777889999
   3 | 0000012234444555566666777788899
   4 | 000001112233444555567777777777789
   5 | 2334444467899
   6 | 000112233333334444446666667788999
   7 | 00333477889
   8 | 0011233455589
   9 | 2223334568
   10 | 0011333445569
   11 | 11124589
   12 | 1245
   13 | 024689
   14 | 0125
   15 | 144579
   16 |
   17 |
   18 | 4
   19 | 0


黒点数が少ない年が圧倒的に多いこと、黒点数が多い年の割合は急激に少なくなっていることが一目瞭然です。黒点数が180を超えた年は309年間で僅かに2年だけということがすぐに分かります。

幹葉表示は、度数分布も分かる上に階級内でのデータ分布も垣間見ることができるので、一石二鳥の優れものですね。

情報freqは500階級数程度を目安に使用してください。

情報stemleafは500個の数値程度を目安に使用してください。

情報本講座で使用したプログラムは、rpnマイスターパッケージとして購入することができます。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

rpnマイスターパッケージ

マイスター

ユーティリティー

カレンダー

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS」を参照ください。

注意rpnの障害情報と対策はこちら