# Cheat sheet

Sintaxe, operações, critérios de escolha e erros para consulta rápida.

Página: https://resumos.rgo.pt/cadeiras/ct-iadp/folha-consulta/

## Python

| Pedido | Sintaxe ou regra |
| --- | --- |
| Atribuir e comparar | `x = 3`; `x == 3` |
| Potência, quociente, resto | `a ** b`; `a // b`; `a % b` |
| Ler um inteiro | `n = int(input())` |
| Mostrar duas casas | `print(f"{valor:.2f}")` |
| Decidir | `if condicao:`; `elif outra:`; `else:` |
| Repetir até condição falsa | `while condicao:` |
| Percorrer elementos | `for x in valores:` |
| Inteiros de 1 até n | `range(1, n + 1)` |
| Último elemento | `sequencia[-1]` |
| Slice | `[inicio:fim:passo]`, fim excluído |
| Copiar lista | `lista.copy()`, cópia superficial |
| Construir lista | `[f(x) for x in valores if condicao(x)]` |
| Devolver da função | `return resultado` |
| Abrir texto | `with open(caminho, encoding="utf-8") as f:` |

`input` devolve texto. `print` não devolve o valor mostrado. `sort()` altera e devolve `None`; `sorted()` cria outra lista. Um valor por defeito mutável numa função é partilhado entre chamadas. [Explicações](https://resumos.rgo.pt/cadeiras/ct-iadp/funcoes/).

| Coleção | Ordem | Repetições | Alteração |
| --- | --- | --- | --- |
| Lista | Sequência | Sim | Sim |
| Tuplo | Sequência | Sim | Sem substituir elementos |
| Conjunto | Sem ordem de leitura garantida | Não | Sim |
| Dicionário | Inserção das chaves | Chaves únicas | Sim |

Conjunto vazio: `set()`. Dicionário vazio: `{}`. União: `a | b`; interseção: `a & b`; diferença: `a - b`. Contar: `d[x] = d.get(x, 0) + 1`. [Coleções](https://resumos.rgo.pt/cadeiras/ct-iadp/conjuntos-dicionarios/).

## NumPy

```
import numpy as np
```

| Pedido | Operação |
| --- | --- |
| Criar | `np.array(valores, dtype=float)` |
| Forma e tamanho | `a.shape`; `a.ndim`; `a.size`; `a.dtype` |
| Matriz, linha i e coluna j | `a[i, j]` |
| Coluna j | `a[:, j]` |
| Filtrar | `a[a > 0]` |
| Somar por coluna | `a.sum(axis=0)` |
| Somar por linha | `a.sum(axis=1)` |
| Produto matricial | `a @ b` |
| Produto elemento a elemento | `a * b` |
| Copiar dados | `a.copy()` |

Broadcasting compara dimensões a partir da direita: iguais ou uma delas 1. Slices básicos podem partilhar dados. `reshape` conserva o número de elementos. [Arrays](https://resumos.rgo.pt/cadeiras/ct-iadp/numpy/).

## pandas

```
import pandas as pd
```

| Pedido | Operação |
| --- | --- |
| Ler CSV | `pd.read_csv(caminho, sep=";", decimal=",")` |
| Inspecionar | `df.head()`; `df.shape`; `df.dtypes`; `df.info()` |
| Coluna como Series | `df["x"]` |
| Coluna como tabela | `df[["x"]]` |
| Rótulos | `df.loc[linhas, colunas]` |
| Posições | `df.iloc[linhas, colunas]` |
| Filtrar duas condições | `df.loc[(df["x"] > 0) & (df["y"] == "A")]` |
| Alterar o original | `df.loc[mascara, "x"] = valor` |
| Coluna calculada | `df["total"] = df["q"] * df["preco"]` |
| Ordenar | `df.sort_values("x")` |
| Nulos | `s.isna()`; `s.notna()`; `s.fillna(valor)` |
| Linhas sem nulo em x | `df.dropna(subset=["x"])` |
| Contar linhas e conhecidos | `len(df)`; `s.count()` |
| Frequências | `s.value_counts(dropna=False)` |
| Estatísticas | `s.sum()`; `s.mean()`; `s.median()`; `s.std()` |
| Exportar sem índice | `df.to_csv(caminho, index=False)` |

`loc` inclui os extremos dos slices por rótulo; `iloc` exclui o fim. Series alinham pelo índice. Usa `&`, `|` e `~`, com parênteses, não `and` e `or`. pandas usa normalmente `ddof=1` na variância; NumPy usa `ddof=0`. [Seleção](https://resumos.rgo.pt/cadeiras/ct-iadp/selecao-filtros/) e [estatística](https://resumos.rgo.pt/cadeiras/ct-iadp/estatistica/).

## Escolher a transformação

| Objetivo | Operação |
| --- | --- |
| Acrescentar linhas | `pd.concat([a, b], ignore_index=True)` |
| Relacionar por chave | `a.merge(b, on="id", how="left", validate="many_to_one")` |
| Relacionar com índice | `a.join(b, on="id")` |
| Longo para largo, chave única | `df.pivot(index="i", columns="c", values="v")` |
| Longo para largo, agregar repetidos | `df.pivot_table(index="i", columns="c", values="v", aggfunc="sum")` |
| Largo para longo | `df.melt(id_vars="id", var_name="medida", value_name="valor")` |
| Total por grupo | `df.groupby("grupo")["v"].sum()` |
| Total do grupo em cada linha | `df.groupby("grupo")["v"].transform("sum")` |

Uma junção muitos-para-muitos multiplica correspondências. `pivot_table` usa média por defeito; escreve a agregação pedida. `size` conta linhas; `count` conta não nulos. [Junções](https://resumos.rgo.pt/cadeiras/ct-iadp/concatenacao-juncoes/), [formas](https://resumos.rgo.pt/cadeiras/ct-iadp/reestruturar/) e [grupos](https://resumos.rgo.pt/cadeiras/ct-iadp/agrupamentos/).

## Texto, tempo e gráficos

| Pedido | Operação ou critério |
| --- | --- |
| Limpar texto | `s.str.strip().str.lower()` |
| Procurar texto literal | `s.str.contains("abc", regex=False, na=False)` |
| Converter datas | `pd.to_datetime(s, format="%d/%m/%Y", errors="coerce")` |
| Componentes da data | `s.dt.year`; `s.dt.month`; `s.dt.dayofweek` |
| Total diário | `df.set_index("data")["v"].resample("D").sum(min_count=1)` |
| Acrescentar dias | `timedelta(days=n)` |
| Acrescentar meses | `relativedelta(months=n)` |
| Medir tempo decorrido | Diferença de duas chamadas `time.perf_counter()` |
| Comparar categorias | Barras, zero na origem |
| Evolução temporal | Linha, datas ordenadas |
| Distribuição de uma variável | Histograma, intervalos declarados |
| Associação de duas variáveis | Dispersão, um ponto por observação |

Ausência não é zero sem uma hipótese. Dias não são meses. Um gráfico precisa de unidade, rótulos e dados conferidos. [Texto](https://resumos.rgo.pt/cadeiras/ct-iadp/texto-categorias/), [tempo](https://resumos.rgo.pt/cadeiras/ct-iadp/datas-tempos/) e [gráficos](https://resumos.rgo.pt/cadeiras/ct-iadp/graficos/).

## Operações adicionais das aulas

*   `s.mode()`: Series com todas as modas; `(s - s.mean()).abs().mean()`: desvio absoluto médio, equivalente ao antigo `mad()`.
*   `s.sem()`: erro padrão da média; `s.skew()` e `s.kurt()`: assimetria e excesso de curtose amostrais.
*   `cumsum`, `cumprod`, `cummax`, `cummin`: um resultado por prefixo, dependente da ordem.
*   `df.insert(pos, nome, valores)`: altera a tabela; `df.pop(nome)`: remove e devolve a coluna; `del df[nome]`: remove.
*   `pd.concat(blocos, keys=origens)`: conserva a origem num nível de índice; `verify_integrity=True`: rejeita rótulos repetidos no eixo concatenado.
*   `np.eye(n)`: identidade; `a.itemsize`: bytes por elemento; `a.nbytes`: bytes dos dados.
*   `np.random.default_rng(semente)`: gerador explícito; `integers(a, b)`: extremo b excluído; `shuffle`: altera; `permutation`: devolve outra sequência.
