# Time series generator

Generate deterministic synthetic time-series CSV, TSV, JSON or NDJSON with configurable trend, seasonality, noise, missing values and outliers.

## Run it

- **CLI:** `gizza tool time-series-generator 'start=2024-01-01'`
- **Web:** https://gizza.ai/tools/time-series-generator/
- **Agents:** machine-readable descriptor (parameters JSON Schema) at https://gizza.ai/tools/time-series-generator/tool.json

## Inputs

- `start` — Start timestamp _(field)_
- `interval` — Interval _(field)_
- `count` — Rows _(field)_
- `base` — Base value _(field)_
- `trend` — Trend _(field)_
- `trend_strength` — Trend strength _(field)_
- `seasonality` — Seasonality _(field)_
- `period` — Period(s) _(field)_
- `amplitude` — Amplitude(s) _(field)_
- `weekday_pattern` — Weekday pattern _(field)_
- `combine` — Combine mode _(field)_
- `noise` — Noise _(field)_
- `noise_level` — Noise level _(field)_
- `noise_phi` — AR(1) phi _(field)_
- `missing_rate` — Missing rate _(field)_
- `outlier_rate` — Outlier rate _(field)_
- `outlier_magnitude` — Outlier magnitude _(field)_
- `outlier_direction` — Outlier direction _(field)_
- `min_value` — Minimum clamp _(field)_
- `max_value` — Maximum clamp _(field)_
- `series` — Series columns _(field)_
- `seed` — Seed _(field)_
- `decimals` — Decimals _(field)_
- `output` — Output format _(field)_
- `timestamp_format` — Timestamp format _(field)_
- `header` — Include header row _(field)_
- `labels` — Column labels _(field)_

## Output

- Generated series (text)

## Query parameters

Open the tool pre-filled and auto-run via URL:

- `start` — Start timestamp
- `interval` — Interval
- `count` — Rows
- `base` — Base value
- `trend` — Trend
- `trend_strength` — Trend strength
- `seasonality` — Seasonality
- `period` — Period(s)
- `amplitude` — Amplitude(s)
- `weekday_pattern` — Weekday pattern
- `combine` — Combine mode
- `noise` — Noise
- `noise_level` — Noise level
- `noise_phi` — AR(1) phi
- `missing_rate` — Missing rate
- `outlier_rate` — Outlier rate
- `outlier_magnitude` — Outlier magnitude
- `outlier_direction` — Outlier direction
- `min_value` — Minimum clamp
- `max_value` — Maximum clamp
- `series` — Series columns
- `seed` — Seed
- `decimals` — Decimals
- `output` — Output format
- `timestamp_format` — Timestamp format
- `header` — Include header row
- `labels` — Column labels

Example: `https://gizza.ai/tools/time-series-generator/?start=2024-01-01&interval=1d&count=100&base=100&trend=linear&trend_strength=0.5&seasonality=sine&period=7%20or%2024%2C168&amplitude=10%20or%208%2C4&weekday_pattern=1.1%2C%201.05%2C%201%2C%201.05%2C%201.25%2C%200.8%2C%200.7&combine=additive&noise=gaussian&noise_level=5&noise_phi=0.7&missing_rate=0&outlier_rate=0&outlier_magnitude=3&outlier_direction=both&min_value=0&max_value=250&series=1&seed=42&decimals=2&output=csv&timestamp_format=auto&header=true&labels=visits%2Csignups`

---

## About this tool

Time series generator creates reproducible test data for charts, forecasting pipelines, monitoring demos and data-cleaning fixtures. Pick a start timestamp, interval and row count, then layer on a trend, one or more seasonal cycles, seeded noise, missing values and outliers.

Use it when you need data that looks realistic enough to exercise code paths, but you still want every run to be deterministic. The same seed and settings produce the same CSV, TSV, JSON or NDJSON in the CLI, chat block and browser page.

Example: generate two days of hourly web traffic with daily seasonality and two value columns:

```bash
gizza tool time-series-generator start=2024-06-01T00:00:00Z interval=1h count=48 base=1000 period=24 amplitude=120 noise_level=20 series=2 labels=visits,signups seed=7
```

For QA fixtures, switch `output=stats` to inspect the achieved min, max, mean, standard deviation and how many values were blanked or spiked before handing the rows to another tool.

## Limits and edge cases

- Up to 100,000 rows, 20 series columns and 200,000 total emitted values.
- `period` and `amplitude` accept comma-separated lists, so `period=24,168 amplitude=8,4` combines daily and weekly cycles.
- `interval` supports fixed units (`ms`, `s`, `m`, `h`, `d`, `w`) and calendar units (`mo`, `q`, `y`).
- `missing_rate`, `outlier_rate` and all noise streams are seeded and deterministic.
- CSV/TSV missing values are empty cells; JSON/NDJSON missing values are `null`.
- This tool emits data only. It does not draw a chart; paste the CSV into the charting tool of your choice.

## FAQ

<details>
<summary>How do I make the same data again?</summary>

Keep the same `seed` and the same settings. Randomness comes from a deterministic SplitMix64 stream, so matching inputs reproduce exactly across the CLI and browser page.

</details>

<details>
<summary>Can I generate daily and weekly seasonality at the same time?</summary>

Yes. Put comma-separated cycles in `period` and matching strengths in `amplitude`, for example `period=24,168 amplitude=8,4` for hourly data with a daily and weekly wave.

</details>

<details>
<summary>What does multiplicative mode change?</summary>

In additive mode, seasonality and noise are added in raw units. In multiplicative mode, `amplitude` and `noise_level` are fractions of the current level, which is useful when larger values should also have larger swings.

</details>

<details>
<summary>How are missing values and outliers represented?</summary>

Missing values become empty cells in CSV/TSV and `null` in JSON/NDJSON. Outliers are applied before min/max clamps, so you can create spikes and still keep the final data inside a realistic range.

</details>

## Related tools

- [Identify a data sample's format, delimiter and columns](https://gizza.ai/tools/data-format-sniffer/): Paste a data sample and find out what it is: CSV, TSV, JSON, JSON Lines, XML, HTML, fixed-width or binary, plus delimiter, quote char, encoding and column types.
- [Format and filter structured JSON logs](https://gizza.ai/tools/json-log-formatter/): Pretty-print JSON log lines, flatten nested fields, filter by level or field, and export readable logs as text, table, JSON, or CSV.
- [Query Result Formatter](https://gizza.ai/tools/query-result-formatter/): Turn raw query result rows — a JSON array, CSV, or TSV — into a clean, aligned Markdown or ASCII table for docs and chat.
- [Smooth a noisy numeric series with a cubic spline](https://gizza.ai/tools/spline-smoother/): Fit a cubic smoothing spline to noisy numeric data. Choose automatic GCV/CV smoothing, p, lambda, or target degrees of freedom and return JSON, CSV, or SVG.
- [Task Format Converter](https://gizza.ai/tools/task-format-converter/): Convert task lists between todo.txt, Markdown checklists, JSON, and CSV while preserving priorities, tags, and dates.
