← Voltar a AI Engineer — DEUS.ai

🟡 B — NumPy, Pandas & PySpark

AI Engineer — DEUS.ai

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 matrizes
  • np.sum(), np.mean(), np.std() — com axis para dimensões
  • np.argmax(), np.argmin() — índices

Em sistemas de AI

  • Embeddings — arrays NumPy antes de ir para vector DB
  • Normalização(x - mean) / std para 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 dataNaN. 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 grupos
  • merge(), join() — como SQL JOIN
  • pivot_table(), melt() — reshape
  • apply(), map(), applymap() — funções por elemento/coluna/linha

Performance

  • Evitar iterrows() — lento. Preferir apply() ou vectorização
  • category dtype para colunas com poucos valores únicos — poupa memória
  • pd.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 F
  • F.col(), F.when(), F.sum(), F.count(), F.avg()

Quando usar PySpark vs Pandas

PandasPySpark
Dados cabem em memória (<10-50GB)Dados distribuídos, clusters
Uma máquinaMúltiplos nós
Desenvolvimento rápidoProduçã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.