Main Content

カテゴリカル ヒストグラムの表示の制御

この例では、histogram を使用して categorical データを効果的に表示する方法を説明します。名前と値のペア 'NumDisplayBins''DisplayOrder'、および 'ShowOthers' を使用することにより、カテゴリカル ヒストグラムの表示を変更できます。これらのオプションは、データをより適切に整理してプロットでのノイズを減らすのに役立ちます。

カテゴリカル ヒストグラムの作成

サンプル ファイル outages.csv には、米国における電力会社の停電を表すデータが含まれています。このファイルには、RegionOutageTimeLossCustomersRestorationTime、および Cause の 6 つの列があります。

outages.csv ファイルを table として読み取ります。'Format' オプションを使用して、各列に含まれるデータの種類を categorical ('%C')、浮動小数点数値 ('%f')、または datetime ('%D') で指定します。最初の数行のデータにインデックスを指定して、変数を確認します。

data_formats = '%C%D%f%f%D%C';
C = readtable('outages.csv','Format',data_formats);
first_few_rows = C(1:10,:)
first_few_rows=10×6 table
     Region         OutageTime        Loss     Customers     RestorationTime          Cause     
    _________    ________________    ______    __________    ________________    _______________

    SouthWest    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    SouthEast    2003-01-23 00:49    530.14    2.1204e+05                 NaT    winter storm   
    SouthEast    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    West         2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    MidWest      2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    severe storm   
    West         2003-06-18 02:49         0             0    2003-06-18 10:54    attack         
    West         2004-06-20 14:39    231.29           NaN    2004-06-20 19:16    equipment fault
    West         2002-06-06 19:28    311.86           NaN    2002-06-07 00:51    equipment fault
    NorthEast    2003-07-16 16:23    239.93         49434    2003-07-17 01:12    fire           
    MidWest      2004-09-27 11:09    286.72         66104    2004-09-27 16:37    equipment fault

変数 Cause のカテゴリカル ヒストグラムをプロットします。histogram オブジェクトのハンドルを返す出力引数を指定します。

h = histogram(C.Cause);
xlabel('Cause of Outage')
ylabel('Frequency')
title('Most Common Power Outage Causes')

ヒストグラムの正規化を 'probability' 正規化を使用するように変更し、それぞれの停電の原因の相対頻度を表示します。

h.Normalization = 'probability';
ylabel('Relative Frequency')

表示順序の変更

'DisplayOrder' オプションを使用して、ビンを最大からから最小の順に並べ替えます。

h.DisplayOrder = 'descend';

表示されるバーの数に切り捨て

'NumDisplayBins' オプションを使用して、プロットに 3 本のバーのみを表示します。非表示のデータもそのまま正規化で考慮されるため、表示されている確率を足しても 1 ではなくなります。

h.NumDisplayBins = 3;

除外データの集計

'ShowOthers' オプションを使用して、除外されたすべてのバーを集計します。これにより、表示されている確率を足したものが再度 1 になります。

h.ShowOthers = 'on';

表示データへの正規化の制限

R2017a より前は、関数 histogram および関数 histcounts によって、正規化の計算に "ビン化" されたデータのみが使用されていました。この動作は、データの一部がビンの範囲から外れた場合、正規化の目的では無視されていたことを意味します。しかし、MATLAB® R2017a では動作が変更され、常に入力データの要素の総数を使用して正規化されるようになりました。新しい動作はより直感的ですが、以前の動作の方が望ましい場合は、いくつかの特別な手順を実行して、正規化をビン化されたデータのみに制限する必要があります。

入力データすべてを対象として正規化するのではなく、確率の正規化の対象を、ヒストグラムに表示されているデータに制限することができます。単純に histogram オブジェクトの Data プロパティを更新して、他のカテゴリを削除します。Categories プロパティには、ヒストグラムに表示されるカテゴリが反映されます。setdiff を使用して 2 つのプロパティ値を比較し、Categories 内にないカテゴリを Data から削除します。この結果による undefined の categorical 要素をすべてデータから削除し、表示されるカテゴリの要素のみを残します。

h.ShowOthers = 'off';
cats_to_remove = setdiff(categories(h.Data),h.Categories);
h.Data = removecats(h.Data,cats_to_remove);
h.Data = rmmissing(h.Data);

3 つの残されたカテゴリのみに基づいて正規化されるようになったため、3 つのバーを足したものが 1 になります。

参考

| |