Boxplot

Resumir uma variável quantitativa com cinco números, achar valores atípicos e comparar grupos.
GráficosGráficosAula 5 Aula 7← voltar ao mapa
Na prova · essencial Comparar grupos e ler a assimetria pelos 50% centrais (Q1, mediana e Q3). Guia da prova

Os códigos desta página rodam no navegador, mas não sozinhos: clique em Run Code em cada bloco, de cima para baixo.

DicaEm uma frase

O boxplot desenha os quartis de uma variável quantitativa: a caixa guarda os 50% centrais dos dados, a linha dentro dela é a mediana, as hastes vão até os valores mais extremos que ainda não são atípicos, e os pontos soltos são os valores atípicos.

A ideia

O boxplot apareceu na Aula 5 (renda dos clientes da Empresa de TV) e foi revisado na Aula 7. Ele é a versão desenhada das medidas de posição que o .describe() calcula. Cada parte do gráfico tem um significado:

  • Caixa: vai do primeiro quartil \(Q_1\) ao terceiro quartil \(Q_3\). Dentro dela estão 50% das observações. A altura da caixa é a distância interquartil, \(Q_3 - Q_1\), uma medida de dispersão.
  • Linha dentro da caixa: a mediana (\(Q_2\)).
  • Limites para atípicos: \(LI = Q_1 - 1{,}5 \cdot (Q_3 - Q_1)\) e \(LS = Q_3 + 1{,}5 \cdot (Q_3 - Q_1)\). Esses limites não aparecem no gráfico; eles só decidem o que é atípico.
  • Hastes: a haste inferior vai até o menor valor dos dados que ainda é maior ou igual a \(LI\); a superior, até o maior valor que ainda é menor ou igual a \(LS\).
  • Pontos soltos (◦): observações abaixo de \(LI\) ou acima de \(LS\), os valores atípicos.

O grande trunfo do boxplot é comparar grupos: uma variável quantitativa (renda) separada pelas categorias de uma qualitativa (plano). Caixas lado a lado mostram na hora qual grupo tem valores maiores e qual varia mais.

No código

1. As contas por trás da caixa. Vamos calcular os limites para o plano B, em mil reais.

No plano B, \(Q_1 = 4{,}15\) e \(Q_3 = 6{,}375\), então \(LI = 0{,}8125\) e \(LS = 9{,}7125\). Cinco clientes ficam fora desses limites: 0,6 e 0,8 (abaixo de \(LI\)) e 10,2, 10,6 e 19,2 (acima de \(LS\)). As hastes param em 2,5 e 9,5, os valores mais extremos que ainda estão dentro dos limites.

2. Boxplot com plt.boxplot, como na Aula 5. Passamos uma lista com as duas séries e usamos plt.plot para marcar a média de cada grupo com um ponto vermelho ('ro').

Como ler: a caixa inteira do plano B fica abaixo da caixa do plano A. O \(Q_3\) do B (6,375) é menor que o \(Q_1\) do A (7,475): 75% dos clientes do B ganham até 6,375 mil reais, enquanto 75% dos clientes do A ganham pelo menos 7,475 mil. A caixa do A também é mais alta, então a renda varia mais nesse plano. No B, o ponto vermelho da média (5,689) fica acima da mediana (5,15), puxado pelo atípico de 19,2 mil reais.

3. Boxplot pelo pandas, com by=. O df.boxplot separa os grupos sozinho a partir de uma coluna qualitativa. Ele coloca um título automático em cima da figura, que tiramos com plt.suptitle('').

A vantagem é não precisar criar renda_a e renda_b à mão: com três, cinco ou dez categorias, o comando é o mesmo.

Armadilhas comuns

  • Achar que as hastes vão do mínimo ao máximo. Só vão quando não há atípicos. No plano B, o máximo é 19,2, mas a haste superior para em 9,5.
  • Achar que atípico é erro. Um cliente com renda de 19,2 mil é raro no plano B, mas pode ser real. Atípico é um aviso para investigar, não uma ordem para apagar.
  • Procurar a média no boxplot. A linha da caixa é a mediana. Se quiser a média, desenhe-a, como fizemos com plt.plot(..., 'ro'). Média longe da mediana é sinal de assimetria.
  • Boxplot de variável qualitativa. Não existe quartil de “estado civil”. Para qualitativas, use barras.
  • tick_labels ou labels. Nas versões novas do matplotlib o argumento é tick_labels; em versões antigas (antes da 3.9), é labels. Se aparecer erro de argumento, troque um pelo outro.
  • Esquecer o plt.suptitle(''). Sem ele, o df.boxplot(..., by=) escreve “Boxplot grouped by PLANO” em cima do seu título.

Duas variáveis podem ter boxplots idênticos e formatos bem diferentes, por exemplo com dois picos. O boxplot mostra só cinco números. Para ver o formato completo da distribuição, olhe também o histograma.

Exercícios aqui na página

Complete os ______ e clique em Run Code: a correção aparece logo abaixo. Use Show Hint para uma dica e Show Solution para ver uma resolução. O Python roda no seu navegador; na primeira vez ele leva alguns segundos para carregar.

Exercício 1

A altura da caixa do boxplot é a amplitude interquartil, \(Q_3 - Q_1\). Calcule-a para a renda dos clientes do plano A.

Q1 deixa 25% dos valores abaixo; Q3 deixa 75%.

q1_a = renda_a.quantile(0.25)
q3_a = renda_a.quantile(0.75)
aiq_a = q3_a - q1_a
aiq_a

Exercício 2

No Titanic, considere a tarifa (Fare) dos passageiros da 3ª classe. Calcule o limite superior \(LS = Q_3 + 1{,}5\,(Q_3 - Q_1)\) e conte quantos passageiros ficam acima dele, ou seja, quantos pontos atípicos aparecem em cima da haste do boxplot.

Uma comparação numa coluna devolve True/False; somar conta quantos True.

tarifa_3 = titanic.loc[titanic['Pclass'] == 3, 'Fare']
q1 = tarifa_3.quantile(0.25)
q3 = tarifa_3.quantile(0.75)
ls = q3 + 1.5 * (q3 - q1)
plt.boxplot(tarifa_3, tick_labels=['3ª classe'])
plt.ylabel('Fare')
plt.show()
n_atipicos = (tarifa_3 > ls).sum()
n_atipicos

Exercício 3

Desenhe o boxplot da tarifa separado pela classe, com o pandas. Olhando as caixas, qual classe (1, 2 ou 3) tem a maior mediana de tarifa? Responda com o número da classe, como texto.

A coluna que separa os grupos é Pclass.

titanic.boxplot(column='Fare', by='Pclass', figsize=(8, 4))
plt.suptitle('')
plt.title('Tarifa por classe')
plt.show()
classe_maior_mediana = '1'
classe_maior_mediana

Comandos e documentação oficial

formulário o comando está no formulário que você pode consultar na prova.

Pratique

As listas novas de revisão abrem no Google Colab (use Arquivo → Salvar uma cópia no Drive). As listas das aulas estão no Blackboard, na pasta de cada aula.