timeseries-eda 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. timeseries_eda-0.1.0/CHANGELOG.rst +38 -0
  2. timeseries_eda-0.1.0/LICENSE +21 -0
  3. timeseries_eda-0.1.0/MANIFEST.in +5 -0
  4. timeseries_eda-0.1.0/PKG-INFO +247 -0
  5. timeseries_eda-0.1.0/README.rst +176 -0
  6. timeseries_eda-0.1.0/docs/api/anomaly.rst +18 -0
  7. timeseries_eda-0.1.0/docs/api/changepoint.rst +18 -0
  8. timeseries_eda-0.1.0/docs/api/core.rst +37 -0
  9. timeseries_eda-0.1.0/docs/api/decomposition.rst +24 -0
  10. timeseries_eda-0.1.0/docs/api/features.rst +24 -0
  11. timeseries_eda-0.1.0/docs/api/forecastability.rst +24 -0
  12. timeseries_eda-0.1.0/docs/api/quality.rst +33 -0
  13. timeseries_eda-0.1.0/docs/api/report.rst +18 -0
  14. timeseries_eda-0.1.0/docs/api/seasonality.rst +18 -0
  15. timeseries_eda-0.1.0/docs/api/statistics.rst +33 -0
  16. timeseries_eda-0.1.0/docs/api/visualization.rst +70 -0
  17. timeseries_eda-0.1.0/docs/changelog.rst +1 -0
  18. timeseries_eda-0.1.0/docs/conf.py +107 -0
  19. timeseries_eda-0.1.0/docs/contributing.rst +5 -0
  20. timeseries_eda-0.1.0/docs/index.rst +72 -0
  21. timeseries_eda-0.1.0/docs/user_guide/anomaly.rst +6 -0
  22. timeseries_eda-0.1.0/docs/user_guide/decomposition.rst +6 -0
  23. timeseries_eda-0.1.0/docs/user_guide/features.rst +6 -0
  24. timeseries_eda-0.1.0/docs/user_guide/forecastability.rst +6 -0
  25. timeseries_eda-0.1.0/docs/user_guide/installation.rst +6 -0
  26. timeseries_eda-0.1.0/docs/user_guide/quality.rst +6 -0
  27. timeseries_eda-0.1.0/docs/user_guide/quickstart.rst +6 -0
  28. timeseries_eda-0.1.0/docs/user_guide/reports.rst +6 -0
  29. timeseries_eda-0.1.0/docs/user_guide/seasonality.rst +6 -0
  30. timeseries_eda-0.1.0/docs/user_guide/statistics.rst +6 -0
  31. timeseries_eda-0.1.0/docs/user_guide/timeseries_object.rst +6 -0
  32. timeseries_eda-0.1.0/docs/user_guide/visualization.rst +6 -0
  33. timeseries_eda-0.1.0/pyproject.toml +115 -0
  34. timeseries_eda-0.1.0/setup.cfg +4 -0
  35. timeseries_eda-0.1.0/timeseries_eda.egg-info/PKG-INFO +247 -0
  36. timeseries_eda-0.1.0/timeseries_eda.egg-info/SOURCES.txt +79 -0
  37. timeseries_eda-0.1.0/timeseries_eda.egg-info/dependency_links.txt +1 -0
  38. timeseries_eda-0.1.0/timeseries_eda.egg-info/requires.txt +25 -0
  39. timeseries_eda-0.1.0/timeseries_eda.egg-info/top_level.txt +1 -0
  40. timeseries_eda-0.1.0/tseda/__init__.py +72 -0
  41. timeseries_eda-0.1.0/tseda/anomaly/__init__.py +18 -0
  42. timeseries_eda-0.1.0/tseda/anomaly/detector.py +657 -0
  43. timeseries_eda-0.1.0/tseda/changepoint/__init__.py +17 -0
  44. timeseries_eda-0.1.0/tseda/changepoint/detector.py +670 -0
  45. timeseries_eda-0.1.0/tseda/core/__init__.py +48 -0
  46. timeseries_eda-0.1.0/tseda/core/timeseries.py +1087 -0
  47. timeseries_eda-0.1.0/tseda/core/types.py +108 -0
  48. timeseries_eda-0.1.0/tseda/core/validator.py +311 -0
  49. timeseries_eda-0.1.0/tseda/decomposition/__init__.py +24 -0
  50. timeseries_eda-0.1.0/tseda/decomposition/classical.py +456 -0
  51. timeseries_eda-0.1.0/tseda/decomposition/stl.py +291 -0
  52. timeseries_eda-0.1.0/tseda/features/__init__.py +24 -0
  53. timeseries_eda-0.1.0/tseda/features/spectral.py +215 -0
  54. timeseries_eda-0.1.0/tseda/features/statistical.py +330 -0
  55. timeseries_eda-0.1.0/tseda/features/temporal.py +165 -0
  56. timeseries_eda-0.1.0/tseda/forecastability/__init__.py +23 -0
  57. timeseries_eda-0.1.0/tseda/forecastability/leakage.py +330 -0
  58. timeseries_eda-0.1.0/tseda/forecastability/scorer.py +454 -0
  59. timeseries_eda-0.1.0/tseda/quality/__init__.py +33 -0
  60. timeseries_eda-0.1.0/tseda/quality/duplicates.py +421 -0
  61. timeseries_eda-0.1.0/tseda/quality/missing.py +389 -0
  62. timeseries_eda-0.1.0/tseda/quality/outliers.py +618 -0
  63. timeseries_eda-0.1.0/tseda/report/__init__.py +20 -0
  64. timeseries_eda-0.1.0/tseda/report/console_report.py +252 -0
  65. timeseries_eda-0.1.0/tseda/report/html_report.py +565 -0
  66. timeseries_eda-0.1.0/tseda/seasonality/__init__.py +18 -0
  67. timeseries_eda-0.1.0/tseda/seasonality/detector.py +601 -0
  68. timeseries_eda-0.1.0/tseda/statistics/__init__.py +36 -0
  69. timeseries_eda-0.1.0/tseda/statistics/autocorrelation.py +391 -0
  70. timeseries_eda-0.1.0/tseda/statistics/descriptive.py +348 -0
  71. timeseries_eda-0.1.0/tseda/statistics/stationarity.py +695 -0
  72. timeseries_eda-0.1.0/tseda/visualization/__init__.py +142 -0
  73. timeseries_eda-0.1.0/tseda/visualization/anomaly_plots.py +154 -0
  74. timeseries_eda-0.1.0/tseda/visualization/base.py +75 -0
  75. timeseries_eda-0.1.0/tseda/visualization/changepoint_plots.py +155 -0
  76. timeseries_eda-0.1.0/tseda/visualization/correlation_plots.py +148 -0
  77. timeseries_eda-0.1.0/tseda/visualization/decomposition_plots.py +201 -0
  78. timeseries_eda-0.1.0/tseda/visualization/distribution_plots.py +164 -0
  79. timeseries_eda-0.1.0/tseda/visualization/quality_plots.py +157 -0
  80. timeseries_eda-0.1.0/tseda/visualization/seasonality_plots.py +253 -0
  81. timeseries_eda-0.1.0/tseda/visualization/time_plots.py +353 -0
@@ -0,0 +1,38 @@
1
+ Changelog
2
+ =========
3
+
4
+ All notable changes to ``tseda`` are documented here.
5
+ This project follows `Semantic Versioning <https://semver.org/>`_.
6
+
7
+ ----
8
+
9
+ 0.1.0 (2026-06-21)
10
+ -------------------
11
+
12
+ Initial release.
13
+
14
+ **Modules**
15
+
16
+ * ``tseda.core`` — :class:`~tseda.core.TimeSeries` data structure,
17
+ type aliases (:class:`~tseda.core.Frequency`, :class:`~tseda.core.AggMethod`,
18
+ :class:`~tseda.core.DiffMethod`), and validators.
19
+
20
+ * ``tseda.quality`` — Missing-value analysis
21
+ (:class:`~tseda.quality.MissingValueAnalyzer`), outlier detection with
22
+ IQR / Z-score / MAD / GESD (:class:`~tseda.quality.OutlierDetector`),
23
+ and flat-line / near-zero detection
24
+ (:class:`~tseda.quality.DuplicateDetector`).
25
+
26
+ * ``tseda.statistics`` — Comprehensive descriptive statistics
27
+ (:class:`~tseda.statistics.DescriptiveAnalyzer`), stationarity tests
28
+ ADF / KPSS / Phillips-Perron (:class:`~tseda.statistics.StationarityTester`),
29
+ and ACF / PACF / Ljung-Box autocorrelation analysis
30
+ (:class:`~tseda.statistics.AutocorrelationAnalyzer`).
31
+
32
+ * ``tseda.decomposition`` — Classical additive / multiplicative decomposition
33
+ (:class:`~tseda.decomposition.ClassicalDecomposer`) and STL decomposition
34
+ (:class:`~tseda.decomposition.STLDecomposer`).
35
+
36
+ * ``tseda.seasonality`` — Seasonal period detection via FFT periodogram,
37
+ ACF peaks, and combined scoring with Fisher G-test
38
+ (:class:`~tseda.seasonality.SeasonalityDetector`).
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Amirhossein Jafari
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,5 @@
1
+ include LICENSE
2
+ include README.rst
3
+ include CHANGELOG.rst
4
+ recursive-include tseda *.py
5
+ recursive-include docs *.rst *.py *.png *.svg
@@ -0,0 +1,247 @@
1
+ Metadata-Version: 2.4
2
+ Name: timeseries-eda
3
+ Version: 0.1.0
4
+ Summary: Comprehensive Time Series Exploratory Data Analysis toolkit
5
+ Author-email: Amirhossein Jafari <ajafari@gwu.edu>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 Amirhossein Jafari
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+ Project-URL: Homepage, https://github.com/amir-jafari/Time-Series-EDA
28
+ Project-URL: Documentation, https://amir-jafari.github.io/Time-Series-EDA
29
+ Project-URL: Repository, https://github.com/amir-jafari/Time-Series-EDA
30
+ Project-URL: Issues, https://github.com/amir-jafari/Time-Series-EDA/issues
31
+ Project-URL: Changelog, https://github.com/amir-jafari/Time-Series-EDA/blob/main/CHANGELOG.rst
32
+ Keywords: time series,eda,exploratory data analysis,forecasting,statistics,anomaly detection,seasonality,decomposition
33
+ Classifier: Development Status :: 3 - Alpha
34
+ Classifier: Intended Audience :: Science/Research
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: License :: OSI Approved :: MIT License
37
+ Classifier: Programming Language :: Python :: 3
38
+ Classifier: Programming Language :: Python :: 3.9
39
+ Classifier: Programming Language :: Python :: 3.10
40
+ Classifier: Programming Language :: Python :: 3.11
41
+ Classifier: Programming Language :: Python :: 3.12
42
+ Classifier: Topic :: Scientific/Engineering
43
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
44
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
45
+ Classifier: Operating System :: OS Independent
46
+ Requires-Python: >=3.9
47
+ Description-Content-Type: text/x-rst
48
+ License-File: LICENSE
49
+ Requires-Dist: numpy>=1.23
50
+ Requires-Dist: pandas>=1.5
51
+ Requires-Dist: scipy>=1.9
52
+ Requires-Dist: matplotlib>=3.6
53
+ Provides-Extra: stats
54
+ Requires-Dist: statsmodels>=0.14; extra == "stats"
55
+ Provides-Extra: dev
56
+ Requires-Dist: pytest>=7.4; extra == "dev"
57
+ Requires-Dist: pytest-cov>=4.1; extra == "dev"
58
+ Requires-Dist: black>=24.0; extra == "dev"
59
+ Requires-Dist: ruff>=0.4; extra == "dev"
60
+ Requires-Dist: mypy>=1.9; extra == "dev"
61
+ Requires-Dist: pandas-stubs; extra == "dev"
62
+ Provides-Extra: docs
63
+ Requires-Dist: sphinx>=7.2; extra == "docs"
64
+ Requires-Dist: sphinx-rtd-theme>=2.0; extra == "docs"
65
+ Requires-Dist: numpydoc>=1.7; extra == "docs"
66
+ Requires-Dist: sphinx-autodoc-typehints>=2.0; extra == "docs"
67
+ Requires-Dist: sphinx-copybutton>=0.5; extra == "docs"
68
+ Provides-Extra: all
69
+ Requires-Dist: tseda[dev,docs,stats]; extra == "all"
70
+ Dynamic: license-file
71
+
72
+ tseda — Time Series EDA
73
+ =======================
74
+
75
+ .. image:: https://img.shields.io/pypi/v/tseda.svg
76
+ :target: https://pypi.org/project/tseda/
77
+ :alt: PyPI
78
+
79
+ .. image:: https://img.shields.io/pypi/pyversions/tseda.svg
80
+ :target: https://pypi.org/project/tseda/
81
+ :alt: Python Versions
82
+
83
+ .. image:: https://img.shields.io/badge/license-MIT-blue.svg
84
+ :target: https://github.com/amir-jafari/Time-Series-EDA/blob/main/LICENSE
85
+ :alt: License
86
+
87
+ .. image:: https://img.shields.io/github/actions/workflow/status/amir-jafari/Time-Series-EDA/tests.yml?branch=main
88
+ :target: https://github.com/amir-jafari/Time-Series-EDA/actions
89
+ :alt: Tests
90
+
91
+ **"Understand your time series before you forecast it."**
92
+
93
+ ``tseda`` is a comprehensive, dependency-light Python toolkit for time series
94
+ Exploratory Data Analysis (EDA). It is to time series what
95
+ `YData-Profiling <https://docs.profiling.ydata.ai/>`_ is to tabular data:
96
+ a single command that produces a complete understanding of any time series
97
+ dataset before you start modelling.
98
+
99
+ ----
100
+
101
+ Why tseda?
102
+ ----------
103
+
104
+ Existing libraries solve individual problems. No single package provides all of:
105
+
106
+ * Comprehensive EDA & data auditing
107
+ * Forecastability assessment
108
+ * Automated diagnostics (stationarity, seasonality, anomalies)
109
+ * Structural break / changepoint detection
110
+ * Feature engineering
111
+ * Model recommendations
112
+ * Interactive reports
113
+
114
+ ``tseda`` fills that gap, using only **numpy**, **pandas**, **scipy**, and
115
+ **matplotlib** as core dependencies.
116
+
117
+ ----
118
+
119
+ Installation
120
+ ------------
121
+
122
+ .. code-block:: bash
123
+
124
+ pip install tseda
125
+
126
+ For stationarity tests that use statsmodels (ADF, KPSS, Phillips-Perron):
127
+
128
+ .. code-block:: bash
129
+
130
+ pip install tseda[stats]
131
+
132
+ For building the documentation:
133
+
134
+ .. code-block:: bash
135
+
136
+ pip install tseda[docs]
137
+
138
+ ----
139
+
140
+ Quick Start
141
+ -----------
142
+
143
+ .. code-block:: python
144
+
145
+ import numpy as np
146
+ import pandas as pd
147
+ from tseda import TimeSeries
148
+
149
+ # Build a TimeSeries object
150
+ idx = pd.date_range("2020-01-01", periods=365, freq="D")
151
+ ts = TimeSeries(
152
+ np.cumsum(np.random.randn(365)),
153
+ index=idx,
154
+ name="stock_price",
155
+ unit="USD",
156
+ )
157
+ print(ts)
158
+
159
+ # Data quality
160
+ from tseda.quality import MissingValueAnalyzer, OutlierDetector
161
+ missing = MissingValueAnalyzer().analyze(ts)
162
+ outliers = OutlierDetector().mad(ts)
163
+
164
+ # Statistics
165
+ from tseda.statistics import DescriptiveAnalyzer, StationarityTester
166
+ stats = DescriptiveAnalyzer().analyze(ts)
167
+ adf = StationarityTester().adf(ts)
168
+ print(adf.summary() if hasattr(adf, "summary") else adf)
169
+
170
+ # Decomposition
171
+ from tseda.decomposition import STLDecomposer
172
+ dec = STLDecomposer().decompose(ts, period=7)
173
+ print(dec.summary())
174
+
175
+ # Seasonality
176
+ from tseda.seasonality import SeasonalityDetector
177
+ season = SeasonalityDetector().detect(ts)
178
+ print(f"Dominant period: {season.dominant_period}")
179
+
180
+ ----
181
+
182
+ Modules
183
+ -------
184
+
185
+ +---------------------+------------------------------------------------------+
186
+ | Module | Capability |
187
+ +=====================+======================================================+
188
+ | ``core`` | ``TimeSeries`` data structure & validators |
189
+ +---------------------+------------------------------------------------------+
190
+ | ``quality`` | Missing values, outlier detection, flat-line checks |
191
+ +---------------------+------------------------------------------------------+
192
+ | ``statistics`` | Descriptive stats, stationarity, ACF/PACF |
193
+ +---------------------+------------------------------------------------------+
194
+ | ``decomposition`` | Classical & STL decomposition |
195
+ +---------------------+------------------------------------------------------+
196
+ | ``seasonality`` | FFT periodogram + ACF-based period detection |
197
+ +---------------------+------------------------------------------------------+
198
+ | ``anomaly`` | Rolling IQR/Z-score, STL-residual anomaly detection |
199
+ +---------------------+------------------------------------------------------+
200
+ | ``changepoint`` | Structural break / CUSUM detection |
201
+ +---------------------+------------------------------------------------------+
202
+ | ``features`` | Temporal, statistical, spectral feature extraction |
203
+ +---------------------+------------------------------------------------------+
204
+ | ``forecastability`` | Forecast-readiness scoring & leakage detection |
205
+ +---------------------+------------------------------------------------------+
206
+ | ``visualization`` | Matplotlib plot suite |
207
+ +---------------------+------------------------------------------------------+
208
+ | ``report`` | HTML & console report generation |
209
+ +---------------------+------------------------------------------------------+
210
+
211
+ ----
212
+
213
+ Dependencies
214
+ ------------
215
+
216
+ **Core** (always installed):
217
+
218
+ * ``numpy >= 1.23``
219
+ * ``pandas >= 1.5``
220
+ * ``scipy >= 1.9``
221
+ * ``matplotlib >= 3.6``
222
+
223
+ **Optional**:
224
+
225
+ * ``statsmodels >= 0.14`` — ADF, KPSS, Phillips-Perron, STL (``pip install tseda[stats]``)
226
+
227
+ ----
228
+
229
+ Documentation
230
+ -------------
231
+
232
+ `https://amir-jafari.github.io/Time-Series-EDA <https://amir-jafari.github.io/Time-Series-EDA>`_
233
+
234
+ ----
235
+
236
+ Contributing
237
+ ------------
238
+
239
+ Contributions are welcome! Please open an issue or pull request at
240
+ `https://github.com/amir-jafari/Time-Series-EDA <https://github.com/amir-jafari/Time-Series-EDA>`_.
241
+
242
+ ----
243
+
244
+ License
245
+ -------
246
+
247
+ MIT © 2026 Amirhossein Jafari
@@ -0,0 +1,176 @@
1
+ tseda — Time Series EDA
2
+ =======================
3
+
4
+ .. image:: https://img.shields.io/pypi/v/tseda.svg
5
+ :target: https://pypi.org/project/tseda/
6
+ :alt: PyPI
7
+
8
+ .. image:: https://img.shields.io/pypi/pyversions/tseda.svg
9
+ :target: https://pypi.org/project/tseda/
10
+ :alt: Python Versions
11
+
12
+ .. image:: https://img.shields.io/badge/license-MIT-blue.svg
13
+ :target: https://github.com/amir-jafari/Time-Series-EDA/blob/main/LICENSE
14
+ :alt: License
15
+
16
+ .. image:: https://img.shields.io/github/actions/workflow/status/amir-jafari/Time-Series-EDA/tests.yml?branch=main
17
+ :target: https://github.com/amir-jafari/Time-Series-EDA/actions
18
+ :alt: Tests
19
+
20
+ **"Understand your time series before you forecast it."**
21
+
22
+ ``tseda`` is a comprehensive, dependency-light Python toolkit for time series
23
+ Exploratory Data Analysis (EDA). It is to time series what
24
+ `YData-Profiling <https://docs.profiling.ydata.ai/>`_ is to tabular data:
25
+ a single command that produces a complete understanding of any time series
26
+ dataset before you start modelling.
27
+
28
+ ----
29
+
30
+ Why tseda?
31
+ ----------
32
+
33
+ Existing libraries solve individual problems. No single package provides all of:
34
+
35
+ * Comprehensive EDA & data auditing
36
+ * Forecastability assessment
37
+ * Automated diagnostics (stationarity, seasonality, anomalies)
38
+ * Structural break / changepoint detection
39
+ * Feature engineering
40
+ * Model recommendations
41
+ * Interactive reports
42
+
43
+ ``tseda`` fills that gap, using only **numpy**, **pandas**, **scipy**, and
44
+ **matplotlib** as core dependencies.
45
+
46
+ ----
47
+
48
+ Installation
49
+ ------------
50
+
51
+ .. code-block:: bash
52
+
53
+ pip install tseda
54
+
55
+ For stationarity tests that use statsmodels (ADF, KPSS, Phillips-Perron):
56
+
57
+ .. code-block:: bash
58
+
59
+ pip install tseda[stats]
60
+
61
+ For building the documentation:
62
+
63
+ .. code-block:: bash
64
+
65
+ pip install tseda[docs]
66
+
67
+ ----
68
+
69
+ Quick Start
70
+ -----------
71
+
72
+ .. code-block:: python
73
+
74
+ import numpy as np
75
+ import pandas as pd
76
+ from tseda import TimeSeries
77
+
78
+ # Build a TimeSeries object
79
+ idx = pd.date_range("2020-01-01", periods=365, freq="D")
80
+ ts = TimeSeries(
81
+ np.cumsum(np.random.randn(365)),
82
+ index=idx,
83
+ name="stock_price",
84
+ unit="USD",
85
+ )
86
+ print(ts)
87
+
88
+ # Data quality
89
+ from tseda.quality import MissingValueAnalyzer, OutlierDetector
90
+ missing = MissingValueAnalyzer().analyze(ts)
91
+ outliers = OutlierDetector().mad(ts)
92
+
93
+ # Statistics
94
+ from tseda.statistics import DescriptiveAnalyzer, StationarityTester
95
+ stats = DescriptiveAnalyzer().analyze(ts)
96
+ adf = StationarityTester().adf(ts)
97
+ print(adf.summary() if hasattr(adf, "summary") else adf)
98
+
99
+ # Decomposition
100
+ from tseda.decomposition import STLDecomposer
101
+ dec = STLDecomposer().decompose(ts, period=7)
102
+ print(dec.summary())
103
+
104
+ # Seasonality
105
+ from tseda.seasonality import SeasonalityDetector
106
+ season = SeasonalityDetector().detect(ts)
107
+ print(f"Dominant period: {season.dominant_period}")
108
+
109
+ ----
110
+
111
+ Modules
112
+ -------
113
+
114
+ +---------------------+------------------------------------------------------+
115
+ | Module | Capability |
116
+ +=====================+======================================================+
117
+ | ``core`` | ``TimeSeries`` data structure & validators |
118
+ +---------------------+------------------------------------------------------+
119
+ | ``quality`` | Missing values, outlier detection, flat-line checks |
120
+ +---------------------+------------------------------------------------------+
121
+ | ``statistics`` | Descriptive stats, stationarity, ACF/PACF |
122
+ +---------------------+------------------------------------------------------+
123
+ | ``decomposition`` | Classical & STL decomposition |
124
+ +---------------------+------------------------------------------------------+
125
+ | ``seasonality`` | FFT periodogram + ACF-based period detection |
126
+ +---------------------+------------------------------------------------------+
127
+ | ``anomaly`` | Rolling IQR/Z-score, STL-residual anomaly detection |
128
+ +---------------------+------------------------------------------------------+
129
+ | ``changepoint`` | Structural break / CUSUM detection |
130
+ +---------------------+------------------------------------------------------+
131
+ | ``features`` | Temporal, statistical, spectral feature extraction |
132
+ +---------------------+------------------------------------------------------+
133
+ | ``forecastability`` | Forecast-readiness scoring & leakage detection |
134
+ +---------------------+------------------------------------------------------+
135
+ | ``visualization`` | Matplotlib plot suite |
136
+ +---------------------+------------------------------------------------------+
137
+ | ``report`` | HTML & console report generation |
138
+ +---------------------+------------------------------------------------------+
139
+
140
+ ----
141
+
142
+ Dependencies
143
+ ------------
144
+
145
+ **Core** (always installed):
146
+
147
+ * ``numpy >= 1.23``
148
+ * ``pandas >= 1.5``
149
+ * ``scipy >= 1.9``
150
+ * ``matplotlib >= 3.6``
151
+
152
+ **Optional**:
153
+
154
+ * ``statsmodels >= 0.14`` — ADF, KPSS, Phillips-Perron, STL (``pip install tseda[stats]``)
155
+
156
+ ----
157
+
158
+ Documentation
159
+ -------------
160
+
161
+ `https://amir-jafari.github.io/Time-Series-EDA <https://amir-jafari.github.io/Time-Series-EDA>`_
162
+
163
+ ----
164
+
165
+ Contributing
166
+ ------------
167
+
168
+ Contributions are welcome! Please open an issue or pull request at
169
+ `https://github.com/amir-jafari/Time-Series-EDA <https://github.com/amir-jafari/Time-Series-EDA>`_.
170
+
171
+ ----
172
+
173
+ License
174
+ -------
175
+
176
+ MIT © 2026 Amirhossein Jafari
@@ -0,0 +1,18 @@
1
+ tseda.anomaly
2
+ =============
3
+
4
+ .. automodule:: tseda.anomaly
5
+ :members:
6
+ :undoc-members:
7
+
8
+ Report
9
+ ------
10
+
11
+ .. autoclass:: tseda.anomaly.detector.AnomalyReport
12
+ :members:
13
+
14
+ Detector
15
+ --------
16
+
17
+ .. autoclass:: tseda.anomaly.detector.AnomalyDetector
18
+ :members:
@@ -0,0 +1,18 @@
1
+ tseda.changepoint
2
+ =================
3
+
4
+ .. automodule:: tseda.changepoint
5
+ :members:
6
+ :undoc-members:
7
+
8
+ Report
9
+ ------
10
+
11
+ .. autoclass:: tseda.changepoint.detector.ChangepointReport
12
+ :members:
13
+
14
+ Detector
15
+ --------
16
+
17
+ .. autoclass:: tseda.changepoint.detector.ChangepointDetector
18
+ :members:
@@ -0,0 +1,37 @@
1
+ tseda.core
2
+ ==========
3
+
4
+ .. automodule:: tseda.core
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
8
+
9
+ TimeSeries
10
+ ----------
11
+
12
+ .. autoclass:: tseda.core.TimeSeries
13
+ :members:
14
+ :special-members: __init__, __repr__, __len__, __contains__, __getitem__
15
+ :show-inheritance:
16
+
17
+ Types & Enumerations
18
+ --------------------
19
+
20
+ .. autoclass:: tseda.core.types.Frequency
21
+ :members:
22
+ :show-inheritance:
23
+
24
+ .. autoclass:: tseda.core.types.AggMethod
25
+ :members:
26
+ :show-inheritance:
27
+
28
+ .. autoclass:: tseda.core.types.DiffMethod
29
+ :members:
30
+ :show-inheritance:
31
+
32
+ Validators
33
+ ----------
34
+
35
+ .. automodule:: tseda.core.validator
36
+ :members:
37
+ :undoc-members:
@@ -0,0 +1,24 @@
1
+ tseda.decomposition
2
+ ===================
3
+
4
+ .. automodule:: tseda.decomposition
5
+ :members:
6
+ :undoc-members:
7
+
8
+ Result
9
+ ------
10
+
11
+ .. autoclass:: tseda.decomposition.classical.DecompositionResult
12
+ :members:
13
+
14
+ Classical Decomposition
15
+ -----------------------
16
+
17
+ .. autoclass:: tseda.decomposition.classical.ClassicalDecomposer
18
+ :members:
19
+
20
+ STL Decomposition
21
+ -----------------
22
+
23
+ .. autoclass:: tseda.decomposition.stl.STLDecomposer
24
+ :members:
@@ -0,0 +1,24 @@
1
+ tseda.features
2
+ ==============
3
+
4
+ .. automodule:: tseda.features
5
+ :members:
6
+ :undoc-members:
7
+
8
+ Temporal Features
9
+ -----------------
10
+
11
+ .. autoclass:: tseda.features.temporal.TemporalFeatureExtractor
12
+ :members:
13
+
14
+ Statistical Features
15
+ --------------------
16
+
17
+ .. autoclass:: tseda.features.statistical.StatisticalFeatureExtractor
18
+ :members:
19
+
20
+ Spectral Features
21
+ -----------------
22
+
23
+ .. autoclass:: tseda.features.spectral.SpectralFeatureExtractor
24
+ :members:
@@ -0,0 +1,24 @@
1
+ tseda.forecastability
2
+ ====================
3
+
4
+ .. automodule:: tseda.forecastability
5
+ :members:
6
+ :undoc-members:
7
+
8
+ Forecastability Scorer
9
+ ----------------------
10
+
11
+ .. autoclass:: tseda.forecastability.scorer.ForecastabilityReport
12
+ :members:
13
+
14
+ .. autoclass:: tseda.forecastability.scorer.ForecastabilityScorer
15
+ :members:
16
+
17
+ Leakage Detector
18
+ ----------------
19
+
20
+ .. autoclass:: tseda.forecastability.leakage.LeakageReport
21
+ :members:
22
+
23
+ .. autoclass:: tseda.forecastability.leakage.LeakageDetector
24
+ :members:
@@ -0,0 +1,33 @@
1
+ tseda.quality
2
+ =============
3
+
4
+ .. automodule:: tseda.quality
5
+ :members:
6
+ :undoc-members:
7
+
8
+ Missing Values
9
+ --------------
10
+
11
+ .. autoclass:: tseda.quality.missing.MissingValueReport
12
+ :members:
13
+
14
+ .. autoclass:: tseda.quality.missing.MissingValueAnalyzer
15
+ :members:
16
+
17
+ Outliers
18
+ --------
19
+
20
+ .. autoclass:: tseda.quality.outliers.OutlierReport
21
+ :members:
22
+
23
+ .. autoclass:: tseda.quality.outliers.OutlierDetector
24
+ :members:
25
+
26
+ Flat-line / Duplicates
27
+ ----------------------
28
+
29
+ .. autoclass:: tseda.quality.duplicates.FlatlineReport
30
+ :members:
31
+
32
+ .. autoclass:: tseda.quality.duplicates.DuplicateDetector
33
+ :members:
@@ -0,0 +1,18 @@
1
+ tseda.report
2
+ ============
3
+
4
+ .. automodule:: tseda.report
5
+ :members:
6
+ :undoc-members:
7
+
8
+ HTML Report
9
+ -----------
10
+
11
+ .. autoclass:: tseda.report.html_report.HTMLReport
12
+ :members:
13
+
14
+ Console Report
15
+ --------------
16
+
17
+ .. autoclass:: tseda.report.console_report.ConsoleReport
18
+ :members: