2009年06月12日

ピボットテーブルで度数分布表、ヒストグラムを作ってみた(グループ化を使って)/Excel/ピボットテーブル

Excelのピボットテーブルでヒストグラム(度数分布図)を作ってみます。
グループ化で値を区間(階級)でまとめてヒストグラムを作ります。
「グループ化」「データの無いアイテムの表示」「空白セルに表示する値」の機能を使います。
ヒストグラムについてはコチラの解説をご覧ください!

ピボットテーブルの作成
まず、こんな製品の検査データがあります。
20140505-001.JPG

まず、検査データとデータの件数(度数)のピボットテーブルを作成します。
値は製品bフデータの個数にします。
検査データのデータの個数でも同じピボットテーブルを作成できますが、後でグループ化する時に検査データを個数の集計にも使用しているとグループ化出来なくなってしまいます。
20140505-002.JPG

するとこんなピボットテーブルが出来上がります。
20140505-003.JPG

グループ化
ここから、度数分布表にするためにグループ化を使って検査データをある区間毎に分けてそこに含まれる製品の件数を集計します。
「ピボットテーブルツール」「オプション」から「グループフィールド」を選択します。
20140505-004.JPG

グループ化の画面が開きます。
先頭と、末尾は検査データの最小値と最大値が設定されています。
20140505-005.JPG

これでは、都合が悪いので
先頭の値:最小値より小さい“40”
末尾の値:最大値より大きい“61”
単位:区間の幅。後から変えられるので取り敢えずこのまま“1”
20140505-006.JPG

「OK」で区間間隔“1”の度数分布表が出来上がりました。
20140505-007.JPG

さてここでよく見ると、検査データの区間の“42-46”と“57-58”の部分が抜けてしまっています。
抜けいていると言うか、始めからその検査データが存在していなかったため、ピボットテーブルで集計されなかったのです。
ただ、ヒストグラムでは横軸の値の区間は連続していなければならないので、データが無かったのなら
“42-43”・・・“45-46”も“57-58”も“0”のデータが存在しないとヒストグラムは描けないのです。

んで、どうしたらいいかと言うと、「フィールドの設定」で “データの無いアイテムの表示” を行ったあと、「ピボットフィールドオプション」で “空白セルに表示する値” に “0” を指定します。

データの無いアイテムの表示
行ラベルの適当な所にカーソルを合わせて「ピボットテーブルツール」「オプション」から「フィールドの設定」を選択します。
20140506-01.JPG

「フィールドの設定」画面が開きます。
「レイアウトと印刷」タブから「データの無いアイテムを表示する」をチェックします。
20140506-02.JPG

「OK」すると、今まで抜けていたデータと “<40”、“>61” も表示されました。
が、データの個数は “0”
20140506-03.JPG

空白セルに“0”を表示する
次に、追加されたアイテムの値に “0” を表示させます。
行ラベルの適当な所にカーソルを合わせて「ピボットテーブルツール」「オプション」から「オプション」を選択します。
20140506-04.JPG

「ピボットテーブルオプション」画面が開きます。
「レイアウトと書式」タブから「空白セルに表示する値」にチェックを入れて、値に “0” を入力します。
20140506-05.JPG

「OK」でデータの個数“0”を含む度数分布表が作成されました。
20140506-06.JPG

ここから、ピボットグラフを作成するとヒストグラムの完成です。
20140506-07.JPG

ピボットテーブルを使うとグループ化の時に「データの区間」を変えて、分布の状況を確認できるためデータ分析ツールでヒストグラムを作るよりも簡単に適切なヒストグラムを作成できます。

次はヒストグラムのバラつきを分析するために層別のヒストグラムをつくってみます。
20150214_06.JPG


バックナンバー

関連ページ
統計分析の基本中の基本、度数分布表についてまとめてみた
数値データの分布をみるヒストグラムについてまとめてみた
ヒストグラムを層別にしてみると!?
データの無いアイテムを表示してみた
空白セルに“0”表示させてみた
データ分析ツールでヒストグラムを作ってみた


posted by haku1569 at 15:30| Excel ピボットテーブル | このブログの読者になる | 更新情報をチェックする
' + adSrc + '<' + '/body>'); d.close(); } loadAd(); window.setTimeout(loadAd, reloadSec * 1000); window.setTimeout(function() {adDiv.style.display = 'none'}, hideSec * 1000); }); }