На данный момент это невероятно медленно, вызывает проблемы с памятью и, в конечном итоге, сбой ядра Python.
В качестве примера я использую строку pl.DataFrame размером ~2 м с ~300 столбцами, что является набор данных временных рядов с ежеминутной частотой. На этих данных я выполняю
Код: Выделить всё
def ols_slope(y: pl.Expr) -> pl.Expr:
# Calculate linear regression slope
x = y.rank("ordinal")
numerator = ((x - x.mean())*(y - y.mean())).sum()
denominator = ((x - x.mean())**2).sum()
return numerator / denominator
Код: Выделить всё
def ols_offset(y: pl.Expr) -> pl.Expr:
# Calculate linear regression offset
x = y.rank("ordinal")
numerator = ((x - x.mean())*(y - y.mean())).sum()
denominator = ((x - x.mean())**2).sum()
return (numerator / denominator) * x.mean() - y.mean()
Код: Выделить всё
raw_data = (
pl.read_ipc("../data_vault_1min.feather")
.with_columns(
[
pl.col("A1").rolling_map(ols_slope, window_size=60, min_periods=3).alias("A1_hourly_lin_pred"),
pl.col("A1").rolling_map(ols_slope, window_size=60, min_periods=3).alias("A1_hourly_lin_pred")
]
)
)
Тем не менее, эта единственная операция всегда полностью перегружает мою память и приводит к сбою ядра.
Она хорошо работает на небольшом подмножестве данных
Подробнее здесь: https://stackoverflow.com/questions/782 ... hon-polars
Мобильная версия