Вступление
В Python есть много библиотек визуализации данных, но Matplotlib - самая популярная из них. Популярность Matplotlib объясняется его надежностью и полезностью - он может создавать как простые, так и сложные графики с небольшим количеством кода. Вы также можете настроить графики различными способами.
В этом уроке мы расскажем, как построить скрипичные сюжеты в Matplotlib .
Графики скрипки используются для визуализации распределения данных, отображения диапазона, медианы и распределения данных.
Графики скрипки показывают ту же сводную статистику, что и коробчатые диаграммы, но они также включают оценки плотности ядра, которые представляют форму / распределение данных.
Импорт данных
Прежде чем мы сможем создать график скрипки, нам потребуются некоторые данные для построения. Мы будем использовать набор данных Gapminder .
Мы начнем с импорта необходимых нам библиотек, в том числе Pandas и Matplotlib:
import pandas as pd
import matplotlib.pyplot as plt
Мы проверим, нет ли отсутствующих записей данных, и распечатаем
заголовок набора данных, чтобы убедиться, что данные были загружены
правильно. Обязательно установите тип кодировки ISO-8859-1
:
dataframe = pd.read_csv("gapminder_full.csv", error_bad_lines=False, encoding="ISO-8859-1")
print(dataframe.head())
print(dataframe.isnull().values.any())
country year population continent life_exp gdp_cap
0 Afghanistan 1952 8425333 Asia 28.801 779.445314
1 Afghanistan 1957 9240934 Asia 30.332 820.853030
2 Afghanistan 1962 10267083 Asia 31.997 853.100710
3 Afghanistan 1967 11537966 Asia 34.020 836.197138
4 Afghanistan 1972 13079460 Asia 36.088 739.981106
Создание сюжета для скрипки в Матплотлибе
Чтобы создать сценарий скрипки в Matplotlib, мы вызываем violinplot()
либо для Axes
, либо для самого экземпляра PyPlot:
import pandas as pd
import matplotlib.pyplot as plt
dataframe = pd.read_csv("gapminder_full.csv", error_bad_lines=False, encoding="ISO-8859-1")
population = dataframe.population
life_exp = dataframe.life_exp
gdp_cap = dataframe.gdp_cap
# Extract Figure and Axes instance
fig, ax = plt.subplots()
# Create a plot
ax.violinplot([population, life_exp, gdp_cap])
# Add title
ax.set_title('Violin Plot')
plt.show()
{.ezlazyload}
Когда мы создаем первый график, мы можем видеть распределение наших данных, но мы также заметим некоторые проблемы. Из-за того, что масштаб характеристик настолько разный, практически невозможно распределить столбцы «Ожидаемая продолжительность жизни» и « ВВП».
По этой причине мы хотим построить каждый столбец на отдельном подзаголовке.
Мы сделаем небольшую сортировку и нарезку фрейма данных, чтобы упростить сравнение столбцов набора данных. Мы сгруппируем фрейм данных по «стране» и выберем только самые последние / последние записи для каждой из стран.
Затем мы отсортируем по совокупности и отбросим записи с наибольшей совокупностью (большие выбросы по совокупности), чтобы остальная часть фрейма данных находилась в более похожем диапазоне и сравнения были проще:
dataframe = dataframe.groupby("country").last()
dataframe = dataframe.sort_values(by=["population"], ascending=False)
dataframe = dataframe.iloc[10:]
print(dataframe)
Теперь фрейм данных выглядит примерно так:
year population continent life_exp gdp_cap
country
Philippines 2007 91077287 Asia 71.688 3190.481016
Vietnam 2007 85262356 Asia 74.249 2441.576404
Germany 2007 82400996 Europe 79.406 32170.374420
Egypt 2007 80264543 Africa 71.338 5581.180998
Ethiopia 2007 76511887 Africa 52.947 690.805576
... ... ... ... ... ...
Montenegro 2007 684736 Europe 74.543 9253.896111
Equatorial Guinea 2007 551201 Africa 51.579 12154.089750
Djibouti 2007 496374 Africa 54.791 2082.481567
Iceland 2007 301931 Europe 81.757 36180.789190
Sao Tome and Principe 2007 199579 Africa 65.528 1598.435089
Большой! Теперь мы можем создать фигуру и объекты с тремя осями с
помощью функции subplots()
. На каждой из этих осей будет скрипичный
сюжет. Поскольку сейчас мы работаем над гораздо более управляемым
масштабом, давайте также showmedians
аргумент showmedians, установив
для него значение True
.
Это проведет горизонтальную линию в середине наших скрипичных сюжетов:
# Create figure with three axes
fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3)
# Plot violin plot on axes 1
ax1.violinplot(dataframe.population, showmedians=True)
ax1.set_title('Population')
# Plot violin plot on axes 2
ax2.violinplot(life_exp, showmedians=True)
ax2.set_title('Life Expectancy')
# Plot violin plot on axes 3
ax3.violinplot(gdp_cap, showmedians=True)
ax3.set_title('GDP Per Cap')
plt.show()
Запуск этого кода теперь дает нам:
{.ezlazyload}
Теперь мы можем получить хорошее представление о распределении наших данных. Центральная горизонтальная линия на скрипках - это то место, где расположена медиана наших данных, а минимальные и максимальные значения указаны положениями линий на оси Y.
Настройка сюжетов скрипки в Matplotlib
Теперь давайте посмотрим, как мы можем настроить скрипичные сюжеты.
Добавление отметок X и Y
Как видите, хотя графики были успешно сгенерированы, без меток на осях X и Y может быть сложно интерпретировать график. Людям гораздо легче интерпретировать категориальные значения, чем числовые.
Мы можем настроить график и добавить метки к оси X с помощью функции
set_xticks()
:
fig, ax = plt.subplots()
ax.violinplot(gdp_cap, showmedians=True)
ax.set_title('violin plot')
ax.set_xticks([1])
ax.set_xticklabels(["Country GDP",])
plt.show()
Это приводит к:
{.ezlazyload}
Здесь мы установили X-метки из диапазона в один, посередине, и добавили метку, которую легко интерпретировать.
Построение горизонтального участка скрипки в Matplotlib
Если бы мы хотели, мы также могли бы изменить ориентацию графика,
изменив параметр vert
vert
определяет, отображается ли график
вертикально, и по умолчанию для True
fig, ax = plt.subplots()
ax.violinplot(gdp_cap, showmedians=True, vert=False)
ax.set_title('violin plot')
ax.set_yticks([1])
ax.set_yticklabels(["Country GDP",])
ax.tick_params(axis='y', labelrotation = 90)
plt.show()
{.ezlazyload}
Здесь мы установили метки деления оси Y и их частоту вместо оси X. Мы также повернули этикетки на 90 градусов.
Отображение средств набора данных в сюжетах скрипки
Нам также доступны некоторые другие параметры настройки. showmean
в
дополнение к медианам с помощью параметра showmean.
Давайте попробуем визуализировать средние значения в дополнение к медианам:
fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3)
ax1.violinplot(population, showmedians=True, showmeans=True, vert=False)
ax1.set_title('Population')
ax2.violinplot(life_exp, showmedians=True, showmeans=True, vert=False)
ax2.set_title('Life Expectancy')
ax3.violinplot(gdp_cap, showmedians=True, showmeans=True, vert=False)
ax3.set_title('GDP Per Cap')
plt.show()
{.ezlazyload}
Однако обратите внимание, что, поскольку медианы и средние значения по существу выглядят одинаково, может стать неясным, какая вертикальная линия здесь относится к медиане, а какая к среднему.
Настройка оценки плотности ядра для графиков скрипки
Мы также можем изменить, сколько точек данных учитывает модель при
создании оценок плотности ядра Гаусса, изменив параметр points
По умолчанию учитывается 100 баллов. Предоставляя функции меньшее количество точек данных для оценки, мы можем получить менее репрезентативное распределение данных.
Давайте изменим это число, скажем, на 10:
fig, ax = plt.subplots()
ax.violinplot(gdp_cap, showmedians=True, points=10)
ax.set_title('violin plot')
ax.set_xticks([1])
ax.set_xticklabels(["Country GDP",])
plt.show()
{.ezlazyload}
Обратите внимание, что форма скрипки менее гладкая, поскольку было выбрано меньшее количество точек.
Как правило, вы хотите увеличить количество используемых точек, чтобы лучше понять распределение. Это может быть не всегда так, если 100 достаточно просто. Давайте построим график скрипки с 10, 100 и 500 точками:
fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3)
ax1.violinplot(gdp_cap, showmedians=True, points=10)
ax1.set_title('GDP Per Cap, 10p')
ax2.violinplot(gdp_cap, showmedians=True, points=100)
ax2.set_title('GDP Per Cap, 100p')
ax3.violinplot(gdp_cap, showmedians=True, points=500)
ax3.set_title('GDP Per Cap, 500p')
plt.show()
Это приводит к:
{.ezlazyload}
Между вторым и третьим сюжетами нет очевидной разницы, но есть существенная разница между первым и вторым.
Заключение
В этом уроке мы рассмотрели несколько способов построить сценарий скрипки с помощью Matplotlib и Python. Мы также рассмотрели, как настроить их, добавив отметки X и Y, построив горизонтальный график, показав средства набора данных, а также изменив выборку точек KDE.
Если вас интересует визуализация данных и вы не знаете, с чего начать, обязательно ознакомьтесь с нашим комплектом книг по визуализации данных в Python{.ebook-link} :
::: {style=“border: 1px solid #ebebeb;padding: 15px;”} {.ebook-link}
Визуализация данных в Python
::: {.row} ::: {.col-md-4 .col-xs-12} {.img-responsive .center-block} :::
::: {.col-md-8 .col-xs-12 .my-auto} Станьте опасными с визуализацией данных
✅ 30-дневная гарантия возврата денег без вопросов
✅ от начального до продвинутого
✅ Регулярно обновляется бесплатно (последнее обновление в апреле 2021 г.)
✅ Обновлено с бонусными ресурсами и руководствами ::: ::: :::
Визуализация данных в Python с помощью Matplotlib и Pandas - это книга, предназначенная для абсолютных новичков в работе с Pandas и Matplotlib с базовыми знаниями Python и позволяющая им создать прочную основу для расширенной работы с этими библиотеками - от простых графиков до анимированных трехмерных графиков с интерактивными кнопки.
Он служит подробным руководством, которое научит вас всему, что вам нужно знать о Pandas и Matplotlib, в том числе о том, как создавать типы графиков, которые не встроены в саму библиотеку.
Книга «Визуализация данных в Python» , книга для начинающих и средних разработчиков Python, проведет вас через простые манипуляции с данными с помощью Pandas, охватит основные библиотеки построения графиков, такие как Matplotlib и Seaborn, и покажет, как использовать преимущества декларативных и экспериментальных библиотек, таких как Altair. В частности, на протяжении 11 глав эта книга охватывает 9 библиотек Python: Pandas, Matplotlib, Seaborn, Bokeh, Altair, Plotly, GGPlot, GeoPandas и VisPy.
Он служит уникальным практическим руководством по визуализации данных в виде множества инструментов, которые вы можете использовать в своей карьере.