Apresentação
📊 NumPy, Pandas & PySpark — Stack de Dados para AI
Bibliotecas essenciais para processamento de dados em pipelines de AI. A DEUS trabalha com dados — domina estas ferramentas.
NumPy — Computação Numérica
O que é
Biblioteca fundamental para arrays multidimensionais e operações numéricas em Python. Base de Pandas, scikit-learn, PyTorch.
Conceitos chave
ndarray — array homogéneo, tipado, em memória contígua. Muito mais rápido que listas para operações numéricas.
Broadcasting — regras para operações entre arrays de shapes diferentes sem cópias explícitas. Ex: arr + 1 soma 1 a todos os elementos.
Vectorization — operações em arrays inteiros em vez de loops. Usa C por baixo. 10-100x mais rápido.
Indexação avançada — fancy indexing arr[[0,2,4]], boolean indexing arr[arr > 0], slicing arr[1:5, :]
Operações comuns
np.array(),np.zeros(),np.ones(),np.arange(),np.linspace()reshape(),flatten(),ravel()np.dot(),np.matmul()— multiplicação de matrizesnp.sum(),np.mean(),np.std()— com axis para dimensõesnp.argmax(),np.argmin()— índices
Em sistemas de AI
- Embeddings — arrays NumPy antes de ir para vector DB
- Normalização —
(x - mean) / stdpara features - Batch processing — stacking arrays para input de modelos
- Similarity — cosine similarity =
np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
Pandas — Análise de Dados Tabulares
O que é
Construído sobre NumPy. DataFrame = tabela com índices e colunas tipadas. Series = coluna única.
Conceitos chave
Index — labels para linhas. Pode ser multi-level (MultiIndex).
dtypes — object, int64, float64, datetime64, category. Importante para memória e performance.
Missing data — NaN. isna(), fillna(), dropna().
Operações essenciais
Leitura/escrita
pd.read_csv(),pd.read_parquet(),pd.read_json()df.to_csv(),df.to_parquet()— Parquet mais eficiente para dados colunares
Seleção e filtragem
df[col],df[['col1','col2']],df.loc[],df.iloc[]df.query('col > 0')— query string
Transformações
groupby()— agregação por gruposmerge(),join()— como SQL JOINpivot_table(),melt()— reshapeapply(),map(),applymap()— funções por elemento/coluna/linha
Performance
- Evitar
iterrows()— lento. Preferirapply()ou vectorização categorydtype para colunas com poucos valores únicos — poupa memóriapd.read_csv(chunksize=10000)para ficheiros grandes
Em pipelines de AI
- Feature engineering — criar features a partir de dados brutos
- Limpeza — handling de missing, outliers, duplicados
- Preparação para embeddings — texto em colunas, metadados
- Eval datasets — carregar benchmarks (CSV, Parquet) para avaliar RAG
PySpark — Processamento Distribuído
O que é
API Python do Apache Spark. Processa dados que não cabem numa máquina. Lazy evaluation — só executa quando há action.
Conceitos chave
RDD vs DataFrame — DataFrame (Spark SQL) é preferido. API mais rica, otimizador Catalyst, mais performante.
Lazy evaluation — transformations (select, filter, groupBy) não executam. Actions (collect, count, write) disparam a execução.
Partitioning — dados divididos em partições. repartition(), coalesce(). Shuffle quando junta dados de partições diferentes.
Shuffle — operações que redistribuem dados (join, groupBy). Custo alto. Evitar quando possível.
Operações comuns
DataFrame API
spark.read.csv(),spark.read.parquet()df.select(),df.filter(),df.withColumn()df.groupBy().agg()df.join(),df.union()df.write.parquet(),df.write.mode('overwrite')
Funções
from pyspark.sql import functions as FF.col(),F.when(),F.sum(),F.count(),F.avg()
Quando usar PySpark vs Pandas
| Pandas | PySpark |
|---|---|
| Dados cabem em memória (<10-50GB) | Dados distribuídos, clusters |
| Uma máquina | Múltiplos nós |
| Desenvolvimento rápido | Produção a escala |
| Latência baixa (local) | Throughput alto (batch) |
Em pipelines de AI
- Ingestão de documentos — milhões de PDFs, logs
- ETL para RAG — processar documentos em paralelo, chunking distribuído
- Feature store — dados de treino a escala
- Batch embeddings — gerar embeddings para milhões de chunks em paralelo
NumPy vs Pandas vs PySpark — quando cada um
Dados pequenos (<100MB), análise local → Pandas
Dados médios (100MB-10GB), uma máquina → Pandas (com chunks se necessário)
Dados grandes (>10GB), cluster → PySpark
Operações numéricas puras (matrizes, math) → NumPy
Tabelas com colunas, análise exploratória → Pandas
ETL distribuído, batch processing → PySpark
Perguntas de entrevista comuns
NumPy
- Broadcasting — como funciona? Arrays de shapes diferentes
- Vectorization — porque é mais rápido que loops?
- Memória layout — C-contiguous vs F-contiguous
Pandas
- groupby — como funciona? Split-apply-combine
- merge vs join — diferenças
- Evitar iterrows — alternativas (apply, vectorization)
PySpark
- Lazy evaluation — porque? Otimização de plano
- Shuffle — o que causa? groupBy, join
- Pandas vs Spark — quando migrar?
Otimização PySpark
Broadcast join — tabela pequena (<100MB): broadcast(df) evita shuffle. persist/cache — reutilizar DataFrame. repartition vs coalesce — coalesce reduz partições sem shuffle. Evitar collect() — traz tudo ao driver.
Pandas merge types
inner (só match) | left (todas esquerda) | right (todas direita) | outer (união). how='left' preserva todas as linhas da tabela esquerda.
Zona de prática
Sem perguntas. Clica em Editar para adicionar.