Main Content

tall 配列のヒストグラム

この例では、histogram および histogram2 を使用して、tall 配列に含まれるデータを解析および可視化する方法を説明します。

tall テーブルの作成

airlinesmall.csv データ セットを使用してデータストアを作成します。'NA' 値を欠損データとして処理し、NaN 値と置き換えます。使用する変数のサブセットを選択します。データストアを tall table に変換します。

varnames = {'ArrDelay', 'DepDelay', 'Year', 'Month'};
ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ...
    'SelectedVariableNames', varnames);
T = tall(ds)
T =

  Mx4 tall table

    ArrDelay    DepDelay    Year    Month
    ________    ________    ____    _____

        8          12       1987     10  
        8           1       1987     10  
       21          20       1987     10  
       13          12       1987     10  
        4          -1       1987     10  
       59          63       1987     10  
        3          -2       1987     10  
       11          -1       1987     10  
       :           :         :        :
       :           :         :        :

到着遅延時間のヒストグラムのプロット

到着遅延時間の頻度の分布を調べるために、変数 ArrDelay のヒストグラムをプロットします。

h = histogram(T.ArrDelay);
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.79 sec
- Pass 2 of 2: Completed in 0.35 sec
Evaluation completed in 1.6 sec
title('Flight arrival delays, 1987 - 2008')
xlabel('Arrival Delay (minutes)')
ylabel('Frequency')

到着遅延時間は、0 に近い小さな数値の頻度が最も高く、それらの値がプロットの大半を占めるため、その他の詳細部分が確認しにくくなっています。

ヒストグラムのビンの範囲の調整

-50 ~ 150 分の間の到着遅延時間のみをプロットするようにヒストグラムのビンの範囲を制限します。tall 配列から histogram オブジェクトを作成した後は、BinWidthBinLimits など、ビンの再計算が必要となるプロパティは変更できません。また、morebinsfewerbins を使用してビン数を調整することもできません。このような場合には、histogram を使用して tall 配列の生データからヒストグラムを再作成します。

figure
histogram(T.ArrDelay,'BinLimits',[-50,150])
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.55 sec
- Pass 2 of 2: Completed in 0.4 sec
Evaluation completed in 1.3 sec
title('Flight arrival delays between -50 and 150 minutes, 1987 - 2008')
xlabel('Arrival Delay (minutes)')
ylabel('Frequency')

このプロットでは、長時間の遅延の頻度が当初の予想よりも高い可能性があります。さらに詳しく調べるために、1 時間以上の到着遅延時間の確率を求めます。

1 時間以上の遅延の確率

元のヒストグラムが返した h オブジェクトでは、Values プロパティにビンの値が、BinEdges プロパティにビンのエッジが含まれています。これらのプロパティを使用することで、インメモリ計算を実行できます。

どのビンに 1 時間 (60 分) 以上の到着遅延時間が含まれているかを見つけます。論理インデックス ベクトルから最後のビンのエッジを削除して、ビン値のベクトルと同じ長さにします。

idx = h.BinEdges >= 60;
idx(end) = [];

選択した各ビンに関連付けられている値を取得するには、idx を使用します。ビンの値を合計して総サンプル数で除算し、100 を乗算して、1 時間以上の遅延全体の確率を求めます。サンプルの合計数は元のデータ セットから計算しているため、gather を使用して計算を明示的に評価し、インメモリ スカラーを返します。

N = numel(T.ArrDelay);
P = gather(sum(h.Values(idx))*100/N)
P = 4.4809

全体的にみて、1 時間以上の到着遅延時間の確率は約 4.5% です。

遅延の月別二変量ヒストグラムのプロット

60 分以上の到着遅延時間について、月別の二変量ヒストグラムをプロットします。このプロットによって、季節性が到着遅延時間に与える影響を調べます。

figure
h2 = histogram2(T.Month,T.ArrDelay,[12 50],'YBinLimits',[60 1100],...
    'Normalization','probability','FaceColor','flat');
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.62 sec
Evaluation completed in 0.69 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.51 sec
Evaluation completed in 0.56 sec
title('Probability of arrival delays 1 hour or greater (by month)')
xlabel('Month (1-12)')
ylabel('Arrival Delay (minutes)')
zlabel('Probability')
xticks(1:12)
view(-126,23)

月別の遅延統計

二変量ヒストグラム オブジェクトを使用して、月ごとの 1 時間以上の到着遅延時間の確率と、各月の平均到着遅延時間を計算します。確率情報を含む変数 P と平均到着遅延時間を含む変数 MeanByMonth をもつ table に結果を格納します。

monthNames = {'Jan','Feb','Mar','Apr','May','Jun',...
    'Jul','Aug','Sep','Oct','Nov','Dec'}';
G = findgroups(T.Month);
M = splitapply(@(x) mean(x,'omitnan'),T.ArrDelay,G);
delayByMonth = table(monthNames, sum(h2.Values,2)*100, gather(M), ...
    'VariableNames',{'Month','P','MeanByMonth'})
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.58 sec
- Pass 2 of 2: Completed in 0.56 sec
Evaluation completed in 1.6 sec
delayByMonth=12×3 table
     Month       P       MeanByMonth
    _______    ______    ___________

    {'Jan'}    9.6497      8.5954   
    {'Feb'}    7.7058      7.3275   
    {'Mar'}    9.0543      7.5536   
    {'Apr'}    7.2504      6.0081   
    {'May'}    7.4256      5.2949   
    {'Jun'}     10.35      10.264   
    {'Jul'}    10.228      8.7797   
    {'Aug'}    8.5989      7.4522   
    {'Sep'}    5.4116      3.6308   
    {'Oct'}     6.042      4.6059   
    {'Nov'}    6.9002      5.2835   
    {'Dec'}    11.384      10.571   

結果は、休暇月の 12 月の便が 1 時間以上遅れる可能性が 11.4% で、平均遅延時間は 10.5 分であることを示しています。これにわずかな差で夏季の 6 月と 7 月が続き、これらの 1 時間以上の遅延の確率は約 10% で、平均遅延時間はおおよそ 9 から 10 分です。

参考

| |

関連するトピック