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

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

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

Содержание

* [Что такое гистограмма?](#chto-takoe-gistogramma)
* [Загрузка нашего набора данных](#zagruzka-nashego-nabora-dannykh)
* [Создание гистограммы в Python с помощью Matplotlib](#sozdanie-gistogrammy-v-python-s-pomoshyu-matplotlib)
* [Определите размер ячейки гистограммы Matplotlib](#opredelite-razmer-yacheiki-gistogrammy-matplotlib)
* [Определите ячейки гистограммы Matplotlib](#opredelite-yacheiki-gistogrammy-matplotlib)
* [Ограничьте ячейки гистограммы Matplotlib](#ogranichte-yacheiki-gistogrammy-matplotlib)
* [Логарифмическая шкала гистограммы Matplotlib](#logarifmicheskaya-shkala-gistogrammy-matplotlib)
* [Изменение внешнего вида гистограммы Matplotlib](#izmenenie-vneshnego-vida-gistogrammy-matplotlib)
* [Создание гистограммы в Python с помощью Pandas](#sozdanie-gistogrammy-v-python-s-pomoshyu-pandas)
* [Заключение](#zaklyuchenie)

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

<mark style="color:blue;">**Гистограмма**</mark> — это диаграмма, использующая столбцы для представления частот, что помогает визуализировать распределение данных.

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

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

Если вы хотите узнать, как создавать собственные диапазоны для данных, вы можете ознакомиться с [моим руководством по биннингу данных с помощью Pandas](https://datagy.io/pandas-cut-qcut/)

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/What-is-a-histogram-1024x576.png" alt="Describing what a histogram is with a table of frequencies and the resulting histogram." height="576" width="1024"><figcaption></figcaption></figure>

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

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

```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 для [тестирования нормализации](https://datagy.io/normality-test-python/)

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

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

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

{% hint style="info" %}
**Подсказка!** Если вы работаете в среде Jupyter, не забудьте включить магическую команду Jupyter `%matplotlib inline`, чтобы отобразить гистограмму встроенно.
{% endhint %}

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

```python
plt.hist(df['Age'])
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Matplotlib01.png" alt="A simple Matplotlib Histogram." height="248" width="381"><figcaption><p>Простая гистограмма Matplotlib.</p></figcaption></figure>

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

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

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Matplotlib.png" alt="Create a histogram in Python with Matplotlib." height="250" width="381"><figcaption><p>Простая гистограмма, созданная в Matplotlib.</p></figcaption></figure>

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

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Matplotlib03.png" alt="Defining bin edges in Matplotlib histograms." height="248" width="381"><figcaption><p>Определение границ интервала в гистограммах Matplotlib.</p></figcaption></figure>

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

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

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

```python
plt.hist(df['Age'], bins=[20,25,35,40,45,50])
```

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Matplotlib06.png" alt="Excluding bins in Matplotlib Histograms" height="248" width="381"><figcaption><p>Исключение интервалов в гистограммах Matplotlib</p></figcaption></figure>

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

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Matplotlib09.png" alt="Logarithmic Scales in Matplotlib Histograms." height="248" width="375"><figcaption><p>Логарифмические шкалы в гистограммах Matplotlib.</p></figcaption></figure>

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

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

* `align`: принимает mid, right, left для установки выравнивания полос относительно их маркеров
* `color`: принимает цвета Matplotlib, по умолчанию синий
* `edgecolor`: принимает цвета Matplotlib и обводит границы столбцов

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Matplotlib10.png" alt="Customizing a Matplotlib histogram." height="250" width="381"><figcaption><p>Настройка гистограммы Matplotlib.</p></figcaption></figure>

Чтобы узнать больше о функции hist в Matplotlib, ознакомьтесь с[ официальной документацией](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hist.html)

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

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

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

```python
df.hist()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Pandas1-1.png" alt="Creating a histogram in Pandas." height="264" width="381"><figcaption><p>Создание гистограммы в Pandas.</p></figcaption></figure>

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

* `column`: поскольку наш датафрейм имеет только один столбец, это не обязательно
* `grid`: по умолчанию True
* `bins`: по умолчанию 10&#x20;

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Pandas2.png" alt="Modifying a histogram in Pandas." height="264" width="381"><figcaption><p>Изменение гистограммы в Pandas.</p></figcaption></figure>

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Pandas-3.png" alt="Modifying a histogram using Pandas by adding titles." height="278" width="395"><figcaption><p>Изменение гистограммы с помощью Pandas путем добавления заголовков.</p></figcaption></figure>

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

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2020/06/Creating-Histograms-in-Python-Pandas04.png" alt="Customizing bin edges in a Pandas histogram." height="278" width="395"><figcaption><p>Настройка границ интервала в гистограмме Pandas.</p></figcaption></figure>

Если вы хотите узнать больше о функции, ознакомьтесь с [официальной документацией](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.hist.html)

### Заключение

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

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

* Новая строка Python и как печатать без новой строки
* Pandas Isin для фильтрации фрейма данных, например SQL IN и NOT IN
