Этот пример показывает, как использовать histogram
и histogram2
, чтобы анализировать и визуализировать данные, содержавшиеся в длинном массиве.
Создайте datastore с помощью набора данных airlinesmall.csv
. Обработайте значения 'NA'
как недостающие данные так, чтобы они были заменены значениями NaN
. Выберите подмножество переменных, чтобы работать с. Преобразуйте datastore в длинную таблицу.
varnames = {'ArrDelay', 'DepDelay', 'Year', 'Month'}; ds = datastore('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.99 sec - Pass 2 of 2: Completed in 0.39 sec Evaluation completed in 2 sec
title('Flight arrival delays, 1987 - 2008') xlabel('Arrival Delay (minutes)') ylabel('Frequency')
Задержка прибытия является наиболее часто небольшим числом около 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.55 sec - Pass 2 of 2: Completed in 0.37 sec Evaluation completed in 1.2 sec
title('Flight arrival delays between -50 and 150 minutes, 1987 - 2008') xlabel('Arrival Delay (minutes)') ylabel('Probability')
Из этого графика кажется, что длительные задержки могут быть более распространены, чем первоначально ожидаемый. Чтобы заняться расследованиями далее, найдите вероятность задержки прибытия, которая является одним часом или больше.
Исходная гистограмма возвратила объект 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)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.33 sec Evaluation completed in 0.39 sec
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.59 sec Evaluation completed in 0.62 sec Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.51 sec Evaluation completed in 0.53 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)
Используйте объект двумерной гистограммы вычислить, вероятность наличия прибытия задерживают один час или больше в каждом месяце, и средняя задержка прибытия в течение каждого месяца. Поместите результаты в таблицу с переменной 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.36 sec - Pass 2 of 2: Completed in 0.72 sec Evaluation completed in 1.5 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 минут.
histogram
| histogram2
| tall