Как построить и понять гистограмму с помощью NumPy Histogram в Python?

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

Что такое гистограмма и зачем она нужна?

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

В анализе данных гистограммы незаменимы для:

  • Предварительного исследования данных (EDA): позволяют быстро понять структуру данных.

  • Проверки предположений: помогают оценить, соответствует ли распределение данных определенной статистической модели (например, нормальному).

  • Идентификации аномалий: позволяют выявить необычные пики или пробелы в данных.

Определение гистограммы и ее назначение

Гистограмма — это графическое представление, которое отображает частотное распределение набора числовых данных. Она визуализирует, как часто значения попадают в определенные интервалы, называемые бинами или корзинами. Основное назначение гистограммы заключается в предоставлении наглядной картины плотности данных. С ее помощью можно быстро определить:

  • Форму распределения (например, нормальное, равномерное, скошенное);

  • Наличие нескольких пиков (мультимодальное распределение);

  • Присутствие выбросов или необычных значений;

  • Центральную тенденцию и разброс данных.

Применение гистограмм в анализе данных

Гистограммы играют ключевую роль в различных областях анализа данных, предоставляя мгновенное визуальное представление о структуре набора данных. Они позволяют:

  • Оценить форму распределения данных: Выявить, являются ли данные нормально распределенными, скошенными (асимметричными) или имеют мультимодальное распределение.

  • Идентифицировать выбросы: Необычно низкие или высокие частоты в крайних бинах могут указывать на потенциальные аномалии или ошибки в данных.

  • Определить центральную тенденцию и разброс: Визуально оценить медиану, моду и диапазон значений, а также их плотность.

  • Сравнить распределения: Путем наложения или построения нескольких гистограмм для разных групп данных можно выявлять различия и сходства в их поведении.

Использование numpy.histogram() для создания гистограммы

Функция numpy.histogram() – это мощный инструмент для создания гистограмм в Python, используя библиотеку NumPy. Она принимает на вход массив данных и разбивает его на интервалы (бины), подсчитывая количество элементов, попадающих в каждый бин.

Синтаксис:

numpy.histogram(a, bins=10, range=None, density=False, weights=None,  cumulative=False)
  • a: Исходный массив данных.

  • bins: Количество бинов (по умолчанию 10) или последовательность, определяющая границы бинов.

  • range: Диапазон значений, которые будут учитываться при построении гистограммы (по умолчанию – min и max значения массива a).

  • density: Если True, возвращает плотность вероятности (нормализованная гистограмма).

Пример:

import numpy as np

data = np.random.randint(0, 100, 100)
hist, bin_edges = np.histogram(data, bins=5)

print(hist) # Частоты для каждого бина
print(bin_edges) # Границы бинов

numpy.histogram() отлично подходит для работы как со случайными данными, так и с предопределенными наборами. Варьируя количество бинов и диапазон, можно получить более детальное представление о распределении данных.

Синтаксис и основные параметры функции numpy.histogram()

Функция numpy.histogram() предоставляет мощный инструмент для создания гистограмм. Ее основной синтаксис выглядит следующим образом:

numpy.histogram(a, bins=10, range=None, density=False, weights=None, cumulative=False)
  • a: Исходный массив данных.

  • bins: Количество бинов (по умолчанию 10) или последовательность, определяющая границы бинов.

  • range: Диапазон значений для гистограммы (минимальное и максимальное значения). Если не указан, используются минимальное и максимальное значения из данных.

  • density: Если True, возвращает нормированную гистограмму (плотность вероятности).

  • weights: Массив весов, применяемых к каждому значению в a.

  • cumulative: Если True, вычисляется кумулятивная гистограмма.

При работе с различными типами данных, такими как случайные или предопределенные наборы, важно правильно настроить параметры bins и range для получения информативной гистограммы. Например, для случайных данных, равномерно распределенных в диапазоне от 0 до 1, можно использовать bins=50 для более детального анализа.

Реклама

Работа с различными типами данных: случайные и предопределенные наборы

Функция numpy.histogram() универсальна и может работать как со случайно сгенерированными, так и с заранее определенными массивами данных. Это позволяет анализировать распределение широкого спектра информации. Рассмотрим примеры:

  • Случайные данные: Часто в анализе данных приходится работать с выборками из статистических распределений. Создадим массив из 1000 случайных чисел, взятых из нормального распределения, и построим для них гистограмму:

    import numpy as np
    
    # Случайные данные из нормального распределения
    random_data = np.random.randn(1000)
    counts, bins = np.histogram(random_data, bins=20)
    print("Counts (случайные данные):", counts[:5], "...")
    print("Bins (случайные данные):", bins[:5], "...")
    
  • Предопределенные данные: Также можно использовать предопределенные массивы, например, для анализа конкретных наборов значений.

    # Предопределенный массив данных
    predefined_data = np.array([1, 1, 2, 3, 3, 3, 4, 5, 5, 6, 7, 7, 7, 7, 8, 9, 10])
    counts_predefined, bins_predefined = np.histogram(predefined_data, bins=5)
    print("Counts (предопределенные данные):", counts_predefined)
    print("Bins (предопределенные данные):", bins_predefined)
    

Как видно, подход к использованию numpy.histogram() остается неизменным независимо от источника данных.

Интерпретация результатов и визуализация гистограммы

После того, как numpy.histogram() вычислила частоты и границы бинов, следующим шагом является интерпретация этих данных и их визуализация. Массив, возвращаемый функцией, содержит частоты (количество элементов в каждом бине), а второй массив – границы бинов.

Для визуализации гистограммы удобно использовать matplotlib.pyplot.hist(), но можно и построить график на основе данных, полученных от numpy.histogram(). При использовании matplotlib.pyplot.bar() или matplotlib.pyplot.stairs() с данными, возвращенными numpy.histogram(), можно получить более гибкий контроль над внешним видом гистограммы.

Пример:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.randn(1000)
counts, bins = np.histogram(data, bins=30)
plt.stairs(counts, bins)
plt.xlabel('Значения')
plt.ylabel('Частота')
plt.title('Гистограмма распределения')
plt.show()

В этом примере мы создаем случайные данные, вычисляем гистограмму с помощью numpy.histogram() и затем визуализируем ее, используя plt.stairs() из matplotlib. График показывает распределение данных по бинам, позволяя анализировать форму распределения и выявлять особенности.

Понимание выходных данных: частоты и границы бинов

Функция numpy.histogram() возвращает два ключевых массива: hist и bin_edges. Массив hist содержит количество элементов (частоты) в каждом бине. Массив bin_edges определяет границы этих бинов, где каждый бин включает левую границу и исключает правую (за исключением последнего бина). Понимание этих данных позволяет точно интерпретировать распределение.

Визуализация гистограммы с помощью Matplotlib

Для наглядного представления результатов numpy.histogram() чаще всего используется библиотека Matplotlib. Полученные массивы counts (частоты) и bins (границы бинов) можно передать в matplotlib.pyplot.bar() для столбчатой диаграммы или в matplotlib.pyplot.plot() с drawstyle='steps-pre' для ступенчатого графика, что позволяет точно визуализировать распределение данных.

Продвинутое использование и сравнение

Для более детального анализа данных numpy.histogram() позволяет задавать не только количество, но и пользовательские границы бинов массивом. Это дает точный контроль над интервалами, что критично для нестандартных распределений.

Фундаментальное отличие от matplotlib.pyplot.hist() заключается в том, что numpy.histogram() вычисляет данные гистограммы (частоты и границы бинов), а не строит ее напрямую, предоставляя гибкость для дальнейшей обработки.

Настройка бинов и диапазонов для детального анализа

Для углубленного анализа данных numpy.histogram() позволяет точно настроить параметры bins и range. Количество бинов можно задать целым числом для контроля детализации или передать последовательность для определения пользовательских границ. Параметр range=(min, max) позволяет ограничить анализируемый диапазон данных, что полезно для исключения выбросов или фокусировки на конкретных интервалах распределения.

Сравнение numpy.histogram() с matplotlib.pyplot.hist()

В то время как numpy.histogram() возвращает кортеж с массивами частот и границ бинов, matplotlib.pyplot.hist() выполняет полный цикл: вычисляет эти значения и сразу же строит график гистограммы. numpy.histogram() идеально подходит, когда вам нужны сами данные для дальнейших расчетов или кастомной визуализации, тогда как matplotlib.pyplot.hist() удобен для быстрого отображения без промежуточных шагов.

Заключение

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


Добавить комментарий