Пропустить до содержимого

Как использовать Python для построения гистограммы?

[

Гистограммы в Python

Когда вы готовитесь создавать гистограмму, наиболее просто не думать в терминах интервалов, а скорее сосредоточиться на подсчете того, сколько раз каждое значение встречается (частотная таблица). В Python для этой задачи хорошо подходит словарь:

# Необязательно сортировать
a = (0, 1, 1, 1, 2, 3, 7, 7, 23)
def count_elements(seq) -> dict:
"""Подсчет элементов в `seq`."""
hist = {}
for i in seq:
hist[i] = hist.get(i, 0) + 1
return hist
counted = count_elements(a)
counted

count_elements() возвращает словарь с уникальными элементами из последовательности в качестве ключей и их частотами (количествами) в качестве значений. Внутри цикла for по seq hist[i] = hist.get(i, 0) + 1 говорит: “для каждого элемента последовательности, увеличьте соответствующее значение в hist на 1”.

На самом деле, это именно то, что делает класс collections.Counter из стандартной библиотеки Python, который является подклассом словаря Python и переопределяет его метод .update():

from collections import Counter
recounted = Counter(a)
recounted

Вы можете убедиться, что ваша функция выполняет практически то же самое.

Разработка базы: расчет гистограммы в NumPy

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

import numpy as np
# Задаем данные
np.random.seed(42)
commute_times = np.round(np.random.normal(loc=30, scale=10, size=1000))
# Расчет гистограммы
hist, bin_edges = np.histogram(commute_times, bins="auto")
# Вывод результатов
print(hist)
print(bin_edges)

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

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

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

import matplotlib.pyplot as plt
# Построение гистограммы
plt.hist(commute_times, bins="auto")
# Добавление подписей осей и заголовка
plt.xlabel("Commute Time (minutes)")
plt.ylabel("Frequency")
plt.title("Histogram of Commute Times")
# Вывод гистограммы
plt.show()

Pandas также предоставляет удобный способ создания и визуализации гистограмм. Она имеет метод pandas.DataFrame.hist(), который автоматически использует Matplotlib для построения гистограммы. Вот пример:

import pandas as pd
# Создание DataFrame
data = pd.DataFrame({"Commute Time": commute_times})
# Построение гистограммы
data.hist(bins="auto")
# Вывод гистограммы
plt.show()

Построение оценки плотности ядра (KDE)

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

import numpy as np
import matplotlib.pyplot as plt
# Сгенерировать случайные данные
np.random.seed(42)
data = np.concatenate((np.random.normal(loc=-2, scale=1.5, size=500),
np.random.normal(loc=2, scale=0.8, size=200)))
# Рассчитать KDE
kde = plt.hist(data, bins="auto", density=True, alpha=0.5, label="Histogram")
kde = plt.plot(kde[1][:-1], kde[0], label="KDE")
# Добавление подписей осей и легенды
plt.xlabel("Data")
plt.ylabel("Density")
plt.legend()
# Вывод графика
plt.show()

Установите NumPy, Matplotlib, pandas и Seaborn

Для создания гистограмм в Python с использованием NumPy, Matplotlib, pandas и Seaborn, вам понадобится установить эти библиотеки. Вы можете установить их, выполнив следующую команду в командной строке:

pip install numpy matplotlib pandas seaborn

Заключение

В этом руководстве вы узнали, как создавать гистограммы в Python с использованием библиотек из ее научного стека - NumPy, Matplotlib, pandas и Seaborn. Вы изучили различные способы построения и визуализации гистограмм, а также научились использовать оценку плотности ядра для сглаживания данных. Теперь вы готовы создавать гистограммы, адаптированные для практически любого набора данных, чтобы представить их наглядно и профессионально.