Neste tutorial, demonstramos como ir além de gráficos estáticos e cheios de código e construir um fluxo de trabalho de análise exploratória de dados verdadeiramente interativo diretamente usando o PyGWalker. Começamos preparando o dataset Titanic para queries interativas em larga escala. Essas features projetadas e prontas para análise revelam a estrutura subjacente dos dados, ao mesmo tempo em que permitem tanto a exploração detalhada em nível de linha quanto visualizações agregadas de alto nível para insights mais profundos. Incorporar uma interface de arrastar e soltar estilo Tableau diretamente no notebook permite testar hipóteses rapidamente, fazer comparações intuitivas de coortes e inspecionar a qualidade dos dados de forma eficiente, tudo sem a fricção de alternar entre ferramentas de código e visualização. Copiar Código Copiado Use um navegador diferente import sys, subprocess, json, math, os from pathlib import Path def pip_install(pkgs): subprocess.check_call([sys.executable, "-m", "pip", "install", "-q"] + pkgs) pip_install([ "pygwalker>=0.4.9", "duckdb>=0.10.0", "pandas>=2.0.0", "numpy>=1.24.0", "seaborn>=0.13.0" ]) import numpy as np import pandas as pd import seaborn as sns df_raw = sns.load_dataset("titanic").copy() print("Formato bruto:", df_raw.shape) display(df_raw.head(3)) Configuramos um ambiente Colab limpo e reproduzível instalando todas as dependências necessárias para EDA interativo. Carregamos o dataset Titanic e realizamos uma verificação inicial de sanidade para entender sua estrutura e escala brutas. Isso estabelece uma base estável antes que qualquer transformação ou visualização comece. Copiar Código Copiado Use um navegador diferente def make_safe_bucket(series, bins=None, labels=None, q=None, prefix="bucket"): s = pd.to_numeric(series, errors="coerce") if q is not None: try: cuts = pd.qcut(s, q=q, duplicates="drop") return cuts.astype("string").fillna("Unknown") except Exception: pass if bins is not None: cuts = pd.cut(s, bins=bins, labels=labels, include_lowest=True) return cuts.astype("string").fillna("Unknown") return s.astype("float64") def preprocess_titanic_advanced(df): out = df.copy() out.columns = [c.strip().lower().replace(" ", "_") for c in out.columns] for c in ["survived", "pclass", "sibsp", "parch"]: if c in out.columns: out[c] = pd.to_numeric(out[c], errors="coerce").fillna(-1).astype("int64") if "age" in out.columns: out["age"] = pd.to_numeric(out["age"], errors="coerce").astype("float64") out["age_is_missing"] = out["age"].isna() out["age_bucket"] = make_safe_bucket( out["age"], bins=[0, 12, 18, 30, 45, 60,
Fonte: MarkTechPost
Publicado em 2026-02-17