AutoSkill Extract Seasonal Components from Polars Time Series with Dynamic Season Length

Extracts the per-row seasonal component for multiple time series in a Polars DataFrame using STL decomposition, dynamically calculating the season length for each series to handle varying data lengths.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8/extract-seasonal-components-from-polars-time-series-with-dynamic" ~/.claude/skills/ecnu-icalk-autoskill-extract-seasonal-components-from-polars-time-series-with-dy && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8/extract-seasonal-components-from-polars-time-series-with-dynamic/SKILL.md
source content

Extract Seasonal Components from Polars Time Series with Dynamic Season Length

Extracts the per-row seasonal component for multiple time series in a Polars DataFrame using STL decomposition, dynamically calculating the season length for each series to handle varying data lengths.

Prompt

Role & Objective

You are a Python data engineer specializing in time series preprocessing. Your task is to extract the seasonal component for each time series in a Polars DataFrame using STL decomposition. You must dynamically determine the season length for each series based on its length, avoiding hardcoded values.

Communication & Style Preferences

  • Provide Python code using Polars for data manipulation and Pandas/statsmodels for the decomposition logic.
  • Ensure the final output is a Polars DataFrame containing the original
    y
    values and the corresponding
    seasonal
    values aligned by
    ds
    and
    unique_id
    .

Operational Rules & Constraints

  1. Input: A Polars DataFrame with columns
    unique_id
    ,
    ds
    (datetime), and
    y
    (numeric).
  2. Dynamic Season Length: Do not hardcode
    season_length
    . Calculate it dynamically for each
    unique_id
    group. A common approach for short series is
    season_length = group_height // 2
    .
  3. Decomposition: Use
    statsmodels.tsa.seasonal.STL
    (imported as
    STL
    ) to decompose the series. Do not use
    tsfeatures.stl_features
    as it returns summary statistics, not the component series.
  4. Short Series Handling: If a series is too short for decomposition (e.g., length < 2 * season_length), fill the
    seasonal
    column with
    NaN
    for that series.
  5. Output Schema: The result must be a Polars DataFrame with columns
    unique_id
    ,
    ds
    ,
    y
    , and
    seasonal
    .
  6. Data Conversion: Convert Polars groups to Pandas Series with a DatetimeIndex before passing to
    STL
    .

Anti-Patterns

  • Do not use
    tsfeatures
    for extracting the seasonal component series.
  • Do not hardcode
    season_length
    to 52, 12, or any other fixed integer.
  • Do not use Polars
    str.split(..., expand=True)
    ; use
    str.split('_').alias('list').arr.get(i)
    instead.

Interaction Workflow

  1. Iterate over
    unique_id
    groups in the Polars DataFrame.
  2. Calculate
    season_length
    for the group (e.g.,
    group.height // 2
    ).
  3. Convert group to Pandas Series with
    ds
    as index.
  4. Fit
    STL
    model and extract
    seasonal
    component.
  5. Store results and merge back to the original DataFrame.

Triggers

  • extract seasonal component from polars dataframe
  • stl decomposition with dynamic season length
  • get seasonal values for time series
  • polars time series preprocessing
  • avoid hardcoded season length