Гистограммы длинных массивов

В этом примере показано, как использовать histogram и histogram2 для анализа и визуализации данных, содержащихся в длинный массив.

Создание Длинная таблица

Создайте datastore с помощью airlinesmall.csv набор данных. Лечите 'NA' значения как отсутствующие данные, чтобы они были заменены на NaN значения. Выберите подмножество переменных для работы. Преобразуйте datastore в длинная таблица.

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.66 sec
- Pass 2 of 2: Completed in 0.33 sec
Evaluation completed in 1.4 sec
title('Flight arrival delays, 1987 - 2008')
xlabel('Arrival Delay (minutes)')
ylabel('Frequency')

Figure contains an axes. The axes with title Flight arrival delays, 1987 - 2008 contains an object of type histogram.

Задержка прибытия чаще всего является небольшим числом около 0, поэтому эти значения доминируют на графике и затрудняют просмотр других деталей.

Регулировка пределов интервала гистограммы

Ограничьте пределы интервала гистограммы, чтобы построить график только задержек прибытия от -50 до 150 минут. После того, как вы создали объект гистограммы из длинный массив, вы не можете изменить какие-либо свойства, которые потребовали бы перевычисления интервалов, включая BinWidth и BinLimits. Кроме того, вы не можете использовать morebins или fewerbins для настройки количества интервалов. В этих случаях используйте histogram чтобы восстановить гистограмму из необработанных данных в длинный массив.

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

Figure contains an axes. The axes with title Flight arrival delays between -50 and 150 minutes, 1987 - 2008 contains an object of type histogram.

Из этого графика видно, что длительные задержки могут быть более распространенными, чем первоначально ожидалось. Чтобы продолжить расследование, найдите вероятность задержки прибытия, которая составляет один час или более.

Вероятность задержек на час или больше

Исходная гистограмма вернула объект h который содержит значения интервала в Values свойство и границы интервала в BinEdges свойство. Можно использовать эти свойства для выполнения вычислений в памяти.

Определите, какие интервалы содержат задержки прибытия на один час (60 минуты) или более. Удалите последнюю границу интервала из логического вектора индекса так, чтобы это была та же длина, что и вектор значений интервала.

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

Использование idx для извлечения значения, связанного с каждым выбранным интервалом. Добавьте значения интервала вместе, разделите на общее количество выборок и умножьте на 100, чтобы определить общую вероятность задержки, большей или равной одному часу. Поскольку общее количество выборок вычисляется из исходного набора данных, используйте gather явно оценить вычисление и вернуть скаляр в памяти.

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

В целом, шансы задержки прибытия на час или больше составляют около 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.56 sec
Evaluation completed in 0.63 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.48 sec
Evaluation completed in 0.52 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)

Figure contains an axes. The axes with title Probability of arrival delays 1 hour or greater (by month) contains an object of type histogram2.

Задержка статистики по месяцам

Используйте двухмерный объект гистограммы, чтобы вычислить вероятность задержки прибытия на один час или больше в каждом месяце и среднюю задержку прибытия на каждый месяц. Поместите результаты в таблицу с переменной P содержащая информацию о вероятностях и переменной MeanByMonth содержащее среднюю задержку прибытия.

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.34 sec
- Pass 2 of 2: Completed in 0.59 sec
Evaluation completed in 1.2 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   

Результаты показывают, что рейсы в праздничном месяце декабря имеют 11,4% шанс быть задержанными дольше часа, но задерживаются на 10,5 минут на среднем значении. За этим внимательно следуют летние месяцы июня и июля, где существует примерно 10% вероятность задержки на час или больше, а средняя задержка составляет примерно 9 или 10 минут.

См. также

| |

Похожие темы