Metadata-Version: 2.4
Name: exploradata
Version: 0.1.0
Summary: Ferramentas simples e composáveis para exploração de DataFrames (EDA)
Author-email: Anna Gatelli <anna.gatelli@bateleur.com.br>
License: MIT
Project-URL: Homepage, https://github.com/anna-gatelli/exploradata
Keywords: eda,pandas,data-exploration,data-quality
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas>=1.5
Requires-Dist: numpy>=1.23
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Dynamic: license-file

# exploradata

Ferramentas simples e composáveis para exploração de DataFrames pandas (EDA).

Todas as funções **retornam DataFrames** — dá para filtrar, ordenar, exportar e encadear. Quando você só quer olhar, use `verbose=True` ou a função `profile()`.

## Instalação

```bash
pip install git+https://github.com/anna-gatelli/exploradata.git
```

Ou, para desenvolvimento local:

```bash
git clone https://github.com/anna-gatelli/exploradata.git
cd exploradata
pip install -e ".[dev]"
```

## Uso rápido

```python
import pandas as pd
import exploradata as xd

df = pd.read_csv("dados.csv")

# Relatório completo de uma vez
report = xd.profile(df)

# Ou função por função:
xd.unique_values(df, "cidade")   # únicos com frequência e %
xd.summary(df)                   # df.info() melhorado
xd.missing(df)                   # nulos ranqueados
xd.outliers(df)                  # outliers por IQR (ou method="zscore")
xd.peek(df)                      # head + amostra aleatória + tail
```

## Funções

### Visão geral
| Função | O que faz |
|---|---|
| `summary(df)` | Tipo, nulos, únicos, cardinalidade e memória por coluna |
| `peek(df, n=5)` | head + amostra aleatória + tail em um só DataFrame |
| `detect_types(df)` | Detecta números, datas e booleanos "disfarçados" em colunas de texto |

### Qualidade
| Função | O que faz |
|---|---|
| `missing(df)` | Nulos por coluna (contagem e %), ranqueados |
| `duplicates(df, subset=None)` | Linhas duplicadas, completas ou por chave |
| `outliers(df, method="iqr")` | Outliers por IQR ou z-score nas numéricas |
| `text_issues(df)` | Espaços extras e variações de capitalização que inflam os únicos |

### Por coluna
| Função | O que faz |
|---|---|
| `unique_values(df, coluna, top=20)` | Valores únicos com frequência e % (sem coluna: todas) |
| `cardinality(df)` | % de únicos + classificação (id, categoria, constante...) |
| `describe_numeric(df)` | Estatísticas + percentis + skewness + kurtosis |
| `describe_categorical(df)` | Moda, frequências e top valores |

### Relações
| Função | O que faz |
|---|---|
| `correlation(df, method="pearson")` | Matriz de correlação (pearson/spearman/kendall) |
| `high_correlations(df, threshold=0.9)` | Pares de colunas possivelmente redundantes |
| `constant_columns(df)` | Colunas constantes ou quase constantes |

### Consolidado
| Função | O que faz |
|---|---|
| `profile(df)` | Roda tudo e imprime relatório organizado; retorna dict de DataFrames |
| `compare(df_a, df_b)` | Compara schema e distribuições — útil pra validar cargas |

## Exemplo de saída

```python
>>> xd.unique_values(df, "cidade")
  valor  frequencia    pct
0    SP          38  38.00
1    RJ          25  25.00
2    BH          20  20.00
3    sp          10  10.00
4   " SP"         7   7.00
```

Repare que `text_issues(df)` avisaria que "SP", "sp" e " SP" provavelmente são o mesmo valor.

## Rodando os testes

```bash
pytest
```

## Licença

MIT
