period_summary
period_summary ¤
Weekly/monthly summary module.
Roll up daily metrics to weekly/monthly summaries: - Weekly summary of KPIs - Monthly totals and averages - Period-over-period comparison
Two modes of operation:
1. From raw signals: weekly_summary(counter_uuid, ...)
2. From pre-computed daily DataFrames: from_daily_data(daily_df)
PeriodSummary ¤
PeriodSummary(
dataframe: DataFrame, *, time_column: str = "systime"
)
Bases: Base
Aggregate daily metrics into weekly/monthly summaries.
Merge keys: [week_start, week_end] for weekly, [year, month] for monthly.
Two usage patterns:
Pattern A — from raw signals:
summary = PeriodSummary(df)
weekly = summary.weekly_summary(counter_uuid='prod')
Pattern B — pipeline (compose from upstream modules):
# Build a daily DataFrame from any combination of upstream modules
quality = QualityTracking(df).daily_quality_summary('ok', 'nok')
downtime = DowntimeTracking(df).availability_trend('state', window='1D')
# Merge on date
daily = quality.merge(downtime.rename(columns={'period': 'date'}), on='date')
# Roll up to weekly/monthly
weekly = PeriodSummary.from_daily_data(daily, freq='W')
monthly = PeriodSummary.from_daily_data(daily, freq='MS')
from_daily_data
staticmethod
¤
from_daily_data(
daily_df: DataFrame,
*,
freq: str = "W",
date_column: str = "date"
) -> pd.DataFrame
Roll up a pre-computed daily DataFrame to weekly or monthly.
This is the pipeline-friendly entry-point. It accepts any daily DataFrame (e.g. merged output of QualityTracking, DowntimeTracking, OEECalculator) and aggregates numeric columns.
Numeric columns are aggregated as follows:
- Columns containing _pct or pct: averaged (mean).
- Columns containing parts, quantity, production, minutes:
summed.
- All other numeric columns: summed.
The output always includes period_start, period_end, and
days columns.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
daily_df
|
DataFrame
|
DataFrame with a date column and numeric metric columns. Expected merge key: [date]. |
required |
freq
|
str
|
Pandas frequency string. 'W' = weekly (Monday start), 'MS' = monthly. |
'W'
|
date_column
|
str
|
Name of the date column. |
'date'
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with period_start, period_end, days, and aggregated |
DataFrame
|
metric columns. |
Example::
quality = QualityTracking(df).daily_quality_summary('ok', 'nok')
weekly = PeriodSummary.from_daily_data(quality, freq='W')
# → [period_start, period_end, days, ok_parts, nok_parts,
# total_parts, quality_pct, ...]
weekly_summary ¤
weekly_summary(
counter_uuid: str,
ok_counter_uuid: Optional[str] = None,
nok_counter_uuid: Optional[str] = None,
*,
value_column: str = "value_integer"
) -> pd.DataFrame
Roll up daily production to weekly summaries from raw signals.
For pipeline usage with pre-computed DataFrames, use
:meth:from_daily_data instead.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
counter_uuid
|
str
|
UUID of production counter. |
required |
ok_counter_uuid
|
Optional[str]
|
UUID of good parts counter (optional). |
None
|
nok_counter_uuid
|
Optional[str]
|
UUID of defective parts counter (optional). |
None
|
value_column
|
str
|
Column containing counter values. |
'value_integer'
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with columns: |
DataFrame
|
|
monthly_summary ¤
monthly_summary(
counter_uuid: str,
ok_counter_uuid: Optional[str] = None,
nok_counter_uuid: Optional[str] = None,
*,
value_column: str = "value_integer"
) -> pd.DataFrame
Roll up daily production to monthly summaries from raw signals.
For pipeline usage with pre-computed DataFrames, use
:meth:from_daily_data instead.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
counter_uuid
|
str
|
UUID of production counter. |
required |
ok_counter_uuid
|
Optional[str]
|
UUID of good parts counter (optional). |
None
|
nok_counter_uuid
|
Optional[str]
|
UUID of defective parts counter (optional). |
None
|
value_column
|
str
|
Column containing counter values. |
'value_integer'
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with columns: |
DataFrame
|
|
compare_periods ¤
compare_periods(
counter_uuid: str,
period1: tuple[str, str],
period2: tuple[str, str],
*,
value_column: str = "value_integer"
) -> pd.DataFrame
Compare production between two time periods.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
counter_uuid
|
str
|
UUID of production counter. |
required |
period1
|
tuple[str, str]
|
Tuple of (start_date, end_date) for first period. |
required |
period2
|
tuple[str, str]
|
Tuple of (start_date, end_date) for second period. |
required |
value_column
|
str
|
Column containing counter values. |
'value_integer'
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with columns: |
DataFrame
|
|