1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/it-ebooks-pyda-2e-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
9.md 23 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 16:49 0ce2ae9

Глава 9. Графики и визуализация

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

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

9.1 Введение в API matplotlib

Обычное соглашение об импорте 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)

Рисунок 9-1. Простой линейный график

Хотя такие библиотеки, как seaborn и встроенные функции построения графиков pandas, могут обрабатывать многие обычные задачи построения графиков, если вам нужно настроить некоторые расширенные функции, вам необходимо изучить API matplotlib.

Примечание: Хотя эта книга не обсуждает подробно все функции matplotlib, она даёт достаточно информации, чтобы ввести вас в курс дела. Примеры и документация matplotlib являются лучшими ресурсами для изучения продвинутых функций.

Figure и Subplot

Все графики 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)

Рисунок 9-2. Рисунок с тремя subplot

Подсказка: При использовании 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--')

Рисунок 9-3. График после одного построения

«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))

Рисунок 9-4. Два дополнительных графика

В документации 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.

Таблица 9-1 Параметры pyplot.subplots

Регулировка интервалов вокруг subplot

По умолчанию 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/it-ebooks-pyda-2e-zh.git
git@api.gitlife.ru:oschina-mirror/it-ebooks-pyda-2e-zh.git
oschina-mirror
it-ebooks-pyda-2e-zh
it-ebooks-pyda-2e-zh
master