Как работать с датами и временем в NumPy: всё, что нужно знать о datetime64, pandas, tslibs и Timestamp

Что такое Datetime64 и зачем он нужен?

Datetime64 – это фундаментальный тип данных в NumPy, предназначенный для представления моментов времени. В отличие от стандартных Python datetime объектов, Datetime64 позволяет хранить даты и время в виде 64-битных целых чисел, что обеспечивает эффективное хранение и быструю обработку больших объемов данных, особенно при работе с временными рядами или анализом данных в маркетинге, например, при анализе логов веб-сервера или данных о рекламных кампаниях.

Создание массивов Datetime64 в NumPy

Создание Datetime64 массивов в NumPy – простая задача. Вот несколько примеров:

import numpy as np

# Создание массива Datetime64 с указанием конкретной даты
date_array = np.array(['2023-10-26', '2023-10-27', '2023-10-28'], dtype='datetime64[D]')
print(date_array)

# Создание массива Datetime64 с указанием единицы измерения времени (например, секунды)
time_array = np.array(['2023-10-26T10:00:00', '2023-10-26T10:00:05'], dtype='datetime64[s]')
print(time_array)

# Создание диапазона дат с помощью np.arange
date_range = np.arange('2023-10-20', '2023-10-30', dtype='datetime64[D]')
print(date_range)

Единицы измерения времени в Datetime64 (наносекунды, микросекунды, миллисекунды, секунды, минуты, часы, дни, недели, месяцы, годы)

Datetime64 поддерживает различные единицы измерения времени, что позволяет выбрать наиболее подходящую точность для ваших задач. Наиболее часто используемые единицы:

  • ns: наносекунды
  • us: микросекунды
  • ms: миллисекунды
  • s: секунды
  • m: минуты
  • h: часы
  • D: дни
  • W: недели
  • M: месяцы
  • Y: годы

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

Диапазон допустимых значений Datetime64

Диапазон допустимых значений Datetime64 зависит от выбранной единицы измерения. Важно учитывать этот аспект, особенно при работе с историческими данными или прогнозировании будущих событий. Например, использование datetime64[Y] может быть достаточным для долгосрочного анализа трендов, в то время как datetime64[ns] потребуется для высокочастотных финансовых данных.

Операции с Datetime64 массивами

Арифметические операции (сложение, вычитание дат и времени)

NumPy позволяет выполнять арифметические операции с Datetime64 массивами, что упрощает вычисление разницы между датами, добавление или вычитание интервалов времени. Результатом таких операций является массив типа timedelta64.

import numpy as np

# Создание двух массивов Datetime64
dates1 = np.array(['2023-10-26', '2023-10-27'], dtype='datetime64[D]')
dates2 = np.array(['2023-10-28', '2023-10-29'], dtype='datetime64[D]')

# Вычисление разницы между датами
diff = dates2 - dates1
print(diff) # Output: [2 2] days

# Добавление дней к дате
new_dates = dates1 + np.timedelta64(7, 'D')
print(new_dates)

Сравнение дат и времени

Datetime64 массивы можно сравнивать между собой с использованием стандартных операторов сравнения (<, >, ==, !=, <=, >=). Это полезно для фильтрации данных по диапазону дат или времени.

import numpy as np

dates = np.array(['2023-10-26', '2023-10-27', '2023-10-28'], dtype='datetime64[D]')

# Фильтрация дат, которые больше '2023-10-26'
filtered_dates = dates[dates > np.datetime64('2023-10-26')]
print(filtered_dates)

Сортировка Datetime64 массивов

NumPy предоставляет возможность сортировать Datetime64 массивы, что важно для анализа временных рядов и выявления трендов.

import numpy as np

dates = np.array(['2023-10-28', '2023-10-26', '2023-10-27'], dtype='datetime64[D]')

# Сортировка массива дат
sorted_dates = np.sort(dates)
print(sorted_dates)

Преобразование Datetime64 в другие типы данных

Datetime64 можно преобразовать в другие типы данных, например, в Unix timestamp (количество секунд, прошедших с начала эпохи Unix) или в строковый формат. Обратное преобразование также возможно.

import numpy as np

date = np.datetime64('2023-10-26')

# Преобразование в Unix timestamp
unix_timestamp = date.astype('datetime64[s]').astype('int64')
print(unix_timestamp)

# Преобразование в строку
date_string = str(date)
print(date_string)
Реклама

Интеграция с Pandas: Timestamp и DatetimeIndex

Обзор класса Timestamp в Pandas

Timestamp – это основной класс в Pandas для представления отдельных моментов времени. Он обеспечивает более удобный и гибкий интерфейс для работы с датами и временем, чем Datetime64 в NumPy.

Создание объектов Timestamp

Создать объект Timestamp можно различными способами:

import pandas as pd

# Создание Timestamp из строки
ts = pd.Timestamp('2023-10-26 10:30:00')
print(ts)

# Создание Timestamp из отдельных компонентов
ts = pd.Timestamp(year=2023, month=10, day=26, hour=10, minute=30, second=0)
print(ts)

DatetimeIndex: индексы на основе дат и времени

DatetimeIndex – это специализированный индекс в Pandas, предназначенный для хранения последовательностей дат и времени. Он позволяет эффективно выполнять операции фильтрации, агрегации и анализа данных, связанных с временными рядами. DatetimeIndex незаменим при работе с данными о времени показа рекламы, динамике цен и других временных показателях.

import pandas as pd

# Создание DatetimeIndex из списка дат
dates = ['2023-10-26', '2023-10-27', '2023-10-28']
dti = pd.DatetimeIndex(dates)
print(dti)

# Создание DatetimeIndex с помощью pd.date_range
dti = pd.date_range('2023-10-20', periods=10, freq='D')
print(dti)

Преобразование между Datetime64 NumPy и Timestamp Pandas

Pandas обеспечивает простую конвертацию между Datetime64 в NumPy и Timestamp в Pandas:

import numpy as np
import pandas as pd

# Преобразование Datetime64 в Timestamp
dt64 = np.datetime64('2023-10-26')
ts = pd.Timestamp(dt64)
print(ts)

# Преобразование Timestamp в Datetime64
ts = pd.Timestamp('2023-10-26')
dt64 = np.datetime64(ts)
print(dt64)

Библиотека Pandas Tslibs: инструменты для работы с датой и временем

Что такое Tslibs и её роль в Pandas?

tslibs – это низкоуровневая библиотека, лежащая в основе функциональности Pandas для работы с датой и временем. Она предоставляет эффективные структуры данных и алгоритмы для обработки временных рядов.

Основные классы и функции Tslibs (например, Period, Timedelta)

tslibs включает в себя ряд важных классов:

  • Period: представляет собой интервал времени фиксированной длины (например, месяц, квартал, год).
  • Timedelta: представляет собой разницу между двумя моментами времени.

Использование Tslibs для анализа временных рядов

tslibs предоставляет инструменты для выполнения сложных операций с временными рядами, таких как:

  • Вычисление скользящих средних
  • Ресемплинг данных (изменение частоты дискретизации)
  • Анализ сезонности

Продвинутые техники и распространённые задачи

Работа с часовыми поясами (Timezone awareness)

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

import pandas as pd

# Создание Timestamp с указанием часового пояса
ts = pd.Timestamp('2023-10-26 10:00:00', tz='US/Eastern')
print(ts)

# Преобразование в другой часовой пояс
ts_utc = ts.tz_convert('UTC')
print(ts_utc)

Форматирование Datetime64 и Timestamp

Форматирование дат и времени позволяет представить их в нужном формате для отображения или сохранения в файл. Pandas предоставляет широкие возможности для форматирования с использованием спецификаторов формата, как в Python strftime.

import pandas as pd

# Форматирование Timestamp
ts = pd.Timestamp('2023-10-26 10:30:00')
formatted_date = ts.strftime('%Y-%m-%d %H:%M:%S')
print(formatted_date)

Вычисление разницы между датами и временем (Timedelta)

Timedelta позволяет точно измерять промежутки времени между датами. Это полезно, например, для анализа времени отклика на рекламу или длительности сеансов пользователей на веб-сайте.

import pandas as pd

# Вычисление разницы между датами
date1 = pd.Timestamp('2023-10-26')
date2 = pd.Timestamp('2023-10-28')
td = date2 - date1
print(td)

# Получение количества дней в Timedelta
days = td.days
print(days)

Обработка пропущенных значений дат и времени

Пропущенные значения дат и времени могут возникать в реальных данных. Pandas предоставляет инструменты для их обработки, такие как заполнение (imputation) или удаление.

import pandas as pd
import numpy as np

# Создание Series с пропущенными значениями
dates = pd.Series([pd.Timestamp('2023-10-26'), None, pd.Timestamp('2023-10-28')])
print(dates)

# Заполнение пропущенных значений предыдущей датой
filled_dates = dates.fillna(method='ffill')
print(filled_dates)

Добавить комментарий