Изучаем функцию np.histogram в NumPy: создаем гистограмму

В этом учебнике вы научитесь использовать функцию гистограммы NumPy для вычисления гистограммы заданного набора данных. Гистограмма показывает частоту числовых данных в пределах группированных диапазонов. Используя NumPy для расчета гистограмм, вы можете легко вычислить и получить доступ к частотам (относительным или абсолютным) различных значений.

К концу этого учебного пособия вы узнаете:

  • Как работает функция гистограммы NumPy

  • Как настроить количество и диапазон интервалов в результирующей гистограмме

  • Как вернуть либо абсолютные значения, либо функцию плотности вероятности интервала

Если вы хотите научиться проверять, является ли распределение нормальным, ознакомьтесь с моим руководством по использованию Python для тестирования на нормальность

Содержание

Понимание функции гистограммы NumPy

В этом разделе вы узнаете о функции np.histogram() и различных параметрах и аргументах по умолчанию, которые предлагает эта функция. Функция имеет шесть различных параметров, один из которых является обязательным. Давайте посмотрим, как выглядит функция:

Функция np.histogram() вычисляет гистограмму данных, разбивая их на равные интервалы. Возвращает два массива: массив гистограммы (число элементов в каждом интервале) и массив с границами интервалов.

Мы видим, что функция предоставляет ряд различных параметров. В таблице ниже представлены параметры и их аргументы по умолчанию:

Параметр
Описание
Аргумент по умолчанию
Принятые значения

a=

Входные данные, где гистограмма рассчитывается по сплющенному массиву.

N/A

array-like

bins=

Количество интервалов одинаковой ширины или диапазонов, которые будут использоваться в качестве интервалов.

10

int or sequence

range=

Нижний и верхний диапазон значений

None

(float, float)

normed=

Эквивалент аргумента плотности (устарел с версии 1.6.0). Будет давать неправильные результаты, если контейнеры неравны.

None

bool

weights=

Массив весов той же формы, что и a, где каждое значение имеет только связанный с ним вес.

None

array-like

density=

Если значение равно False, возвращается количество выборок в каждом интервале. Если True, возвращает функцию плотности вероятности в интервале.

None

bool

Теперь, когда у вас есть хорошее понимание того, как функция работает, давайте посмотрим, как ее можно использовать.

Создание гистограммы с помощью NumPy в Python

В этом разделе вы узнаете, как создать базовую гистограмму с помощью функции гистограммы NumPy. Для этого давайте создадим массив случайных значений от 0 до 100, используя функцию np.random.randint():

Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Функция np.random.seed(100) используется для установки начального состояния генератора случайных чисел для воспроизводимости результатов.

Мы сгенерировали массив после создания начального числа. Использование функции np.random.seed() позволяет нам генерировать воспроизводимые результаты. Теперь, когда у нас есть наш массив, давайте передадим его в функцию np.histogram() со значениями аргументов по умолчанию. Это позволит нам лучше понять, как функция работает:

Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram() вычисляет гистограмму этого массива. Результатом будет кортеж из двух массивов: массив гистограммы (число элементов в каждом интервале) и массив с границами интервалов.

Давайте разберем, что делает приведенный выше код:

  1. Мы загружаем наш массив таким же образом, как это делали ранее. Обратите внимание, что наши значения включают минимальное значение 0 и максимальное значение 100.

  2. Затем мы передаём этот массив в функцию np.histogram() и печатаем результаты.

Функция возвращает два массива: (1) количество значений, попавших в каждый интервал, и (2) границы интервалов. Все границы интервалов являются полуоткрытыми, за исключением последней пары. Это означает, что первый интервал начинается от 0 включительно до 10 исключительно, и так далее.

Из результатов видно, что 13 значений попадают в первый интервал, что означает, что 13 значений находятся в диапазоне [0, 10). Поскольку аргумент по умолчанию для функции - bins=10, интервалы охватывают диапазон от минимального значения (0) до максимального значения (100), деленный на 10.

Поскольку функция возвращает два значения, мы можем присвоить каждый из результатов своим переменным, как показано ниже:

Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram() вычисляет гистограмму этого массива. Переменная hist содержит массив гистограммы (число элементов в каждом интервале), а переменная bin_edges содержит массив с границами интервалов.

В приведенном выше коде мы использовали f-строки Python для аккуратного вывода переменных (эта функция доступна только в Python 3.8+). Теперь, когда вы видели, что производит функция с её аргументами по умолчанию, давайте посмотрим, как вы можете настроить функцию, изменяя параметр bins=

Настройка ячеек в гистограммах NumPy

В этом разделе вы научитесь настраивать разбиение на корзины в гистограммах NumPy. По умолчанию функция гистограммы NumPy использует параметр bins=10. Это означает, что NumPy разделит диапазон значений на десять корзин одинакового размера.

Настройка количества интервалов в гистограммах NumPy

Мы можем изменить количество интервалов в гистограмме NumPy, передав целое число в аргумент bins=. Как было сказано ранее, по умолчанию NumPy создает 10 интервалов. Давайте посмотрим, как мы можем изменить функцию для создания пяти интервалов вместо десяти:

Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram() вычисляет гистограмму этого массива, используя 5 интервалов. Переменная hist содержит массив гистограммы (число элементов в каждом интервале), а переменная bin_edges содержит массив с границами интервалов.

В следующем разделе вы узнаете, как настроить диапазоны ячеек.

Настройка диапазонов интервалов в гистограммах NumPy

Функция гистограммы NumPy также позволяет вручную определять края корзин. Преимущество этого заключается в том, что это позволяет настраивать корзины неравного размера. Это может быть особенно полезно, если вы работаете с категориальными данными, такими как возрастные группы.

Давайте посмотрим, как мы можем определить некоторые логические интервалы для нашей гистограммы NumPy, которые имитируют возрастные группы:

Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram() вычисляет гистограмму этого массива, используя пользовательские интервалы [минимальное значение массива, 18, 65, максимальное значение массива]. Переменная hist содержит массив гистограммы (число элементов в каждом интервале), а переменная bin_edges содержит массив с границами интервалов.

В NumPy края будут определены как включающие левую границу и исключающие правую. Это означает, что левая граница будет включена, а все значения до (но не включая) правой границы также будут учтены.

Возврат функции плотности вероятности с помощью гистограмм NumPy

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

Давайте посмотрим, как мы можем вернуть функцию плотности вероятности в гистограммах NumPy:

Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram() вычисляет гистограмму этого массива с нормализацией (density=True), что приводит к вычислению функции плотности вероятности вместо числа элементов в каждом интервале. Переменная hist содержит массив значений функции плотности вероятности, а переменная bin_edges содержит массив с границами интервалов.

В следующем разделе вы узнаете, как изменить диапазон значений, который охватывает гистограмма NumPy.

Изменение диапазона значений с помощью гистограмм NumPy

По умолчанию NumPy будет включать в гистограммы, создаваемые функцией np.histogram(), весь диапазон значений. Вы можете изменить это поведение, задав параметру range= кортеж из чисел с плавающей точкой.

Давайте посмотрим, как мы можем изменить поведение функции, чтобы она показывала только значения от 0 до 50:

Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram() вычисляет гистограмму этого массива с заданным диапазоном значений от 0.0 до 50.0. Переменная hist содержит массив гистограммы (число элементов в каждом интервале), а переменная bin_edges содержит массив с границами интервалов.

Заключение

В этом уроке вы научились использовать функцию np.histogram() для создания гистограмм в NumPy. Сначала вы узнали, как работает функция, познакомившись с её параметрами и аргументами по умолчанию. Затем вы научились использовать функцию для создания гистограмм. После этого вы узнали, как настраивать количество и диапазоны интервалов. Вы также научились вычислять функцию плотности вероятности и как изменять общий диапазон значений.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с нижеприведенными руководствами:

Последнее обновление