Я работаю над анализом временных рядов. У меня есть dask dataframe ~ 600M строк. Я создаю функции даты и времени, используя приведенную ниже функцию
def get_date_features(data):
# generate date features
data['year'] = data['date'].dt.year
data['quarter'] = data['date'].dt.quarter
data['month'] = data['date'].dt.month
data['day'] = data['date'].dt.day
data['weekday'] = data['date'].dt.weekday
data['is_monthend'] = data['date'].dt.is_month_end * 1
data['is_monthstart'] = data['date'].dt.is_month_start * 1
data['is_quarterend'] = data['date'].dt.is_quarter_end * 1
data['is_quarterstart'] = data['date'].dt.is_quarter_start * 1
data['is_yearend'] = data['date'].dt.is_year_end * 1
data['is_yearstart'] = data['date'].dt.is_year_start * 1
data['dayofyear'] = data['date'].dt.dayofyear
data['weekofyear'] = data['date'].dt.weekofyear
data['daysinmonth'] = data['date'].dt.days_in_month
return data
data = get_date_features(data)
, а затем меняю типы данных
cols = ['quarter', 'month', 'day','weekofyear', 'daysinmonth',
'weekday', 'is_monthend', 'is_monthstart', 'is_quarterend',
'is_quarterstart', 'is_yearend', 'is_yearstart', 'dayofyear'
]
for col in cols:
data[col] = data[col].astype(np.uint8)
for col in ['year']:
data[col] = data[col].astype(np.uint16)
Когда я проверяю dtypes, print(data.dtypes)
, я вижу их преобразованными,
year uint16
quarter uint8
month uint8
day uint8
weekday uint8
is_monthend uint8
is_monthstart uint8
is_quarterend uint8
is_quarterstart uint8
is_yearend uint8
is_yearstart uint8
dayofyear uint8
weekofyear uint8
daysinmonth uint8
Когда я запускаю data.visualize()
, чтобы увидеть план распараллеливания для вычисления dask, код выполняется более часа, и я его прервал. И я попытался запустить data=data.compute()
, который прерывается из-за недостаточной ошибки памяти.
Я использую 16 ГБ ОЗУ. ~ 2 ГБ ОЗУ занято до data.compute()
шага
при выполнении data.head()
, я могу видеть 5 верхних строк с извлеченными функциями даты и времени, но data.shape.compute()
возвращает ошибку, 'tuple' object has no attribute 'compute'
Нужно ли здесь запускать data.compute()
. Кроме того, когда я пытаюсь merge
другой кадр данных после этого процесса (или) попытаться сгенерировать функции lag & groupby , выполнение прерывается с недостаточной ошибкой памяти .
Является ли dask подходящим инструментом для моей проблемы или есть какой-либо другой пакет python, который может помочь мне решить эту проблему?
Кроме того, есть ли способ решить эту проблему без увеличения конфигурации ОЗУ ? Любая помощь / направление очень ценится.