Изучаем функцию np.histogram в NumPy: создаем гистограмму
Last updated
Last updated
В этом учебнике вы научитесь использовать функцию гистограммы NumPy для вычисления гистограммы заданного набора данных. Гистограмма показывает частоту числовых данных в пределах группированных диапазонов. Используя NumPy для расчета гистограмм, вы можете легко вычислить и получить доступ к частотам (относительным или абсолютным) различных значений.
К концу этого учебного пособия вы узнаете:
Как работает функция гистограммы NumPy
Как настроить количество и диапазон интервалов в результирующей гистограмме
Как вернуть либо абсолютные значения, либо функцию плотности вероятности интервала
Если вы хотите научиться проверять, является ли распределение нормальным, ознакомьтесь с моим руководством по использованию Python для тестирования на нормальность
Содержание
В этом разделе вы узнаете о функции 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. Для этого давайте создадим массив случайных значений от 0 до 100, используя функцию np.random.randint()
:
Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Функция np.random.seed(100)
используется для установки начального состояния генератора случайных чисел для воспроизводимости результатов.
Мы сгенерировали массив после создания начального числа. Использование функции np.random.seed()
позволяет нам генерировать воспроизводимые результаты. Теперь, когда у нас есть наш массив, давайте передадим его в функцию np.histogram()
со значениями аргументов по умолчанию. Это позволит нам лучше понять, как функция работает:
Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram()
вычисляет гистограмму этого массива. Результатом будет кортеж из двух массивов: массив гистограммы (число элементов в каждом интервале) и массив с границами интервалов.
Давайте разберем, что делает приведенный выше код:
Мы загружаем наш массив таким же образом, как это делали ранее. Обратите внимание, что наши значения включают минимальное значение 0 и максимальное значение 100.
Затем мы передаём этот массив в функцию 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 использует параметр bins=10
. Это означает, что NumPy разделит диапазон значений на десять корзин одинакового размера.
Мы можем изменить количество интервалов в гистограмме NumPy, передав целое число в аргумент bins=
. Как было сказано ранее, по умолчанию NumPy создает 10 интервалов. Давайте посмотрим, как мы можем изменить функцию для создания пяти интервалов вместо десяти:
Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram()
вычисляет гистограмму этого массива, используя 5 интервалов. Переменная hist
содержит массив гистограммы (число элементов в каждом интервале), а переменная bin_edges
содержит массив с границами интервалов.
В следующем разделе вы узнаете, как настроить диапазоны ячеек.
Функция гистограммы NumPy также позволяет вручную определять края корзин. Преимущество этого заключается в том, что это позволяет настраивать корзины неравного размера. Это может быть особенно полезно, если вы работаете с категориальными данными, такими как возрастные группы.
Давайте посмотрим, как мы можем определить некоторые логические интервалы для нашей гистограммы NumPy, которые имитируют возрастные группы:
Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram()
вычисляет гистограмму этого массива, используя пользовательские интервалы [минимальное значение массива, 18, 65, максимальное значение массива]. Переменная hist
содержит массив гистограммы (число элементов в каждом интервале), а переменная bin_edges
содержит массив с границами интервалов.
В NumPy края будут определены как включающие левую границу и исключающие правую. Это означает, что левая граница будет включена, а все значения до (но не включая) правой границы также будут учтены.
NumPy также позволяет возвращать функцию плотности вероятности гистограммы. Это означает, что значения нормализуются таким образом, что их интеграл равен 1. Это эффективно демонстрирует долю значений, которые попадают в каждую группу.
Давайте посмотрим, как мы можем вернуть функцию плотности вероятности в гистограммах NumPy:
Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram()
вычисляет гистограмму этого массива с нормализацией (density=True), что приводит к вычислению функции плотности вероятности вместо числа элементов в каждом интервале. Переменная hist
содержит массив значений функции плотности вероятности, а переменная bin_edges
содержит массив с границами интервалов.
В следующем разделе вы узнаете, как изменить диапазон значений, который охватывает гистограмма NumPy.
По умолчанию NumPy будет включать в гистограммы, создаваемые функцией np.histogram()
, весь диапазон значений. Вы можете изменить это поведение, задав параметру range=
кортеж из чисел с плавающей точкой.
Давайте посмотрим, как мы можем изменить поведение функции, чтобы она показывала только значения от 0 до 50:
Этот код использует библиотеку NumPy для генерации массива случайных чисел размером 100 из диапазона от 0 до 100. Затем функция np.histogram()
вычисляет гистограмму этого массива с заданным диапазоном значений от 0.0 до 50.0. Переменная hist
содержит массив гистограммы (число элементов в каждом интервале), а переменная bin_edges
содержит массив с границами интервалов.
В этом уроке вы научились использовать функцию np.histogram()
для создания гистограмм в NumPy. Сначала вы узнали, как работает функция, познакомившись с её параметрами и аргументами по умолчанию. Затем вы научились использовать функцию для создания гистограмм. После этого вы узнали, как настраивать количество и диапазоны интервалов. Вы также научились вычислять функцию плотности вероятности и как изменять общий диапазон значений.
Чтобы узнать больше о связанных темах, ознакомьтесь с нижеприведенными руководствами: