Metadata-Version: 2.4
Name: dipencsv
Version: 0.1.3
Summary: A beginner-friendly CSV analysis and ML data preparation toolkit
Author: Dipendra
License-Expression: MIT
Project-URL: Homepage, https://github.com/Dipendra367/dipencsv
Project-URL: Repository, https://github.com/Dipendra367/dipencsv
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas>=1.5.0
Requires-Dist: openpyxl>=3.0.0
Requires-Dist: scikit-learn>=1.0.0
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Dynamic: license-file

# DipenCSV 🐼

> DipenCSV is to pandas what seaborn is to matplotlib — a friendlier, higher-level API.

A beginner-friendly CSV analysis and ML data preparation toolkit built on top of pandas. Helps students and small teams clean, analyze, and prepare CSV data for machine learning — without needing to know pandas.

## Who is it for?
- 🎓 Students cleaning data for ML assignments
- 🚀 Small startups needing quick data insights
- 👨‍💻 Developers who work with CSVs occasionally
- 📊 Anyone who finds pandas too complex

## Installation

```bash
pip install dipencsv
```

## Quick Start

```python
from dipencsv import Data

data = Data("your_file.csv")
data.magic()  # one click everything
```

## Full ML Workflow in 15 lines

```python
from dipencsv import Data
from sklearn.ensemble import RandomForestClassifier

data = Data("titanic.csv")
data.clean()
data.drop(["passengerid", "name", "ticket", "cabin"])
data.encode("sex")
data.encode("embarked")
data.remove_outliers("fare")
data.normalize("fare")
data.normalize("age")

train, test = data.split(test_size=0.2)

X_train = train.drop("survived", axis=1)
y_train = train["survived"]
X_test = test.drop("survived", axis=1)
y_test = test["survived"]

model = RandomForestClassifier()
model.fit(X_train, y_train)
print(f"Accuracy: {model.score(X_test, y_test):.2f}")
# Accuracy: 0.76
```

---

## All Commands

### Loading
```python
data = Data("file.csv")                        # auto mode
data = Data("bigfile.csv", stream=True)        # force stream mode
data = Data("file.csv", auto_mode=False)       # force pandas mode
```

### Properties
```python
print(data.columns)   # list of column names
print(data.shape)     # (rows, columns)
```

### Understanding Data
```python
data.summary()    # rows, cols, types, missing values
data.report()     # duplicates, missing %, basic stats
data.explain()    # trends, issues, suggestions
data.magic()      # ⭐ one click full analysis
```

### Cleaning
```python
data.clean()                        # auto clean (safe mode)
data.clean(strategy="aggressive")   # drop rows with missing values
data.drop("column")                 # drop one column
data.drop(["col1", "col2"])         # drop multiple columns
data.rename("old_name", "new_name") # rename column
data.fill("column", value)          # fill missing values manually
```

> ⚠️ After clean(), column names become lowercase with underscores.
> Always check: `print(data.columns)`

### ML Preparation
```python
data.encode("gender")           # text → numbers (label encoding)
data.normalize("age")           # scale to [0, 1]
data.standardize("salary")      # scale to mean=0, std=1
data.remove_outliers("price")   # remove extreme values (IQR method)
train, test = data.split(test_size=0.2)  # train/test split
```

### Analytics
```python
data.mean("salary")
data.median("age")
data.max("salary")
data.min("salary")
data.count("city")
data.correlation("age", "salary")
data.correlation_matrix()
data.distribution("salary")
data.outliers("salary")
data.describe()
data.value_counts("city")
data.group_mean("city", "salary")
```

### Querying
```python
data.first()              # first 5 rows
data.first(10)            # first 10 rows
data.last()               # last 5 rows
data.sort("age")          # sort ascending
data.sort("age", asc=False)  # sort descending
data.find("city", "Bangalore")  # find rows by value
```

### Intelligence
```python
data.ask("average salary")
data.ask("top 10 salary")
data.ask("highest salary by city")
data.ask("lowest age")
data.ask("count city")
data.explain()
data.magic()
```

### Export
```python
data.export("output.csv")    # CSV
data.export("output.json")   # JSON
data.export("output.xlsx")   # Excel (requires openpyxl)
```

---

## Stream Mode (Big Files)

DipenCSV auto detects file size and switches to stream mode for files > 500MB:

```python
data = Data("hugefile.csv")          # auto detects
data = Data("hugefile.csv", stream=True)  # force stream
```

Supported in stream mode: `mean()`, `max()`, `min()`, `count()`, `group_mean()`, `filter()`, `top_n()`

---

## Smart Error Handling

```python
data.mean("salry")
# ❌ Column 'salry' not found.
# 💡 Did you mean:
#   - salary
#   - salary_usd
```

---

## Common Issues

**KeyError after clean()**
```python
data.clean()
print(data.columns)      # check actual column names
data.mean("salary")      # use lowercase
```

**Excel export failing**
```bash
pip install openpyxl
```

**Big file crashes**
```python
data = Data("bigfile.csv", stream=True)
```

---

## Dependencies
- `pandas >= 1.5.0`
- `scikit-learn >= 1.0.0`
- `openpyxl >= 3.0.0` (optional, Excel export)

## Documentation

| Doc | What it covers |
|-----|----------------|
| [Getting Started](https://github.com/Dipendra367/dipencsv/blob/main/docs/getting_started.md) | installation, quick start |
| [Loading Data](https://github.com/Dipendra367/dipencsv/blob/main/docs/loading_data.md) | Data(), auto mode, stream mode |
| [Properties](https://github.com/Dipendra367/dipencsv/blob/main/docs/properties.md) | columns, shape |
| [Understanding Data](https://github.com/Dipendra367/dipencsv/blob/main/docs/understanding_data.md) | summary, report, explain, magic |
| [Cleaning Data](https://github.com/Dipendra367/dipencsv/blob/main/docs/cleaning_data.md) | clean, drop, rename, fill |
| [ML Preparation](https://github.com/Dipendra367/dipencsv/blob/main/docs/ml_prep.md) | encode, normalize, split etc |
| [Analytics](https://github.com/Dipendra367/dipencsv/blob/main/docs/analytics.md) | mean, correlation, outliers etc |
| [Query](https://github.com/Dipendra367/dipencsv/blob/main/docs/query.md) | sort, find, first, last |
| [Intelligence](https://github.com/Dipendra367/dipencsv/blob/main/docs/intelligence.md) | ask, explain, magic |
| [Stream Mode](https://github.com/Dipendra367/dipencsv/blob/main/docs/stream_mode.md) | big file handling |
| [Export](https://github.com/Dipendra367/dipencsv/blob/main/docs/export.md) | csv, json, xlsx |
| [Examples](https://github.com/Dipendra367/dipencsv/blob/main/docs/examples.md) | real world examples |
| [FAQ](https://github.com/Dipendra367/dipencsv/blob/main/docs/faq.md) | common student questions |
| [ML Workflow](https://github.com/Dipendra367/dipencsv/blob/main/docs/ml_workflow.md) | full end-to-end ML example |
## License
MIT License

## Author
Built by Dipendra — a CS student who wanted pandas to be less painful.
