Построение гистограммы в Python с Matplotlib и Pandas

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

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

Содержание

Что такое гистограмма?

Гистограмма — это диаграмма, использующая столбцы для представления частот, что помогает визуализировать распределение данных.

Столбцы могут отображать уникальные значения или группы чисел, попадающих в определенные диапазоны. Чем выше столбец, тем больше данных попадает в этот диапазон.

Форма гистограммы отображает разброс непрерывной выборки данных.

Если вы хотите узнать, как создавать собственные диапазоны для данных, вы можете ознакомиться с моим руководством по биннингу данных с помощью Pandas

Гистограмма может превратить таблицу частот с интервалами данных в полезную визуализацию:

Describing what a histogram is with a table of frequencies and the resulting histogram.

Загрузка нашего набора данных

Для начала загрузим необходимые библиотеки и наш набор данных. Затем мы можем создать гистограммы с помощью Python для столбца возраста, чтобы визуализировать распределение этой переменной.

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('https://github.com/datagy/Intro-to-Python/raw/master/sportsdata.xls', usecols=['Age'])

print(df.describe())

# Returns:
# 	Age
# count 	5000.000000
# mean 	25.012200
# std 	5.013849
# min 	4.000000
# 25% 	22.000000
# 50% 	25.000000
# 75% 	28.000000
# max 	43.000000

Из приведенных выше данных видно, что данные доходят до 43. Имеет смысл разбить данные на интервалы по 5 лет.

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

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

Для создания гистограммы в Python с использованием Matplotlib, вы можете использовать функцию hist().

Функция hist принимает несколько аргументов, основной из которых — аргумент bins, указывающий количество интервалов равной ширины в пределах диапазона.

Подсказка! Если вы работаете в среде Jupyter, не забудьте включить магическую команду Jupyter %matplotlib inline, чтобы отобразить гистограмму встроенно.

Самый простой способ создать гистограмму с помощью Matplotlib — просто вызвать функцию hist:

plt.hist(df['Age'])

Это возвращает гистограмму со всеми параметрами по умолчанию:

A simple Matplotlib Histogram.
Простая гистограмма Matplotlib.

Определите размер ячейки гистограммы Matplotlib

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

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

plt.hist(df['Age'], bins=9)

Это создаёт следующее изображение:

Create a histogram in Python with Matplotlib.
Простая гистограмма, созданная в Matplotlib.

Определите ячейки гистограммы Matplotlib

Если вы хотите более точно определить размер ваших интервалов, вы можете задать их полностью. Например, если вы хотите, чтобы ваши интервалы были с шагом в пять лет, вы можете написать:

plt.hist(df['Age'], bins=[0,5,10,15,20,25,35,40,45,50])

Это позволяет вам точно указать, где должны располагаться данные. Этот код возвращает следующее:

Defining bin edges in Matplotlib histograms.
Определение границ интервала в гистограммах Matplotlib.

Ограничьте ячейки гистограммы Matplotlib

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

Например, если вы хотите исключить возраст младше 20 лет, вы можете написать:

plt.hist(df['Age'], bins=[20,25,35,40,45,50])
Excluding bins in Matplotlib Histograms
Исключение интервалов в гистограммах Matplotlib

Логарифмическая шкала гистограммы Matplotlib

Если данные содержат некоторые группы с значительно большим количеством данных по сравнению с другими группами, может быть полезно визуализировать данные, используя логарифмическую шкалу. Для этого можно использовать аргумент log=True:

plt.hist(df['Age'], bins=range(0,55,5), log=True)

Это возвращает следующее изображение:

Logarithmic Scales in Matplotlib Histograms.
Логарифмические шкалы в гистограммах Matplotlib.

Изменение внешнего вида гистограммы Matplotlib

Чтобы изменить внешний вид гистограммы, необходимо знать три важных аргумента:

  • align: принимает mid, right, left для установки выравнивания полос относительно их маркеров

  • color: принимает цвета Matplotlib, по умолчанию синий

  • edgecolor: принимает цвета Matplotlib и обводит границы столбцов

Чтобы изменить выравнивание и цвет гистограммы, можно написать:

plt.hist(df['Age'], bins=9, align='right', color='purple', edgecolor='black')

Это генерирует следующую гистограмму:

Чтобы узнать больше о функции hist в Matplotlib, ознакомьтесь с официальной документацией

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

При работе с датафреймами Pandas легко создавать гистограммы. Pandas интегрирует множество функций Pyplot из Matplotlib, чтобы упростить построение графиков.

К гистограммам в Pandas можно применить функцию .hist() напрямую к dataframe:

df.hist()

Это создает следующую гистограмму:

Мы можем дополнительно настроить его с помощью ключевых аргументов, включая:

  • column: поскольку наш датафрейм имеет только один столбец, это не обязательно

  • grid: по умолчанию True

  • bins: по умолчанию 10

Давайте изменим наш код, чтобы включить только 9 контейнеров и удалить сетку:

df.hist(grid=False, bins=9)

Это возвращает следующий dataframe:

Вы также можете добавить заголовки и метки осей, используя следующее:

df.hist(grid=False, bins=9)
plt.xlabel('Age of Players')
plt.ylabel('# of Players')
plt.title('Age Distribution')

Который возвращает следующее:

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

Это можно ускорить, используя функцию range().

df.hist(grid=False, bins=range(0,55,5))
plt.xlabel('Age of Players')ac
plt.ylabel('# of Players')
plt.title('Age Distribution')

Это возвращает следующее:

Если вы хотите узнать больше о функции, ознакомьтесь с официальной документацией

Заключение

В этом посте вы узнали, что такое гистограмма и как создать её с помощью Python, включая использование Matplotlib, Pandas и Seaborn. У каждой из этих библиотек есть свои уникальные преимущества и недостатки. Если вы ищете более статистически дружественный вариант, Seaborn — это то, что вам нужно.

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

  • Новая строка Python и как печатать без новой строки

  • Pandas Isin для фильтрации фрейма данных, например SQL IN и NOT IN

Last updated