Alura > Cursos de Data Science > Cursos de Data Science > Conteúdos de Data Science > Primeiras aulas do curso Praticando gráficos: distribuição com Seaborn

Praticando gráficos: distribuição com Seaborn

Gráficos de distribuição - Criando gráficos de distribuição

Boas-vindas! Meu nome é Valquíria Alencar, sou instrutora na escola de Dados da Alura, e irei te acompanhar ao longo dessa jornada de aprendizagem.

Audiodescrição: Valquíria se descreve como uma mulher branca, de olhos castanho-escuros, cabelos loiros e ondulados abaixo dos ombros, e sobrancelhas castanho-escuras. Ela usa um piercing prateado no septo, tem tatuagens em ambos os braços, veste uma camisa rosa-clara com estampa em tons de rosa e azul, e está sentada no estúdio da Alura, com uma parede clara ao fundo iluminada em gradiente azul e ciano, uma planta à direita da instrutora, e uma estante preta à esquerda com enfeites, plantas, livros e pontos de iluminação amarela.

Criando gráficos de distribuição

Neste curso, vamos praticar a criação de gráficos em Python, especificamente, gráficos de distribuição. Para isso, temos um notebook pronto, que vamos executar ao longo da aula. Você pode consultá-lo posteriormente, na atividade após este vídeo.

Usaremos a ferramenta do Google Colab.

Carregando os dados

Começamos carregando os dados. Para isso, primeiro importamos a biblioteca Pandas (pandas). Depois, lemos um arquivo CSV (pd.read_csv()) e armazenamos na variável df. Por fim, verificamos as cinco primeiras linhas com df.head().

import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/alura-cursos/python_dados/refs/heads/main/Dados/loja_vendas.csv')
df.head()

Retorno da célula:

ID_compraunidadecidadedatahorariocategoria_produtovalor_unitarioquantidadevalor_totalmetodo_pagamentoID_clienteprograma_cashbackidadeavaliacao_compra
6Parque das naçõesSanto André2022-01-0315:40Eletrônicos4457.9417831.6Dinheiro6149Sim3010
5Oswaldo CruzSão Caetano do Sul2022-01-0316:48Ferramentas e construção115.91115.9PIX9491Sim369
9PaulicéiaSão Bernardo do Campo2022-01-0312:08Beleza e cuidados pessoais68.92137.8Cartão5288Não399
4Oswaldo CruzSão Caetano do Sul2022-01-039:29Ferramentas e construção80.95404.5PIX9679Sim3510
8Parque das naçõesSanto André2022-01-0313:02Beleza e cuidados pessoais165.04660.0PIX1380Não509

Os dados retornados são de uma rede de lojas de departamento, incluindo informações sobre vendas, como unidade, data, horário, categoria do produto, valor unitário, quantidade, valor total, método de pagamento; e sobre clientes, como ID, idade e avaliação da compra.

Importando a biblioteca seaborn

Criaremos gráficos de distribuição para entender como os dados se espalham ao longo de uma variável, útil para identificar padrões e outliers (valores discrepantes). Para criar os gráficos, importaremos a biblioteca seaborn.

import seaborn as sns

Criando um histograma

Agora, vamos explorar diferentes tipos de gráficos de distribuição, começando com o histograma, que visualiza a distribuição dos dados ao longo de diferentes faixas de valores. Podemos plotar a variável da idade das pessoas clientes (idade) para entender a distribuição demográfica.

Para plotar um histograma, usamos a função histplot() da biblioteca seaborn. Passamos para ela o nome do DataFrame (df) e especificamos a coluna de interesse, no caso, a idade.

Em seguida, definimos o parâmetro bins, que determina os intervalos no gráfico. Nese caso, executamos com bins=10 e, assim, visualizamos o histograma da idade, identificando as faixas de maior concentração entre 35 e 50 anos.

sns.histplot(df['idade'], bins=10)

Retorno da célula

Gráfico de barras em tons de azul sobre um fundo branco, mostrando a distribuição de 'idade' no eixo horizontal e 'Count' no eixo vertical. As barras representam faixas etárias variando de 20 a 70 anos em intervalos de 10, com o maior número de ocorrências na faixa dos 30-50 anos. O eixo vertical varia de 0 a 1200 em intervalos de 200.

Ao criar um histograma, a ideia é visualizar onde os dados estão mais concentrados, bem como as faixas com menos concentração de informações (no exemplo acima, os menores intervalos estão concentrados na faixa de 20 anos e a partir de 50 anos).

Dica! Um valor muito baixo de bins pode simplificar demais o gráfico, enquanto um valor muito alto pode aumentar a granularidade, dificultando a identificação de padrões.

Podemos usar o parâmetro kde=True no histograma para incluir uma curva de densidade de Kernel, suavizando a distribuição. Isso pode ser interessante para visualizar a suavidade dos dados.

sns.histplot(df['idade'], bins=10, kde=True)

Retorno da célula:

Gráfico de barras mostrando a distribuição de frequência de idades. O eixo horizontal é rotulado como 'idade' e varia de 20 a 70 anos, em intervalos de 10. O eixo vertical é rotulado como 'Count' e vai de 0 a 1200, em intervalos de 200. As barras são azuis-claras sobre um fundo branco, e o gráfico inclui uma linha de densidade suavizada em azul-escuro, indicando a tendência da distribuição. O pico do histograma está entre as idades de 30 e 40 anos.

Como resultado, temos uma linha suavizada ao redor dos intervalos do gráfico. Dessa forma, conseguimos verificar exatamente o sentido da distribuição.

Criando um KDE plot

Além do histograma, existe o KDE plot, que mostra os dados de forma contínua.

Pra gerar esse gráfico, usamos a função kdeplot(), passando o DataFrame df e a coluna de interesse (idade), com o parâmetro fill=True para preencher a área sob a curva.

sns.kdeplot(df['idade'], fill=True)

Retorno da célula:

Gráfico de densidade com eixo horizontal rotulado como 'idade' variando de 10 a 70 em intervalos de 10. O eixo vertical está rotulado como 'Density' variando de 0.000 a 0.040 em intervalos de 0.005. A curva do gráfico tem formato de sino, começando próxima de 10 anos de idade, atingindo o pico em torno dos 40 anos e descendendo após os 50 anos. A área sob a curva é preenchida em azul-claro.

A distribuição acima é baseada em uma densidade. O KDE plot faz uma estimativa suave da função de densidade, que está relacionada à probabilidade dos dados.

A escolha entre histograma e KDE plot depende do que queremos mostrar. O histograma é ideal para intervalos com maior granularidade, enquanto o KDE plot é melhor para visualizações contínuas.

Criando um boxplot

Outro gráfico importante é o boxplot, usado para analisar estatísticas descritivas. Para criá-lo, usamos a função boxplot(), passando a coluna idade como y e o DataFrame df como data.

sns.boxplot(y='idade', data=df)

Retorno da célula:

Gráfico de caixa (boxplot) em tons de azul sobre um fundo branco, demonstrando a distribuição de dados de idade. O eixo y varia de 20 a 70 anos em intervalos de 10. A caixa principal se estende de aproximadamente 30 a 50, com a mediana em torno de 40. Há linhas verticais (bigodes) que vão até o valor mínimo e máximo dos dados, com cinco pontos de dados atípicos acima de 60.

O boxplot mostra o primeiro quartil, a mediana e o terceiro quartil, além dos bigodes, linhas que indicam os valores mínimo e máximo. Os pontos fora dos bigodes são outliers.

Podemos comparar mais de uma variável no boxplot, como a idade (idade) em relação ao método de pagamento (metodo_pagamento). Isso nos permite visualizar diferenças de idade entre métodos como dinheiro, Pix, cartão e carteira digital.

Nesse caso, chamamos novamente a função boxplot(), mas definimos o x como metodo_pagamento. O y continuará como idade, assim como data será df.

sns.boxplot(x='metodo_pagamento', y='idade', data=df)

Retorno da célula:

Gráfico de caixa em tons de azul sobre um fundo branco, mostrando a distribuição de idades em diferentes métodos de pagamento. No eixo horizontal, há os métodos: 'Dinheiro', 'PIX', 'Cartão' e 'Carteira digital'. No eixo vertical, está a 'idade' variando de 20 a 70 em intervalos de 10. Cada caixa representa a distribuição de idade para cada método de pagamento, com linhas verticais indicando os valores mínimo e máximo, além de círculos mostrando outliers.

Note que há diferenças em relação à idade para cada método de pagamento. No dinheiro, por exemplo, a mediana está próxima da idade de 50 anos. Já em carteira digital, a mediana está mais próxima dos 30 anos. A partir desse gráfico, conseguimos realizar análises e obter vários insights.

Criando um gráfico de violino

Por fim, falaremos sobre o violin plot (ou gráfico de violino). Além de mostrar a distribuição dos dados, ele traz a forma e suavidade da distribuição.

Para plotar esse tipo de gráfico, utilizamos a função violinplot(), passando a variável metodo_pagamento para x e a coluna idade para y. O formato do violin plot lembra um violino, mostrando a suavidade da distribuição para cada categoria.

sns.violinplot(x='metodo_pagamento', y='idade', data=df)

Retorno da célula:

Gráfico de violino em tons de azul sobre um fundo branco, mostrando distribuições de idade de acordo com quatro métodos de pagamento: 'Dinheiro', 'PIX', 'Cartão', e 'Carteira digital'. No eixo vertical está a 'idade', variando de 10 a 80 em intervalos de 10, e no eixo horizontal está o 'metodo_pagamento'. Cada violino representa a distribuição de idades para cada método, com espessuras variadas indicando a densidade dos dados. As áreas centrais mais escuras indicam a faixa interquartil e a linha mediana.

Aplicando customizações básicas

Para personalizar os gráficos, podemos adicionar títulos, rótulos aos eixos e ajustar o tamanho da figura. No código abaixo, aplicamos customizações básicas:

import matplotlib.pyplot as plt

# Definindo o tamanho da figura
plt.figure(figsize=(8, 4))

# Plotando o gráfico
sns.violinplot(x='metodo_pagamento', y='idade', data=df, hue='metodo_pagamento')

# Definindo o título do gráfico
plt.title('Violinplot da distribuição das idades por método de pagamento', loc='left', fontsize=14)

# Definindo a label do eixo x
plt.xlabel('Método de pagamento', fontsize=12)

# Definindo a label do eixo y
plt.ylabel('Idade', fontsize=12)

# Removendo a borda do gráfico
sns.despine()

# Exibindo o gráfico
plt.show()

Retorno da célula:

Gráfico de violino exibindo a distribuição das idades por método de pagamento. O eixo vertical representa a 'Idade', variando de 10 a 80 em intervalos de 10. O eixo horizontal indica o 'Método de pagamento' com quatro categorias: 'Dinheiro', 'PIX', 'Cartão', e 'Carteira digital'. Cada categoria tem uma forma colorida: 'Dinheiro' em azul, 'PIX' em laranja, 'Cartão' em verde, e 'Carteira digital' em vermelho. No topo do gráfico está o título 'Violinplot da distribuição das idades por método de pagamento'.

Começamos o código importando o módulo pyplot da biblioteca matplotlib. Depois, definimos o tamanho da figura com plt.figure(), especificando largura e altura com figsize. Além disso, definimos cores para cada categoria do método de pagamento e ajustamos outros detalhes visuais.

Conclusão

Após este vídeo, teremos uma série de exercícios para você praticar e aprimorar suas habilidades na criação de gráficos de distribuição. Nos encontramos em uma próxima oportunidade!

Sobre o curso Praticando gráficos: distribuição com Seaborn

O curso Praticando gráficos: distribuição com Seaborn possui 13 minutos de vídeos, em um total de 13 atividades. Gostou? Conheça nossos outros cursos de Data Science em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Data Science acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas