numpy.histogram_bin_edges
-
numpy.histogram_bin_edges(a, bins=10, range=None, weights=None)[source] -
Функция для вычисления только границ бинов, используемых функцией
histogram.Параметры: -
a : array_like -
Входные данные. Гистограмма вычисляется по сглаженной матрице.
-
bins : int or sequence of scalars or str, optional -
Если
bins- целое число, оно определяет число равномерно распределённых бинов в заданном диапазоне (по умолчанию 10). Еслиbins- последовательность, она определяет границы бинов, включая правую границу, что позволяет использовать неравномерную ширину бинов.Если
bins- строка из списка ниже,histogram_bin_edgesбудет использовать выбранный метод для вычисления оптимальной ширины бинов и, соответственно, числа бинов (см.Notesдля получения более подробной информации об оценщиках) из данных, попадающих в требуемый диапазон. Хотя ширина бинов будет оптимальной для фактических данных в диапазоне, количество бинов будет вычислено для заполнения всего диапазона, включая пустые части. Для визуализации рекомендуется использовать опцию «auto». Взвешенные данные не поддерживаются для автоматического выбора размера бинов.- ‘auto’
-
Максимум из оценок ‘sturges’ и ‘fd’. Обеспечивает хорошую общую производительность.
- ‘fd’ (Оценщик Фридмана-Дикона)
-
Робастный (устойчивый к выбросам) оценщик, учитывающий изменчивость данных и размер выборки.
- ‘doane’
-
Улучшенная версия оценщика Стерджеса, которая лучше работает с наборами данных, не подчиняющимися нормальному распределению.
- ‘scott’
-
Менее робастный оценщик, учитывающий изменчивость данных и размер выборки.
- ‘stone’
-
Оценщик, основанный на оценке перекрёстной проверки методом исключения одного значения для интегрированного квадратного отклонения. Может рассматриваться как обобщение правила Скотта.
- ‘rice’
-
Оценщик, не учитывающий изменчивость, только размер выборки. Часто переоценивает необходимое количество бинов.
- ‘sturges’
-
Метод по умолчанию в R, учитывает только размер выборки. Оптимален только для данных, подчиняющихся нормальному распределению, и недооценивает количество бинов для больших наборов данных, не подчиняющихся нормальному распределению.
- ‘sqrt’
-
Оценщик квадратного корня (из размера выборки), используемый Excel и другими программами из-за его скорости и простоты.
-
range : (float, float), optional -
Нижний и верхний пределы бинов. Если не указаны, диапазон просто
(a.min(), a.max()). Значения за пределами диапазона игнорируются. Первый элемент диапазона должен быть меньше или равен второму.rangeтакже влияет на автоматическое вычисление бинов. Хотя ширина бинов вычисляется как оптимальная на основе фактических данных вrange, количество бинов будет заполнять весь диапазон, включая части, не содержащие данных. -
weights : array_like, optional -
Массив весов, имеющий ту же форму, что и
a. Каждое значение вaвносит свой связанный вес в подсчёт количества бинов (вместо 1). В настоящее время это не используется ни одним из оценщиков бинов, но может быть использовано в будущем.
Возвращает: -
bin_edges : array of dtype float -
Границы для передачи в
histogram
См. также
Примечания
Методы оценки оптимального числа бинов хорошо обоснованы в литературе и вдохновлены выбором, который предоставляет R для визуализации гистограмм. Обратите внимание, что количество бинов пропорционально
асимптотически оптимально, поэтому оно появляется в большинстве оценщиков. Это просто подставные методы, которые дают хорошие начальные значения для количества бинов. В уравнениях ниже
- ширина бина, а
- количество бинов. Все оценщики, вычисляющие количество бинов, переформулируются в ширину бинов с использованием
ptpданных. Конечное количество бинов получается изnp.round(np.ceil(range / h)).- ‘auto’ (максимум из оценок ‘sturges’ и ‘fd’)
- Компромисс для получения хорошего значения. Для малых наборов данных обычно выбирается значение Стерджеса, а для больших наборов данных обычно используется FD. Избегает чрезмерно консервативного поведения FD и Стерджеса для малых и больших наборов данных соответственно. Точка переключения обычно
.
- ‘fd’ (Оценщик Фридмана-Дикона)
-
Ширина бинов пропорциональна межквартильному размаху (IQR) и обратно пропорциональна кубовому корню из a.size. Может быть слишком консервативным для малых наборов данных, но довольно хорошим для больших наборов данных. IQR очень устойчив к выбросам.
- ‘scott’
-
Ширина бинов пропорциональна стандартному отклонению данных и обратно пропорциональна кубовому корню из
x.size. Может быть слишком консервативным для малых наборов данных, но довольно хорошим для больших наборов данных. Стандартное отклонение не очень устойчиво к выбросам. Значения очень похожи на оценщик Фридмана-Дикона в отсутствие выбросов. - ‘rice’
-
Количество бинов пропорционально только кубовому корню из
a.size. Он имеет тенденцию переоценивать количество бинов и не учитывает изменчивость данных. - ‘sturges’
-
Количество бинов равно логарифму по основанию 2 от
a.size. Этот оценщик предполагает нормальное распределение данных и является слишком консервативным для больших, ненормальных наборов данных. Это метод по умолчанию в методеhistR. - ‘doane’
-
Улучшенная версия формулы Стерджеса, которая дает лучшие оценки для наборов данных, не подчиняющихся нормальному распределению. Этот оценщик пытается учесть асимметрию данных.
- ‘sqrt’
-
Самый простой и быстрый оценщик. Учитывает только размер выборки.
Примеры
>>> arr = np.array([0, 0, 0, 1, 2, 3, 3, 4, 5]) >>> np.histogram_bin_edges(arr, bins='auto', range=(0, 1)) array([0. , 0.25, 0.5 , 0.75, 1. ]) >>> np.histogram_bin_edges(arr, bins=2) array([0. , 2.5, 5. ])
Для согласованности с гистограммой массив предварительно вычисленных бинов передаётся без изменений:
>>> np.histogram_bin_edges(arr, [1, 2]) array([1, 2])
Эта функция позволяет вычислить один набор бинов и повторно использовать его в нескольких гистограммах:
>>> shared_bins = np.histogram_bin_edges(arr, bins='auto') >>> shared_bins array([0., 1., 2., 3., 4., 5.])
>>> group_id = np.array([0, 1, 1, 0, 1, 1, 0, 1, 1]) >>> hist_0, _ = np.histogram(arr[group_id == 0], bins=shared_bins) >>> hist_1, _ = np.histogram(arr[group_id == 1], bins=shared_bins)
>>> hist_0; hist_1 array([1, 1, 0, 1, 0]) array([2, 0, 1, 1, 2])
Что даёт более легко сравнимые результаты, чем использование отдельных бинов для каждой гистограммы:
>>> hist_0, bins_0 = np.histogram(arr[group_id == 0], bins='auto') >>> hist_1, bins_1 = np.histogram(arr[group_id == 1], bins='auto') >>> hist_0; hist_1 array([1, 1, 1]) array([2, 1, 1, 2]) >>> bins_0; bins_1 array([0., 1., 2., 3.]) array([0. , 1.25, 2.5 , 3.75, 5. ])
-
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/generated/numpy.histogram_bin_edges.html