У меня есть базовые принципы, которые работают очень хорошо , т. е. использование динамической группировки для создания окон, и большинство основных функций tsfel могут быть напрямую переопределены как пользовательские функции Polars (возможно, я могу это оптимизировать, но на данный момент производительность в порядке), т.е.
Код: Выделить всё
def var_larger_than_std(x: pl.Series) -> bool:
"""
Is variance higher than the standard deviation?
Boolean variable denoting if the variance of x is greater than its standard deviation. Is equal to variance of x
being larger than 1
:param x: the time series to calculate the feature of
:type x: pl.Series
:return: the value of this feature
:return type: bool
"""
y = x.var()
return y > np.sqrt(y)
q = (
dataset.lazy() \
.groupby_dynamic("ts_local", every="1d", by="id") \
.agg([
pl.col("value").count().alias("value__count"),
var_larger_than_std(pl.col("value")).alias("value__var_larger_than_std"),
])
)
q.collect()
Как я могу воспроизвести это в полярах? Допустим, у меня есть функция
Код: Выделить всё
def complex_feature(x: pl.Series) -> Dict[str, float]:
return {"col1":0.0, "col2":1.0}
q = (
dataset.lazy() \
.groupby_dynamic("ts_local", every="1d", by="id") \
.agg([
complex_feature(pl.col("value")).???,
])
)
q.collect()
Код: Выделить всё
┌────────────────────────────────────┬──────┬──────┐
│ ts_local ┆ col1 ┆ col2 │
│ -------- ┆ ---- ┆ ---- │
│ timestamp[ns,tz=Australia/Sydney] ┆ f64 ┆ f64 │
╞════════════════════════════════════╪══════╪══════╡
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2023-01-01 ┆ 0.0 ┆ 1.0 │
└────────────────────────────────────┴──────┴──────┘
Подробнее здесь: https://stackoverflow.com/questions/756 ... e-features
Мобильная версия