prepix 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.
- prepix-0.1.0/LICENSE +21 -0
- prepix-0.1.0/PKG-INFO +255 -0
- prepix-0.1.0/README.md +223 -0
- prepix-0.1.0/pyproject.toml +57 -0
- prepix-0.1.0/setup.cfg +4 -0
- prepix-0.1.0/src/prepix/__init__.py +22 -0
- prepix-0.1.0/src/prepix/quality.py +803 -0
- prepix-0.1.0/src/prepix/report.py +412 -0
- prepix-0.1.0/src/prepix/schema.py +496 -0
- prepix-0.1.0/src/prepix.egg-info/PKG-INFO +255 -0
- prepix-0.1.0/src/prepix.egg-info/SOURCES.txt +25 -0
- prepix-0.1.0/src/prepix.egg-info/dependency_links.txt +1 -0
- prepix-0.1.0/src/prepix.egg-info/requires.txt +7 -0
- prepix-0.1.0/src/prepix.egg-info/top_level.txt +1 -0
- prepix-0.1.0/tests/test1.py +79 -0
- prepix-0.1.0/tests/test_column_summary.py +72 -0
- prepix-0.1.0/tests/test_data_sources.py +85 -0
- prepix-0.1.0/tests/test_dataset_varieties.py +357 -0
- prepix-0.1.0/tests/test_duplicate_report.py +118 -0
- prepix-0.1.0/tests/test_edge_cases.py +55 -0
- prepix-0.1.0/tests/test_enhancements.py +195 -0
- prepix-0.1.0/tests/test_missing_report.py +64 -0
- prepix-0.1.0/tests/test_numeric_summary.py +396 -0
- prepix-0.1.0/tests/test_quality.py +400 -0
- prepix-0.1.0/tests/test_report.py +100 -0
- prepix-0.1.0/tests/test_schema_report.py +289 -0
- prepix-0.1.0/tests/test_unique_report.py +230 -0
prepix-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Manish Parihar
|
|
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.
|
prepix-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: prepix
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A lightweight Python library for data preprocessing, quality checks, and ML utilities.
|
|
5
|
+
Author: Manish Parihar
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/manishparihar3618/prepix
|
|
8
|
+
Project-URL: Repository, https://github.com/manishparihar3618/prepix
|
|
9
|
+
Project-URL: Issues, https://github.com/manishparihar3618/prepix/issues
|
|
10
|
+
Keywords: data-quality,eda,data-profiling,pandas,data-validation,schema-validation,machine-learning
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.9
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: pandas>=2.0.0
|
|
26
|
+
Requires-Dist: numpy>=1.24.0
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
29
|
+
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
30
|
+
Requires-Dist: twine>=4.0.0; extra == "dev"
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
|
|
33
|
+
# Prepix
|
|
34
|
+
|
|
35
|
+
**Prepix** is a lightweight, reliable Python library for **automated data quality assessment, exploratory data analysis (EDA), and data contract validation**, built on top of pandas and numpy.
|
|
36
|
+
|
|
37
|
+
[](https://github.com/manishparihar3618/prepix)
|
|
38
|
+
[](LICENSE)
|
|
39
|
+
[](CHANGELOG.md)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## ๐ The Problem Prepix Solves
|
|
44
|
+
|
|
45
|
+
Data scientists, analysts, and ML engineers spend up to 80% of their time cleaning and validating tabular data. Common pitfalls include:
|
|
46
|
+
- **Silent missingness** and inconsistent null values across critical feature columns.
|
|
47
|
+
- **Accidental duplicate rows** introduced during data ingestion or joins.
|
|
48
|
+
- **Silent schema drift**, such as missing required columns or unexpected type coercion.
|
|
49
|
+
- **Cardinality traps**, where constant columns provide zero variance or high-cardinality strings are inadvertently one-hot encoded.
|
|
50
|
+
- **Extreme outliers and severe distribution skew** that corrupt statistical estimates and model training.
|
|
51
|
+
|
|
52
|
+
Writing ad-hoc pandas queries to check each of these issues for every new dataset is repetitive, error-prone, and difficult to standardize across a team.
|
|
53
|
+
|
|
54
|
+
**Prepix automates these inspections through simple, composable, and immutability-guaranteed functions**, producing structured diagnostic DataFrames and instant human-readable health reports.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## ๐ฏ Intended Users & Use Cases
|
|
59
|
+
|
|
60
|
+
- **Data Analysts**: Quickly audit incoming CSV/Excel files and export structured quality summaries.
|
|
61
|
+
- **Machine Learning Engineers**: Validate training and inference feature sets against expected data contracts to prevent silent pipeline failures.
|
|
62
|
+
- **Data Engineers**: Embed automated data validation checks into ETL jobs and CI/CD testing suites.
|
|
63
|
+
- **Researchers**: Inspect distribution characteristics, skewness, kurtosis, and Tukey outliers across experimental datasets.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## ๐ฆ Installation
|
|
68
|
+
|
|
69
|
+
Prepix requires **Python >= 3.9**, **pandas >= 2.0.0**, and **numpy >= 1.24.0**.
|
|
70
|
+
|
|
71
|
+
### Development / Local Installation
|
|
72
|
+
Until the package is officially published to PyPI, install Prepix directly from the repository in editable mode:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
git clone https://github.com/manishparihar3618/prepix.git
|
|
76
|
+
cd prepix
|
|
77
|
+
pip install -e .
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### PyPI Installation (Post-Release)
|
|
81
|
+
Once published:
|
|
82
|
+
```bash
|
|
83
|
+
pip install prepix
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## โก Quickstart
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
import pandas as pd
|
|
92
|
+
import prepix as pp
|
|
93
|
+
|
|
94
|
+
# Load or define your dataset
|
|
95
|
+
df = pd.DataFrame({
|
|
96
|
+
"OrderID": [101, 102, 103, 104, 104],
|
|
97
|
+
"Customer": ["Alice", "Bob", "Charlie", "David", "David"],
|
|
98
|
+
"Age": [28, None, 35, 42, 42],
|
|
99
|
+
"Revenue": [150.0, 220.5, 310.0, 95.0, 95.0],
|
|
100
|
+
"Region": ["North", "North", "North", "North", "North"],
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
# Generate the complete dataset quality report
|
|
104
|
+
rep = pp.report(df)
|
|
105
|
+
|
|
106
|
+
# Print a formatted diagnostic summary to console
|
|
107
|
+
print(rep)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Output Summary
|
|
111
|
+
```text
|
|
112
|
+
==============================================================
|
|
113
|
+
PREPIX QUALITY REPORT
|
|
114
|
+
==============================================================
|
|
115
|
+
|
|
116
|
+
1. DATASET OVERVIEW
|
|
117
|
+
--------------------------------------------------------------
|
|
118
|
+
- Rows : 5
|
|
119
|
+
- Columns : 5
|
|
120
|
+
- Total Cells : 25
|
|
121
|
+
- Memory Usage : 1.24 KB
|
|
122
|
+
- Numeric Columns : 3
|
|
123
|
+
- Categorical Columns : 2
|
|
124
|
+
- Datetime Columns : 0
|
|
125
|
+
- Boolean Columns : 0
|
|
126
|
+
- Other Columns : 0
|
|
127
|
+
- Total Missing Cells : 1 (4.00%)
|
|
128
|
+
- Columns with Missing : 1
|
|
129
|
+
- Duplicate Rows : 1 (20.00%)
|
|
130
|
+
|
|
131
|
+
2. KEY FINDINGS & ISSUES
|
|
132
|
+
--------------------------------------------------------------
|
|
133
|
+
[MEDIUM] Dataset: Duplicate Records - 1 duplicate rows (20.00%) detected
|
|
134
|
+
[MEDIUM] Column 'Age': Moderate Missingness - 1 missing values (20.00%)
|
|
135
|
+
[LOW ] Column 'Region': Zero Variance (Constant) - Contains single constant value
|
|
136
|
+
|
|
137
|
+
3. RECOMMENDED ACTIONS
|
|
138
|
+
--------------------------------------------------------------
|
|
139
|
+
* Review and consider deduplicating using df.drop_duplicates()
|
|
140
|
+
* Consider median/mode imputation or indicator flag for 'Age'
|
|
141
|
+
* Consider dropping constant column 'Region' prior to ML modeling
|
|
142
|
+
==============================================================
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## ๐ Verified Public Functions
|
|
148
|
+
|
|
149
|
+
| Function | Primary Purpose | Key Return Data |
|
|
150
|
+
| :--- | :--- | :--- |
|
|
151
|
+
| **`report(df)`** | Unified multi-section quality analysis | Returns `PrepixReport` with overview, issues, and all sub-reports |
|
|
152
|
+
| **`missing_report(df)`** | Missing-value audit & imputation recommendations | `Column`, `Missing Values`, `Missing Percentage(%)`, `Status`, `Suggestion` |
|
|
153
|
+
| **`column_summary(df)`** | Structural column profiling & memory estimation | `Column`, `Data Type`, `Missing Values`, `Unique Values`, `Memory(Bytes)`, `Suggested Type` |
|
|
154
|
+
| **`duplicate_report(df)`** | Duplicate record identification & extraction | `Total Rows`, `Duplicate Rows`, `Duplicate %`, `Unique Rows`, `Status`, `Suggestion` (or duplicate rows via `return_records=True`) |
|
|
155
|
+
| **`unique_report(df)`** | Cardinality categorization & identifier detection | `Column`, `Unique Values`, `Cardinality`, `Status`, `Suggestion` |
|
|
156
|
+
| **`numeric_summary(df)`** | Statistical summary & distribution diagnostics | 5-number summary, mean, std, range; plus IQR, skewness, kurtosis, zero/negative/outlier counts with `extended=True` |
|
|
157
|
+
| **`schema_report(df, schema)`** | Schema validation & contract verification | `Column`, `Check`, `Expected`, `Actual`, `Status`, `Message` |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## ๐ ๏ธ Specialized Function Examples
|
|
162
|
+
|
|
163
|
+
### 1. Missing Values
|
|
164
|
+
```python
|
|
165
|
+
# Report columns sorted by missingness percentage
|
|
166
|
+
missing = pp.missing_report(df, only_missing=True)
|
|
167
|
+
print(missing)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 2. Duplicate Detection & Extraction
|
|
171
|
+
```python
|
|
172
|
+
# Summary statistics
|
|
173
|
+
print(pp.duplicate_report(df))
|
|
174
|
+
|
|
175
|
+
# Extract the duplicate rows directly for inspection
|
|
176
|
+
dups = pp.duplicate_report(df, return_records=True)
|
|
177
|
+
print(dups)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### 3. Numerical Diagnostics
|
|
181
|
+
```python
|
|
182
|
+
# Extended statistics: IQR, skewness, kurtosis, zeros, negatives, and Tukey outliers
|
|
183
|
+
num_stats = pp.numeric_summary(df, extended=True, percentiles=[0.05, 0.95])
|
|
184
|
+
print(num_stats)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 4. Schema Contract Validation
|
|
188
|
+
```python
|
|
189
|
+
schema = {
|
|
190
|
+
"OrderID": {"type": "integer", "nullable": False, "unique": True},
|
|
191
|
+
"Customer": "string",
|
|
192
|
+
"Age": {"type": "numeric", "nullable": False},
|
|
193
|
+
}
|
|
194
|
+
val_report = pp.schema_report(df, schema=schema, allow_unexpected=True)
|
|
195
|
+
print(val_report)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## ๐ก๏ธ Core Guarantees
|
|
201
|
+
|
|
202
|
+
1. **DataFrame Immutability**: All Prepix operations are strictly read-only; input DataFrames are never modified in place.
|
|
203
|
+
2. **Transparent Recommendations**: Suggestions are heuristic guidelines, not automated decisions. Prepix does not silently drop, impute, or cast columns.
|
|
204
|
+
3. **Resilient Edge-Case Handling**: Tested against empty DataFrames (`0x0`, `0xN`, `Nx0`), infinite values (`np.inf`, `-np.inf`), duplicate column names, and unhashable cell types.
|
|
205
|
+
4. **Minimal Dependencies**: Strictly depends only on `pandas>=2.0.0` and `numpy>=1.24.0`.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## ๐งช Testing & Verification
|
|
210
|
+
|
|
211
|
+
Run the full automated test suite using Python's built-in `unittest`:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
python -m unittest discover -s tests -p "test_*.py" -v
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Execute all verified synthetic workflow examples:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
python examples/run_all_examples.py
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Run performance benchmarks:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
python benchmark.py
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## ๐ Documentation Links
|
|
232
|
+
|
|
233
|
+
- [Documentation Index](docs/index.md)
|
|
234
|
+
- [Installation Guide](docs/installation.md)
|
|
235
|
+
- [Quickstart Guide](docs/quickstart.md)
|
|
236
|
+
- [Data Sources Guide](docs/data_sources.md)
|
|
237
|
+
- [Function Reference](docs/functions.md)
|
|
238
|
+
- [Examples Guide](docs/examples.md)
|
|
239
|
+
- [Troubleshooting & FAQ](docs/troubleshooting.md)
|
|
240
|
+
- [Changelog](CHANGELOG.md)
|
|
241
|
+
- [Contributing Guide](CONTRIBUTING.md)
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## ๐ข Release Status
|
|
246
|
+
|
|
247
|
+
Prepix is currently at **v0.1.0 (Beta)**. Core functionality is complete and verified with 145 unit tests across diverse data scales and types. We are preparing for the first official PyPI release.
|
|
248
|
+
|
|
249
|
+
If you encounter any issues or have feedback, please open an issue on the [GitHub Issue Tracker](https://github.com/manishparihar3618/prepix/issues).
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## ๐ License
|
|
254
|
+
|
|
255
|
+
Prepix is licensed under the [MIT License](LICENSE). Copyright (c) Manish Parihar.
|
prepix-0.1.0/README.md
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Prepix
|
|
2
|
+
|
|
3
|
+
**Prepix** is a lightweight, reliable Python library for **automated data quality assessment, exploratory data analysis (EDA), and data contract validation**, built on top of pandas and numpy.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/manishparihar3618/prepix)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](CHANGELOG.md)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## ๐ The Problem Prepix Solves
|
|
12
|
+
|
|
13
|
+
Data scientists, analysts, and ML engineers spend up to 80% of their time cleaning and validating tabular data. Common pitfalls include:
|
|
14
|
+
- **Silent missingness** and inconsistent null values across critical feature columns.
|
|
15
|
+
- **Accidental duplicate rows** introduced during data ingestion or joins.
|
|
16
|
+
- **Silent schema drift**, such as missing required columns or unexpected type coercion.
|
|
17
|
+
- **Cardinality traps**, where constant columns provide zero variance or high-cardinality strings are inadvertently one-hot encoded.
|
|
18
|
+
- **Extreme outliers and severe distribution skew** that corrupt statistical estimates and model training.
|
|
19
|
+
|
|
20
|
+
Writing ad-hoc pandas queries to check each of these issues for every new dataset is repetitive, error-prone, and difficult to standardize across a team.
|
|
21
|
+
|
|
22
|
+
**Prepix automates these inspections through simple, composable, and immutability-guaranteed functions**, producing structured diagnostic DataFrames and instant human-readable health reports.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## ๐ฏ Intended Users & Use Cases
|
|
27
|
+
|
|
28
|
+
- **Data Analysts**: Quickly audit incoming CSV/Excel files and export structured quality summaries.
|
|
29
|
+
- **Machine Learning Engineers**: Validate training and inference feature sets against expected data contracts to prevent silent pipeline failures.
|
|
30
|
+
- **Data Engineers**: Embed automated data validation checks into ETL jobs and CI/CD testing suites.
|
|
31
|
+
- **Researchers**: Inspect distribution characteristics, skewness, kurtosis, and Tukey outliers across experimental datasets.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## ๐ฆ Installation
|
|
36
|
+
|
|
37
|
+
Prepix requires **Python >= 3.9**, **pandas >= 2.0.0**, and **numpy >= 1.24.0**.
|
|
38
|
+
|
|
39
|
+
### Development / Local Installation
|
|
40
|
+
Until the package is officially published to PyPI, install Prepix directly from the repository in editable mode:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
git clone https://github.com/manishparihar3618/prepix.git
|
|
44
|
+
cd prepix
|
|
45
|
+
pip install -e .
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### PyPI Installation (Post-Release)
|
|
49
|
+
Once published:
|
|
50
|
+
```bash
|
|
51
|
+
pip install prepix
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## โก Quickstart
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
import pandas as pd
|
|
60
|
+
import prepix as pp
|
|
61
|
+
|
|
62
|
+
# Load or define your dataset
|
|
63
|
+
df = pd.DataFrame({
|
|
64
|
+
"OrderID": [101, 102, 103, 104, 104],
|
|
65
|
+
"Customer": ["Alice", "Bob", "Charlie", "David", "David"],
|
|
66
|
+
"Age": [28, None, 35, 42, 42],
|
|
67
|
+
"Revenue": [150.0, 220.5, 310.0, 95.0, 95.0],
|
|
68
|
+
"Region": ["North", "North", "North", "North", "North"],
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
# Generate the complete dataset quality report
|
|
72
|
+
rep = pp.report(df)
|
|
73
|
+
|
|
74
|
+
# Print a formatted diagnostic summary to console
|
|
75
|
+
print(rep)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Output Summary
|
|
79
|
+
```text
|
|
80
|
+
==============================================================
|
|
81
|
+
PREPIX QUALITY REPORT
|
|
82
|
+
==============================================================
|
|
83
|
+
|
|
84
|
+
1. DATASET OVERVIEW
|
|
85
|
+
--------------------------------------------------------------
|
|
86
|
+
- Rows : 5
|
|
87
|
+
- Columns : 5
|
|
88
|
+
- Total Cells : 25
|
|
89
|
+
- Memory Usage : 1.24 KB
|
|
90
|
+
- Numeric Columns : 3
|
|
91
|
+
- Categorical Columns : 2
|
|
92
|
+
- Datetime Columns : 0
|
|
93
|
+
- Boolean Columns : 0
|
|
94
|
+
- Other Columns : 0
|
|
95
|
+
- Total Missing Cells : 1 (4.00%)
|
|
96
|
+
- Columns with Missing : 1
|
|
97
|
+
- Duplicate Rows : 1 (20.00%)
|
|
98
|
+
|
|
99
|
+
2. KEY FINDINGS & ISSUES
|
|
100
|
+
--------------------------------------------------------------
|
|
101
|
+
[MEDIUM] Dataset: Duplicate Records - 1 duplicate rows (20.00%) detected
|
|
102
|
+
[MEDIUM] Column 'Age': Moderate Missingness - 1 missing values (20.00%)
|
|
103
|
+
[LOW ] Column 'Region': Zero Variance (Constant) - Contains single constant value
|
|
104
|
+
|
|
105
|
+
3. RECOMMENDED ACTIONS
|
|
106
|
+
--------------------------------------------------------------
|
|
107
|
+
* Review and consider deduplicating using df.drop_duplicates()
|
|
108
|
+
* Consider median/mode imputation or indicator flag for 'Age'
|
|
109
|
+
* Consider dropping constant column 'Region' prior to ML modeling
|
|
110
|
+
==============================================================
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## ๐ Verified Public Functions
|
|
116
|
+
|
|
117
|
+
| Function | Primary Purpose | Key Return Data |
|
|
118
|
+
| :--- | :--- | :--- |
|
|
119
|
+
| **`report(df)`** | Unified multi-section quality analysis | Returns `PrepixReport` with overview, issues, and all sub-reports |
|
|
120
|
+
| **`missing_report(df)`** | Missing-value audit & imputation recommendations | `Column`, `Missing Values`, `Missing Percentage(%)`, `Status`, `Suggestion` |
|
|
121
|
+
| **`column_summary(df)`** | Structural column profiling & memory estimation | `Column`, `Data Type`, `Missing Values`, `Unique Values`, `Memory(Bytes)`, `Suggested Type` |
|
|
122
|
+
| **`duplicate_report(df)`** | Duplicate record identification & extraction | `Total Rows`, `Duplicate Rows`, `Duplicate %`, `Unique Rows`, `Status`, `Suggestion` (or duplicate rows via `return_records=True`) |
|
|
123
|
+
| **`unique_report(df)`** | Cardinality categorization & identifier detection | `Column`, `Unique Values`, `Cardinality`, `Status`, `Suggestion` |
|
|
124
|
+
| **`numeric_summary(df)`** | Statistical summary & distribution diagnostics | 5-number summary, mean, std, range; plus IQR, skewness, kurtosis, zero/negative/outlier counts with `extended=True` |
|
|
125
|
+
| **`schema_report(df, schema)`** | Schema validation & contract verification | `Column`, `Check`, `Expected`, `Actual`, `Status`, `Message` |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## ๐ ๏ธ Specialized Function Examples
|
|
130
|
+
|
|
131
|
+
### 1. Missing Values
|
|
132
|
+
```python
|
|
133
|
+
# Report columns sorted by missingness percentage
|
|
134
|
+
missing = pp.missing_report(df, only_missing=True)
|
|
135
|
+
print(missing)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 2. Duplicate Detection & Extraction
|
|
139
|
+
```python
|
|
140
|
+
# Summary statistics
|
|
141
|
+
print(pp.duplicate_report(df))
|
|
142
|
+
|
|
143
|
+
# Extract the duplicate rows directly for inspection
|
|
144
|
+
dups = pp.duplicate_report(df, return_records=True)
|
|
145
|
+
print(dups)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### 3. Numerical Diagnostics
|
|
149
|
+
```python
|
|
150
|
+
# Extended statistics: IQR, skewness, kurtosis, zeros, negatives, and Tukey outliers
|
|
151
|
+
num_stats = pp.numeric_summary(df, extended=True, percentiles=[0.05, 0.95])
|
|
152
|
+
print(num_stats)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 4. Schema Contract Validation
|
|
156
|
+
```python
|
|
157
|
+
schema = {
|
|
158
|
+
"OrderID": {"type": "integer", "nullable": False, "unique": True},
|
|
159
|
+
"Customer": "string",
|
|
160
|
+
"Age": {"type": "numeric", "nullable": False},
|
|
161
|
+
}
|
|
162
|
+
val_report = pp.schema_report(df, schema=schema, allow_unexpected=True)
|
|
163
|
+
print(val_report)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## ๐ก๏ธ Core Guarantees
|
|
169
|
+
|
|
170
|
+
1. **DataFrame Immutability**: All Prepix operations are strictly read-only; input DataFrames are never modified in place.
|
|
171
|
+
2. **Transparent Recommendations**: Suggestions are heuristic guidelines, not automated decisions. Prepix does not silently drop, impute, or cast columns.
|
|
172
|
+
3. **Resilient Edge-Case Handling**: Tested against empty DataFrames (`0x0`, `0xN`, `Nx0`), infinite values (`np.inf`, `-np.inf`), duplicate column names, and unhashable cell types.
|
|
173
|
+
4. **Minimal Dependencies**: Strictly depends only on `pandas>=2.0.0` and `numpy>=1.24.0`.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## ๐งช Testing & Verification
|
|
178
|
+
|
|
179
|
+
Run the full automated test suite using Python's built-in `unittest`:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
python -m unittest discover -s tests -p "test_*.py" -v
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Execute all verified synthetic workflow examples:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
python examples/run_all_examples.py
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Run performance benchmarks:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
python benchmark.py
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## ๐ Documentation Links
|
|
200
|
+
|
|
201
|
+
- [Documentation Index](docs/index.md)
|
|
202
|
+
- [Installation Guide](docs/installation.md)
|
|
203
|
+
- [Quickstart Guide](docs/quickstart.md)
|
|
204
|
+
- [Data Sources Guide](docs/data_sources.md)
|
|
205
|
+
- [Function Reference](docs/functions.md)
|
|
206
|
+
- [Examples Guide](docs/examples.md)
|
|
207
|
+
- [Troubleshooting & FAQ](docs/troubleshooting.md)
|
|
208
|
+
- [Changelog](CHANGELOG.md)
|
|
209
|
+
- [Contributing Guide](CONTRIBUTING.md)
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## ๐ข Release Status
|
|
214
|
+
|
|
215
|
+
Prepix is currently at **v0.1.0 (Beta)**. Core functionality is complete and verified with 145 unit tests across diverse data scales and types. We are preparing for the first official PyPI release.
|
|
216
|
+
|
|
217
|
+
If you encounter any issues or have feedback, please open an issue on the [GitHub Issue Tracker](https://github.com/manishparihar3618/prepix/issues).
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## ๐ License
|
|
222
|
+
|
|
223
|
+
Prepix is licensed under the [MIT License](LICENSE). Copyright (c) Manish Parihar.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "prepix"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "A lightweight Python library for data preprocessing, quality checks, and ML utilities."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
keywords = [
|
|
13
|
+
"data-quality",
|
|
14
|
+
"eda",
|
|
15
|
+
"data-profiling",
|
|
16
|
+
"pandas",
|
|
17
|
+
"data-validation",
|
|
18
|
+
"schema-validation",
|
|
19
|
+
"machine-learning"
|
|
20
|
+
]
|
|
21
|
+
classifiers = [
|
|
22
|
+
"Development Status :: 4 - Beta",
|
|
23
|
+
"Intended Audience :: Developers",
|
|
24
|
+
"Intended Audience :: Science/Research",
|
|
25
|
+
"Programming Language :: Python :: 3",
|
|
26
|
+
"Programming Language :: Python :: 3.9",
|
|
27
|
+
"Programming Language :: Python :: 3.10",
|
|
28
|
+
"Programming Language :: Python :: 3.11",
|
|
29
|
+
"Programming Language :: Python :: 3.12",
|
|
30
|
+
"Programming Language :: Python :: 3.13",
|
|
31
|
+
"Topic :: Scientific/Engineering :: Information Analysis",
|
|
32
|
+
"Topic :: Software Development :: Libraries :: Python Modules"
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
authors = [
|
|
36
|
+
{ name = "Manish Parihar" }
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
dependencies = [
|
|
40
|
+
"pandas>=2.0.0",
|
|
41
|
+
"numpy>=1.24.0"
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
[project.optional-dependencies]
|
|
45
|
+
dev = [
|
|
46
|
+
"pytest>=7.0.0",
|
|
47
|
+
"build>=1.0.0",
|
|
48
|
+
"twine>=4.0.0"
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
[project.urls]
|
|
52
|
+
Homepage = "https://github.com/manishparihar3618/prepix"
|
|
53
|
+
Repository = "https://github.com/manishparihar3618/prepix"
|
|
54
|
+
Issues = "https://github.com/manishparihar3618/prepix/issues"
|
|
55
|
+
|
|
56
|
+
[tool.setuptools.packages.find]
|
|
57
|
+
where = ["src"]
|
prepix-0.1.0/setup.cfg
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from .quality import (
|
|
2
|
+
column_summary,
|
|
3
|
+
duplicate_report,
|
|
4
|
+
missing_report,
|
|
5
|
+
numeric_summary,
|
|
6
|
+
unique_report,
|
|
7
|
+
)
|
|
8
|
+
from .report import PrepixReport, report
|
|
9
|
+
from .schema import schema_report
|
|
10
|
+
|
|
11
|
+
__version__ = "0.1.0"
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"column_summary",
|
|
15
|
+
"duplicate_report",
|
|
16
|
+
"missing_report",
|
|
17
|
+
"numeric_summary",
|
|
18
|
+
"unique_report",
|
|
19
|
+
"schema_report",
|
|
20
|
+
"PrepixReport",
|
|
21
|
+
"report",
|
|
22
|
+
]
|