# Estatística e resumos de tabelas

Contagens, média, mediana, quantis, dispersão, ordenação e unidades de análise.

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

Uma estatística resume observações. A escolha depende do que cada linha representa e da pergunta. A média de preços por venda não é necessariamente o preço médio por unidade vendida.

## Calcular e interpretar

Para quantidades 2, 3, 5 e 4, a soma é 14 e a média é `14 / 4 = 3,5`. Depois de ordenar, temos 2, 3, 4 e 5; a mediana é `(3 + 4) / 2 = 3,5`. Neste caso coincidem, mas um valor muito elevado afeta mais a média.

```python
import pandas as pd
quantidades = pd.Series([2, 3, 5, 4])
print("n:", quantidades.count())
print("soma:", quantidades.sum())
print("média:", quantidades.mean())
print("mediana:", quantidades.median())
print("mínimo/máximo:", quantidades.min(), quantidades.max())
print("variância amostral:", round(quantidades.var(), 4))
print("variância populacional:", round(quantidades.var(ddof=0), 4))
```

A variância amostral é aproximadamente 1,6667; a populacional é 1,25. Somamos os quadrados dos desvios à média: `2,25 + 0,25 + 2,25 + 0,25 = 5`. A versão amostral divide por `n - 1 = 3`; a populacional divide por `n = 4`.

Em pandas, `var()` e `std()` usam `ddof=1` por defeito. NumPy usa geralmente `ddof=0` nestas operações. Indica a convenção quando comparares resultados. O desvio padrão é a raiz da variância e tem a mesma unidade da variável; a variância tem a unidade ao quadrado.

## Quantis e describe

`quantile(0.25)` calcula o primeiro quartil, `quantile(0.5)` a mediana e `quantile(0.75)` o terceiro quartil. O método de interpolação afeta quantis com poucas observações. Para os quatro valores, pandas com a interpolação linear habitual dá 2,75 e 4,25 nos quartis.

`describe()` de uma coluna numérica mostra contagem, média, desvio padrão, mínimo, quartis e máximo. Usa `describe(include="all")` para incluir tipos não numéricos, mas interpreta as estatísticas conforme a coluna. Uma contagem de linhas não explica por si só o que foi medido.

## Moda, desvios e forma da distribuição

`mode()` devolve uma Series com todas as modas. Para 2, 2, 5 e 5, devolve 2 e 5; não escolhe um único vencedor. `abs()` calcula o valor absoluto de cada elemento e conserva o índice.

O **desvio absoluto médio** é a média das distâncias à média, sem elevar ao quadrado. Para 2, 3, 5 e 4, os desvios absolutos são 1,5, 0,5, 1,5 e 0,5; a sua média é 1. Slides antigos usam `mad()`, removido no pandas 2.0. Usa `(s - s.mean()).abs().mean()`. Não confundas este cálculo com a mediana dos desvios absolutos à mediana, também abreviada MAD.

O **erro padrão da média**, `sem()`, é `std() / sqrt(count())` com a mesma convenção de graus de liberdade. Nos quatro valores, dá aproximadamente 0,6455. O desvio padrão descreve a dispersão das observações; o erro padrão estima a variabilidade da média em amostras. Essa interpretação exige um modelo de amostragem adequado, por exemplo observações independentes.

`skew()` mede assimetria: valores positivos indicam uma cauda mais longa à direita, negativos à esquerda. `kurt()` usa o excesso de curtose de Fisher, cuja referência normal é zero. Estes métodos incluem correções amostrais; poucos dados, valores constantes ou insuficientes podem dar resultados pouco informativos ou em falta. O sinal da curtose, por si só, não identifica uma distribuição.

```
s = pd.Series([2, 3, 5, 4])
print((s - s.mean()).abs().mean())  # 1.0
print(round(s.sem(), 4))           # 0.6455
print(round(s.skew(), 4))          # 0.0
print(round(s.kurt(), 4))          # -1.2
```

Estas operações aplicadas a um DataFrame resumem normalmente cada coluna. Seleciona as colunas quantitativas ou usa `numeric_only=True` quando a tabela mistura números e texto.

## Produto e operações acumuladas

`prod()` reduz todos os valores a um produto. `cumsum()`, `cumprod()`, `cummax()` e `cummin()` devolvem um valor por posição, usando apenas o prefixo até essa posição. A ordem das linhas faz parte do cálculo.

| Valores: 2, 3, 1 | Resultado |
| --- | --- |
| `sum()` / `prod()` | 6 / 6 |
| `cumsum()` | 2, 5, 6 |
| `cumprod()` | 2, 6, 6 |
| `cummax()` | 2, 3, 3 |
| `cummin()` | 2, 2, 1 |

Com `skipna=True`, uma posição ausente continua ausente, mas o acumulado seguinte pode continuar com os valores conhecidos. `skipna=False` propaga a ausência a partir desse ponto. Confere a política antes de apresentar um acumulado como total completo.

## Contar linhas, valores e categorias

`len(df)` conta linhas. `serie.count()` conta valores não nulos. `serie.nunique()` conta valores distintos, normalmente excluindo valores em falta. `serie.value_counts()` conta ocorrências por valor; `dropna=False` inclui a ausência como categoria na contagem.

```
frequencias = df["cidade"].value_counts()
proporcoes = df["cidade"].value_counts(normalize=True)
```

`normalize=True` divide cada contagem pelo total de valores considerados. Se excluíres nulos, a soma das proporções é relativa apenas aos valores conhecidos.

## Ordenar e escolher extremos

`sort_values("quantidade")` ordena pelos valores da coluna. `sort_index()` ordena pelos rótulos do índice. Para desempatar, passa mais de uma coluna, como `sort_values(["cidade", "quantidade"])`. `ascending=[True, False]` ordena a cidade por ordem crescente e a quantidade por ordem decrescente.

`idxmax()` devolve o rótulo de uma ocorrência máxima, não o próprio valor. Para devolver todas as vendas empatadas no máximo, usa uma máscara com `df["quantidade"] == df["quantidade"].max()`.

## Uma média ponderada

Vendemos duas unidades a 1,50 euros e três a 1,20 euros. A média simples dos dois preços é 1,35 euros. O preço médio por unidade é `(2 × 1,50 + 3 × 1,20) / (2 + 3) = 1,32 euros`. As quantidades são os pesos.

Confere a unidade do numerador e do denominador. Faturação dividida por unidades dá euros por unidade; faturação dividida por vendas dá euros por venda. Nenhuma das duas substitui a outra.

## Exercícios

Calcular por unidade

Vendeste 2 unidades a 1,50 euros e 3 a 1,20. Qual é o preço médio por unidade, em euros?

Primeira pista

Divide a faturação pelo número total de unidades.

Mais uma pista

A faturação é 6,60 e existem cinco unidades.

Ver solução

6,60 / 5 = 1,32 euros por unidade. A média simples dos preços não considera quantas unidades foram vendidas a cada preço.

#### Erros frequentes

Responder 1,35, que é a média das duas linhas de preços.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/ct-iadp/estatistica/#uma-m%C3%A9dia-ponderada)

Identificar o denominador

Os valores 2, 3, 5 e 4 têm soma dos quadrados dos desvios à média igual a 5. Qual é a variância populacional?

Primeira pista

Na variância populacional, divide pelo número de observações.

Mais uma pista

Há quatro observações.

Ver solução

A variância é 5 / 4 = 1,25. A amostral dividiria por 3 e daria aproximadamente 1,6667.

#### Erros frequentes

Usar o valor por defeito de pandas sem conferir a convenção do enunciado.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/ct-iadp/estatistica/#calcular-e-interpretar)

Distinguir medidas de dispersão

Para os valores 2, 3, 5 e 4, qual é o desvio absoluto médio em relação à média?

Primeira pista

Calcula a média e as quatro distâncias absolutas a esse valor.

Mais uma pista

A média é 3,5. As distâncias somam 4.

Ver solução

(1,5 + 0,5 + 1,5 + 0,5) / 4 = 1. Em pandas, usa (s - s.mean()).abs().mean(). Não elevas os desvios ao quadrado.

#### Erros frequentes

Calcular variância ou desvio padrão. O antigo método mad() já não está disponível em pandas 2.0 ou posterior.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/ct-iadp/estatistica/#moda-desvios-e-forma-da-distribui%C3%A7%C3%A3o)

Usar apenas o prefixo disponível

Uma Series contém 2, 5, 3 e 8, por esta ordem. Quanto vale a terceira posição do resultado de cummax()?

Primeira pista

Nessa posição, só foram considerados os três primeiros valores.

Mais uma pista

Compara 2, 5 e 3.

Ver solução

O máximo do prefixo é 5. O resultado completo é \[2, 5, 5, 8\]; o 8 só influencia a quarta posição.

#### Erros frequentes

Usar o máximo global, que depende de uma observação posterior.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/ct-iadp/estatistica/#produto-e-opera%C3%A7%C3%B5es-acumuladas)
