Визуализация данных (также называемая графикой) является одной из самых важных задач в анализе данных. Она может быть частью процесса исследования, например, помочь нам выявить аномальные значения, необходимые преобразования данных, получить представление о модели и т. д. Кроме того, создание интерактивной визуализации данных может быть конечной целью работы.
Python имеет множество библиотек для статической или динамической визуализации данных, но здесь основное внимание уделяется matplotlib (http://matplotlib.org/) и основанным на нём библиотекам.
Matplotlib — это пакет для создания высококачественных графиков, в основном двумерных. Проект был запущен Джоном Хантером в 2002 году с целью создания интерфейса для построения графиков в стиле MATLAB для Python. Matplotlib и сообщество IPython сотрудничают, упрощая интерактивное построение графиков из оболочки IPython (включая текущий Jupyter notebook). Matplotlib поддерживает множество различных графических интерфейсов пользователя (GUI) на разных операционных системах и также может экспортировать изображения в различные распространённые векторные и растровые форматы: PDF, SVG, JPG, PNG, BMP, GIF и другие. Большинство графиков в этой книге были созданы с его помощью.
Со временем из matplotlib развилось несколько инструментов для визуализации данных, использующих его в качестве основы. Одним из них является seaborn (http://seaborn.pydata.org/), который будет изучен позже в этой главе.
Самый простой способ изучить примеры кода в этой главе — создать интерактивные графики в Jupyter notebook. В Jupyter notebook выполните следующую команду:
%matplotlib notebook
Обычное соглашение об импорте matplotlib выглядит следующим образом:
In [11]: import matplotlib.pyplot as plt
После выполнения команды %matplotlib notebook (или %matplotlib в IPython) вы увидите простой график (рис. 9-1):
In [12]: import numpy as np
In [13]: data = np.arange(10)
In [14]: data
Out[14]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [15]: plt.plot(data)
Хотя такие библиотеки, как seaborn и встроенные функции построения графиков pandas, могут обрабатывать многие обычные задачи построения графиков, если вам нужно настроить некоторые расширенные функции, вам необходимо изучить API matplotlib.
Примечание: Хотя эта книга не обсуждает подробно все функции matplotlib, она даёт достаточно информации, чтобы ввести вас в курс дела. Примеры и документация matplotlib являются лучшими ресурсами для изучения продвинутых функций.
Все графики matplotlib находятся внутри объекта Figure. Вы можете использовать plt.figure для создания нового Figure:
In [16]: fig = plt.figure()
Если вы используете IPython, это вызовет всплывающее пустое окно, но в Jupyter вам придётся ввести больше команд, прежде чем вы что-то увидите. У plt.figure есть несколько параметров, особенно figsize, который используется для обеспечения определённого размера и соотношения сторон при сохранении изображения на диск.
Вы не можете рисовать графики на пустом Figure. Вам нужно создать один или несколько subplot с помощью add_subplot:
In [17]: ax1 = fig.add_subplot(2, 2, 1)
Эта команда означает, что изображение должно быть 2x2 (максимум 4 графика), и текущий выбор — первый из четырёх subplot (нумерация начинается с 1). Если вы создадите ещё два subplot, окончательное изображение будет выглядеть так, как показано на рисунке 9-2:
In [18]: ax2 = fig.add_subplot(2, 2, 2)
In [19]: ax3 = fig.add_subplot(2, 2, 3)
Подсказка: При использовании Jupyter notebook есть одно отличие: каждый раз, когда вы повторно выполняете код в маленьком окне, графики будут сбрасываться. Поэтому для сложных графиков вам нужно поместить все команды построения графика в одно маленькое окно.
Здесь мы выполняем все команды в одном маленьком окне:
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
Если теперь вы выполните одну команду построения графика (например, plt.plot([1.5, 3.5, -2, 1.6])), matplotlib построит график на последнем использованном subplot (если его нет, он создаст новый) и скроет процесс создания figure и subplot. Таким образом, если мы выполним следующие команды, вы получите результат, показанный на рисунке 9-3:
In [20]: plt.plot(np.random.randn(50).cumsum(), 'k--')
«k–» — это опция линии, которая сообщает matplotlib построить чёрную пунктирную линию. Объекты, возвращаемые fig.add_subplot, являются объектами AxesSubplot, и вы можете напрямую вызывать их методы экземпляра для рисования графиков в других пустых ячейках, как показано на рисунке 9-4:
In [21]: ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)
In [22]: ax2.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))
В документации matplotlib вы найдёте информацию о различных типах графиков.
Создание фигуры с сеткой subplot является очень распространённой задачей, и matplotlib предоставляет более удобный метод plt.subplots, который создаёт новую фигуру и возвращает массив NumPy, содержащий уже созданные объекты subplot:
In [24]: fig, axes = plt.subplots(2, 3)
In [25]: axes
Out[25]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7fb626374048>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7fb62625db00>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7fb6262f6c88>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x7fb6261a36a0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7fb626181860>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7fb6260fd4e0>]], dtype
=object)
Это очень полезно, потому что вы можете легко индексировать массив axes, как двумерный массив, например, axes[0,1]. Вы также можете указать, что subplot должен иметь одинаковые оси X или Y, используя параметры sharex и sharey. Это также очень полезно при сравнении данных в одинаковых диапазонах, иначе matplotlib автоматически масштабирует границы каждого графика. Для получения дополнительной информации см. таблицу 9-1.
По умолчанию matplotlib оставляет некоторое пространство вокруг subplot и некоторое пространство между subplot. Пространство связано с высотой и шириной графика, поэтому, если вы измените размер графика (будь то программирование или ручная настройка), пространство также будет автоматически отрегулировано. Вы можете легко изменить пространство, используя метод subplots_adjust фигуры, который также является методом верхнего уровня:
subplots_adjust(left=None, bottom=None, right=None, top=None,
wspace=None, hspace=None)
Параметры wspace и hspace используются для управления процентным соотношением ширины и высоты. Они используются в качестве интервала между subplot. Вот простой пример, где я уменьшил интервал до нуля (как показано на рисунке 9-5):
fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):
for j in range(2):
axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5) **Перевод текста на русский язык:**
Помимо стандартных типов графиков, вы также можете создавать аннотации, такие как текст, стрелки или другие графические элементы. Аннотации и текст можно добавить с помощью функций text, arrow и annotate. Функция text позволяет разместить текст в указанных координатах (x, y) графика, а также добавить пользовательские параметры:
```python
ax.text(x, y, 'Hello world!',
family='monospace', fontsize=10)
Аннотации могут содержать как текст, так и стрелки. Например, мы можем создать график кривой на основе последних данных индекса S&P 500 от Yahoo!Finance и отметить важные даты во время финансового кризиса 2008–2009 годов. Вы можете попробовать этот код в Jupyter notebook (рис. 9-11 показывает результат):
from datetime import datetime
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
data = pd.read_csv('examples/spx.csv', index_col=0, parse_dates=True)
spx = data['SPX']
spx.plot(ax=ax, style='k-')
crisis_data = [
(datetime(2007, 10, 11), 'Peak of bull market'),
(datetime(2008, 3, 12), 'Bear Stearns Fails'),
(datetime(2008, 9, 15), 'Lehman Bankruptcy')
]
for date, label in crisis_data:
ax.annotate(label, xy=(date, spx.asof(date) + 75),
xytext=(date, spx.asof(date) + 225),
arrowprops=dict(facecolor='black', headwidth=4, width=2,
headlength=4),
horizontalalignment='left', verticalalignment='top')
# Zoom in on 2007-2010
ax.set_xlim(['1/1/2007', '1/1/2011'])
ax.set_ylim([600, 1800])
ax.set_title('Important dates in the 2008-2009 financial crisis')
На этом графике есть несколько важных моментов: метод ax.annotate позволяет размещать метки в заданных координатах x и y. Мы используем set_xlim и set_ylim для установки начальных и конечных границ вручную, вместо использования метода по умолчанию от matplotlib. Наконец, мы добавляем заголовок к графику с помощью ax.set_title.
Для получения дополнительной информации о создании аннотаций обратитесь к онлайн-библиотеке примеров matplotlib.
Создание графиков может быть сложным процессом. Matplotlib предоставляет набор объектов, называемых патчами, которые представляют распространённые типы графиков. Некоторые из них, например Rectangle и Circle, можно найти в matplotlib.pyplot, но полный набор находится в matplotlib.patches.
Чтобы добавить патч на график, создайте объект shp, а затем добавьте его в подграфик с помощью ax.add_patch(shp) (см. рис. 9-12):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
rect = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color='k', alpha=0.3)
circ = plt.Circle((0.7, 0.2), 0.15, color='b', alpha=0.3)
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]],
color='g', alpha=0.5)
ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)
Если изучить реализацию кода для многих распространённых объектов графиков, то можно увидеть, что они на самом деле состоят из патчей.
Метод plt.savefig позволяет сохранить текущий график в файле. Этот метод аналогичен методу savefig для объекта Figure. Например, чтобы сохранить график как SVG-файл, введите:
plt.savefig('figpath.svg')
Тип файла определяется по расширению файла. Таким образом, если вы используете .pdf, результатом будет PDF-файл. При публикации изображений я чаще всего использую два важных параметра: dpi (контроль разрешения точек на дюйм) и bbox_inches (можно обрезать лишние пробелы вокруг графика). Чтобы получить изображение PNG с минимальными полями и разрешением 400 DPI, используйте:
plt.savefig('figpath.png', dpi=400, bbox_inches='tight')
savefig не обязательно записывать данные на диск, он также может записывать данные в любой файловый объект, такой как BytesIO:
from io import BytesIO
buffer = BytesIO()
plt.savefig(buffer)
plot_data = buffer.getvalue()
Таблица 9-2 содержит список других параметров savefig.
Matplotlib поставляется с несколькими цветовыми схемами, а также настройками по умолчанию для создания высококачественных изображений. К счастью, почти все настройки по умолчанию можно изменить с помощью набора глобальных параметров, которые управляют размером изображения, полями подграфика, цветовой схемой, размером шрифта, типом сетки и т. д. Одним из способов настройки системы в Python является использование метода rc. Например, чтобы установить глобальный размер изображения по умолчанию равным 10×10, выполните:
plt.rc('figure', figsize=(10, 10))
Первый параметр rc — это объект, который вы хотите настроить, например «figure», «axes», «xtick», «ytick», «grid», «legend» и т.д. За ним могут следовать дополнительные ключевые слова. Простой способ сделать это — поместить эти параметры в словарь:
font_options = {'family' : 'monospace',
'weight' : 'bold',
'size' : 'small'}
plt.rc('font', **font_options)
Полный список настраиваемых параметров можно найти в файле конфигурации matplotlib matplotlibrc, расположенном в каталоге matplotlib/mpl-data. Если вы внесли изменения в этот файл и поместили его в свой собственный каталог .matplotlibrc, то он будет загружаться каждый раз при использовании matplotlib.
В следующем разделе мы увидим, что пакет seaborn предоставляет несколько встроенных тем и типов графиков, использующих внутреннюю конфигурацию matplotlib. Данный текст описывает использование библиотеки matplotlib для создания графиков и диаграмм на основе данных из pandas.
В тексте рассказывается о том, как использовать метод plot для визуализации данных в виде графиков. Метод plot принимает ряд параметров, которые позволяют настроить внешний вид графика. В тексте также приводятся примеры использования метода plot для создания различных типов графиков, таких как линейные графики, гистограммы и столбчатые диаграммы.
Также в тексте описывается использование дополнительных параметров для настройки внешнего вида графиков, таких как цвет, размер и стиль линий.
Текст содержит примеры кода на языке Python, который иллюстрирует использование метода plot для построения различных графиков.
Основной язык текста — английский. Визуализация данных в Python: гистограммы, диаграммы и графики
В данном тексте рассказывается о визуализации данных с помощью Python. В частности, речь идёт о создании графиков и диаграмм с использованием библиотек matplotlib и seaborn.
Автор текста приводит примеры создания различных видов графиков: гистограмм, диаграмм рассеяния, точечных диаграмм и других. Также он показывает, как можно настроить внешний вид графиков с помощью параметров функций.
Текст содержит фрагменты кода на языке Python, которые иллюстрируют создание графиков. Автор также упоминает другие библиотеки для визуализации данных, такие как Boken и Plotly.
Это перевод исходного текста. Для более точного понимания содержания рекомендуется обратиться к оригиналу. Цель этой главы — ознакомиться с некоторыми основными операциями по визуализации данных при помощи pandas, matplotlib и seaborn.
Если визуальное представление результатов анализа данных важно для вашей работы, рекомендую обратиться к дополнительным ресурсам, чтобы изучить более эффективные методы визуализации. Это активная область исследований, и вы можете найти множество превосходных ресурсов как в онлайн-формате, так и в печатном виде.
В следующей главе мы сосредоточимся на операциях агрегирования и группировки данных в pandas.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )