Open in Colab

Для этого урока используется набор данных air_quality_no2_long.csv.

Использование свойств даты и времени

Я хочу работать с датами в столбце datetime как объектами даты и времени вместо простого текста:

Первоначально значения в datetime являются символьными строками и не предоставляют никаких операций даты и времени (например, извлечение года, дня недели и т.д.). Применяя функцию to_datetime, pandas интерпретирует строки и преобразует их в объекты datetime (т.е. datetime64[ns, UTC]). В pandas мы называем эти объекты аналогично стандартной библиотеке datetime.datetime pandas.Timestamp.

Поскольку многие наборы данных содержат информацию в формате datetime в одном из столбцов, функции pandas.read_csv() и pandas.read_json() могут выполнить преобразование к датам в момент чтения данных через использование параметра parse_dates:

pd.read_csv("../data/air_quality_no2_long.csv", parse_dates=["datetime"])

Какая польза от объектов pandas.Timestamp?

С какой даты начинается и оканчивается набор данных?

Использование pandas.Timestamp для datetime позволяет нам производить расчеты с информацией о дате. Следовательно, мы можем использовать это, чтобы получить длину нашего временного ряда:

В результате получается объект pandas.Timedelta, аналогичный datetime.timedelta в стандартной библиотеке Python и определяющий продолжительность времени.

Различные концепции времени, поддерживаемые pandas, объясняются в разделе руководства пользователя о концепциях, связанных со временем.

Я хочу добавить новый столбец, содержащий только месяц измерения:

Используя Timestamp объекты, появляются многие связанные со временем свойства. Например month, year, weekofyear, quarter... Все эти свойства доступны по аксессору dt.

Обзор существующих свойств даты приведен в таблице.

Какая средняя концентрация $NO_2$ для каждого дня недели и для каждого места измерения?

Здесь мы хотим вычислить статистику для каждого дня недели и для каждого места измерения. Для группировки по рабочим дням мы используем свойство weekdayMonday=0 и Sunday=6) для Timestamp, которое также доступно через dt. Группировка по местоположениям и по дням недели выполняется, чтобы разделить вычисление среднего значения для каждой из этих комбинаций.

Типичный график для $NO_2$ в течение дня для всех станций. Другими словами, каково среднее значение для каждого часа дня?

Как и в предыдущем случае, мы хотим вычислить данную статистику (например, среднее $NO_2$) для каждого часа дня, мы снова можем использовать метод разделения-применения-объединения.

Datetime как индекс

pivot() использовалось, чтобы изменить таблицу данных с каждым из мест измерений в качестве отдельной колонки:

Поворачивая данные, информация о дате и времени стала индексом таблицы. Установка столбца в качестве индекса может быть достигнута функцией set_index.

Работа с индексом datetime (т.е. DatetimeIndex) обеспечивает мощные возможности. Например, нам не нужен метод dt для получения свойств временного ряда, но эти свойства доступны непосредственно в индексе:

Существуют другие преимущества: удобное подмножество периода времени или адаптированный масштаб времени на графиках. Давайте применим это к нашим данным.

Построим график показаний $NO_2$ на разных станциях с 20 мая до конца 21 мая:

Предоставляя строку, которая анализирует дату и время, можно выбрать конкретное подмножество данных в DatetimeIndex.

Более подробная информация о DatetimeIndex приведена в разделе, посвященном индексированию временных рядов.

Измените временной ряд на другую частоту

Объедините текущие значения часовых временных рядов с максимальным месячным значением на каждой из станций.

Очень мощный метод для временных рядов с индексом datetime - это возможность создавать resample() временные ряды с другой частотой (например, преобразовывать вторичные данные в данные за 5 минут).

Метод resample() похож на операцию GroupBy:

Обзор псевдонимов, используемых для определения частот временных рядов, приведен в таблице обзора псевдонимов смещения.

Когда определено, частота временного ряда обеспечена атрибутом freq:

Постройте график ежедневной медианы значений $NO_2$ для каждой из станций.

Более подробная информация о силе временных рядов resampling приведена в разделе инструкции пользователя на передискретизацию.

Полный обзор временных рядов приведен на страницах, посвященных временным рядам и функциям дат.