1
resposta

[Projeto] 09 Desafio: gráficos de distribuição de dados para duas variáveis numéricas e/ou categóricas

Desafio 1: Baixe a base de dados com as notas das turmas de Data Visualization e crie o violinplot, buscando interpretar as diferenças entre cada uma delas e documentando os seus achados. Sinta-se livre para adicionar alguns dos recursos que aprendemos ao longo do curso, como anotações, textos e figuras.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

1. Carregando os dados

df_notas = pd.read_csv('notas.csv')

2. Configurações Estéticas (Paleta de Cores Alura)

AZUL2, VERDE1, LARANJA1 = '#0077b6', '#2a9d8f', '#f4a261'
CINZA1, CINZA2 = '#212529', '#495057'

3. Criando a figura

fig, ax = plt.subplots(figsize=(10, 6))
sns.set_theme(style="whitegrid")

4. Gerando o Violin Plot

ax = sns.violinplot(data=df_notas, x='Turma', y='Nota',
palette=[AZUL2, VERDE1, LARANJA1], inner="box")

5. Personalização e Títulos

plt.suptitle('Distribuição de Notas por Turma', size=18, color=CINZA1, ha='right', x=0.55, y=1.05)
plt.title('Curso: Data Visualization | Comparativo de Performance', fontsize=12, color=CINZA2, pad=15, loc="left")

ax.set_xlabel('Turmas', fontsize=12)
ax.set_ylabel('Nota Final', fontsize=12)

6. Adicionando Anotações de Insights

ax.annotate('Turma 3: Maior consistência\ne notas mais altas', xy=(2, 85), xytext=(1.2, 90),
arrowprops=dict(facecolor=CINZA2, shrink=0.05, width=1), fontsize=10)

sns.despine(bottom=True)
plt.show()

Desafio 2: Crie o gráfico de dispersão que distribua as medidas de comprimento e largura da amostra B. Desenhe no gráfico as linhas de rejeição para os itens em que o valor de comprimento e largura seja acima de 2% ou abaixo do valor de 20 cm e 5 cm, respectivamente.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

1. Carregando os dados

df_medidas = pd.read_csv("https://raw.githubusercontent.com/alura-cursos/dataviz-graficos/master/dados/medidas_sabao_em_po.csv")
df_b = df_medidas.query("amostra == 'B'")

2. Configurações de cores e parâmetros (2% de tolerância)

AZUL2, LARANJA1, CINZA1, CINZA2, CINZA4 = '#0077b6', '#f4a261', '#212529', '#495057', '#dee2e6'
pct = 0.02

3. Criando a área do gráfico

fig, ax = plt.subplots(figsize=(10, 6))
sns.set_theme(style="white")

4. Gerando o Scatter Plot

sns.scatterplot(data=df_b, x="comprimento", y="largura", color=AZUL2, ax=ax)

5. Desenhando as linhas de rejeição (Regra de Negócio)

Limites para Comprimento (X) baseados em 20cm

ax.axvline(x=20 * (1 - pct), color=CINZA4, linestyle='--')
ax.axvline(x=20 * (1 + pct), color=CINZA4, linestyle='--')

Limites para Largura (Y) baseados em 5cm

ax.axhline(y=5 * (1 - pct), color=CINZA4, linestyle='--')
ax.axhline(y=5 * (1 + pct), color=CINZA4, linestyle='--')

6. Personalização e Títulos

plt.suptitle('Distribuição Comprimento x Largura (Amostra B)', size=18, color=CINZA1, ha='right', x=0.75, y=1.02)
plt.title('Linhas tracejadas indicam tolerância de 2% (20cm e 5cm)', fontsize=12, color=CINZA2, loc='left', pad=15)

ax.set_xlabel('Comprimento (cm)', fontsize=14)
ax.set_ylabel('Largura (cm)', fontsize=14)

sns.despine()
plt.show()

1 resposta

Oi, Moacir! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Você estruturou bem os dois desafios, principalmente o uso de paleta personalizada, anotações no violinplot e a aplicação prática da regra de negócio com tolerância de 2% no scatterplot. Continue assim!

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!