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 オブジェクトを作成した後は、BinWidth
や BinLimits
など、ビンの再計算が必要となるプロパティは変更できません。また、morebins
や fewerbins
を使用してビン数を調整することもできません。このような場合には、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 分です。
参考
histogram
| histogram2
| tall