import pandas as pd
import matplotlib.pyplot as plt
Для этого урока используются данные о качестве воздуха (наличие оксида озота в атмосфере).
Источник данных, для получения используется модуль py-openaq.
Набор данных air_quality_no2.csv
содержит значения оксида озота ($NO_2$) для измерительных станций FR04014
, BETR801
и London Westminster
соответственно в Париже, Антверпене и Лондоне.
В России сведения не собирают, см. карту
url = "https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5%20%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B2%20pandas/data/air_quality_no2.csv"
air_quality = pd.read_csv(url,
index_col=0,
parse_dates=True)
air_quality.head()
station_antwerp | station_paris | station_london | |
---|---|---|---|
datetime | |||
2019-05-07 02:00:00 | NaN | NaN | 23.0 |
2019-05-07 03:00:00 | 50.5 | 25.0 | 19.0 |
2019-05-07 04:00:00 | 45.0 | 27.7 | 19.0 |
2019-05-07 05:00:00 | NaN | 50.4 | 16.0 |
2019-05-07 06:00:00 | NaN | 61.9 | NaN |
Использование параметров index_col
и parse_dates
функции read_csv
для определения первого (0-го) столбца в качестве индекса DataFrame
и преобразование значений индекса в объекты типа Timestamp
соотвественно.
Я хочу быстро получить визуальное представление данных:
air_quality.plot();
По умолчанию создается один линейный график для каждого из столбцов таблицы с числовыми данными.
Я хочу построить график только для столбцов с данными из Парижа:
air_quality["station_paris"].plot();
Чтобы построить график для конкретного столбца таблицы, используйте методы выбора данных подмножеств в сочетании с методом plot()
.
plot()
работает для Series
и DataFrame
.
Я хочу визуально сопоставить значения $NO_2$ в Лондоне и Парижа.
# https://matplotlib.org/3.2.1/api/_as_gen/matplotlib.pyplot.scatter.html
air_quality.plot.scatter(x="station_london",
y="station_paris",
alpha=0.5);
Помимо линейного графика по умолчанию при использовании функции plot
существует ряд альтернатив.
Давайте используем стандартный Python, чтобы получить обзор доступных методов для построения графика:
[method_name for method_name in dir(air_quality.plot) if not method_name.startswith("_")]
['area', 'bar', 'barh', 'box', 'density', 'hexbin', 'hist', 'kde', 'line', 'pie', 'scatter']
В jupyter notebook
используйте кнопку TAB
, чтобы получить обзор доступных методов, например air_quality.plot.+ TAB
.
Пример DataFrame.plot.box()
:
air_quality.plot.box();
Для ознакомления с графиками, отличными от линейного, см. Раздел руководства пользователя о поддерживаемых стилях графиков.
Я хочу, чтобы каждый из столбцов отображался в отдельном графике:
axs = air_quality.plot.area(figsize=(12, 4), subplots=True)
Отдельные подграфики для каждого из столбцов данных поддерживаются аргументом subplots
функции plot
.
Некоторые дополнительные параметры форматирования описаны в разделе руководства пользователя по форматированию графиков.
Я хочу дополнительно настроить, расширить или сохранить полученный график:
fig, axs = plt.subplots(figsize=(12, 4)); # Create an empty matplotlib Figure and Axes
air_quality.plot.area(ax=axs); # Use pandas to put the area plot on the prepared Figure/Axes
axs.set_ylabel("NO$_2$ concentration"); # Do any matplotlib customization you like
fig.savefig("no2_concentrations.png") # Save the Figure/Axes using the existing matplotlib method.
Каждый из графических объектов, созданных pandas
, является объектом matplotlib
. Поскольку Matplotlib
предоставляет множество опций для настройки графиков, прямая связь между pandas
и Matplotlib
позволяет использовать всю мощь matplotlib
для графика.
Полный обзор представлен на страницах визуализации в pandas
.