Временная метка (Timestamp)

Временная метка – набор кодированных символов, характеризующих время того или иного события в программировании.
Это специальный формат временной метки в модуле Python datetime
:
dt = datetime.datetime(2012, 5, 1)
А это – временная метка на языке библиотеки Pandas:
ts = pd.DatetimeIndex([dt])[0]
<Timestamp: 2012-05-01 00:00:00>
А здесь – временная метка на языке библиотеки NumPy:
dt64 = np.datetime64(dt)
numpy.datetime64('2012-05-01T01:00:00.000000+0100')
В отличие от Временного ряда (Time Series), который характеризует столбец Датафрейма (DataFrame), временная метка характеризует отдельную ячейку этого столбца.
Временная метка и datetime
Правильно подготовить Признак (Feature), выраженный временной меткой, можно с помощью библиотеки datetime. Для начала импортируем все необходимые надстройки:
import pandas as pd
import datetime as dt
Подгрузим небольшой Датасет (Dataset), содержащий данные о покупках в магазине сувениров:
df = pd.read_csv('https://www.dropbox.com/s/2ly8sx4ehwqe78o/gift-shop-purchases.csv?dl=1')
df.head()
Наш набор выглядит следующим образом:

Зачастую Pandas поверхностно "обходится" с признаками датафрейма и интерпретирует их как объекты. Посмотрим, к каким типам данных он относит временной ряд InvoiceDate
, выраженный временной меткой. Для этого используем встроенный метод Pandas.dtypes
:
df.dtypes
Удивительно, но факт: помимо причисления столбца временной метки к объектам, Pandas к тому же решил интерпретировать подобным образом и другие признаки – номер счета (InvoiceNo), артикул (StockCode), страну (Country). Возможно, это делается намеренно, чтобы Дата-сайентист (Data Scientist) обратил внимание на очевидные несоответствия и скорее переназначил(-а) признакам типы:
InvoiceNo object
StockCode object
Description object
Quantity int64
InvoiceDate object
UnitPrice float64
CustomerID float64
Country object
dtype: object
Восстановим справедливость, по крайней мере, к признаку "Дата выставления счета" и изменим тип на временную метку методом dt.to_datetime()
, который умен настолько, что даже не потребует Регулярного выражения (Regular Expression) с описанием формата даты:
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'])
df.dtypes
Тип столбца обновился. Система самостоятельно преобразовала объект во временную метку, и признак превратился во Временной ряд (Time Series).
InvoiceNo object
StockCode object
Description object
Quantity int64
InvoiceDate datetime64[ns]
UnitPrice float64
CustomerID float64
Country object
dtype: object
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Фото: @crisaur