2 min read

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

Временная метка (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