Laboratório 3 - Visualização de Dados
Para o laboratório de hoje serão utilizadas as bibliotecas matplotlib
e seaborn
. Portanto, caso você não tenha instalado, você pode fazer isso utilizando o comando:
pip install matplotlib seaborn
Após a instalação das bibliotecas, podemos importa-las no código da seguinte forma:
import matplotlib.pyplot as plt
import seaborn as sns
Visualizações - Matplotlib
Visualização de dados é uma ferramenta importante pois permite sumarização dos dados para identificar comportamentos e padrões que não são possíveis de analisar apenas com tabelas. Existem diferentes tipos de gráficos, cada um com seu objetivo específico como mostrado na imagem a seguir:

Neste laboratório, vamos explorar visalizações com diferentes tipos de gráficos para dar suporte a análises de dados de forma intuitiva. Para os exemplos a seguir, vamos utilizar os seguintes dados
import numpy as np
x = np.arange(0.0, 2.0, 0.01)
y = np.sin(2*np.pi*x)
Configurando Figura e Plots
Para gerar a visualização, iremos utilizar os arrays criados aplicando uma sequencia de passos para criação da figura, definição dos eixos, aplicação dos dados e edição do gráfico. Para criar a figura utilizaremos o método plt.subplots()
como mostrado a seguir:
#cria uma figura
fig, ax = plt.subplots(figsize=(9, 5)) #ax eixo dos graficos
#fig espaço figura
#configurar figura
ax.plot(x, y, color='r', linestyle='-', label='Label 1', marker='o', markevery=5)
ax.plot(x, np.cos(y), color='b', linestyle='--', label='Label 2', marker='o',markevery=5)
ax.plot(x, np.tan(y), color='g', linestyle=':', label='Label 3', marker='o',markevery=5)
#insere titulo na figura
ax.set_title('Este é o título do Gráfico')
#insere rotulo do eixo x
ax.set_xlabel('Este é o eixo X', size=22)
#insere rotulo do eixo y
ax.set_ylabel('Esté o eixo Y', size=22)
#aplica grid
plt.grid(True, linestyle='--')
#legenda
plt.legend()
#salvar figura
fig.savefig('exemplo_plot_1.png')
#mostrar figura
plt.show(True)
Tipos de Gráficos
Neste exemplo será mostrados os exemplos mais comuns de plotagem, incluindo:
- Linha
- Barra
- Scatter
- Histograma
- Subplots
Linha
Podemos criar um gráfico de linha com o matplotlib utilizando o seguinte método:
Example
plt.plot(x, y, cor, estilo, label)
- x: são os dados que serão utilizados no eixo x
- y: são os dados que serão utilizados no eixo y
- color: é a cor que desejamos aplicar
- linestyle: é o estilo da linha que queremos ('-', '--', ':', '-.' )
- marker: é o estilo do marcador para representar os dados ('o', 'i', 'x', '+')
- label: é o rótulo que desejamos aplicar para os marcadores
fig, ax = plt.subplots()
ax.plot(x, x**2, color='g', marker='o', markevery=5)
plt.grid(True, linestyle=':')
Scatter
Para criar um gráfico de dispersão (scatter plot) utilizamos:
Example
plt.scatter(x, y, color, marker, label)
- x: são os dados que serão utilizados no eixo x
- y: são os dados que serão utilizados no eixo y
- color: é a cor que desejamos aplicar
- marker: é o estilo do marcador para representar os dados ('o', 'i', 'x', '+')
- label: é o rótulo que desejamos aplicar para os marcadores
fig, ax = plt.subplots()
y = np.exp(x)
ax.scatter(x, y, color='orange', marker='x');
plt.grid(True, linestyle=':')
Barras
Podemos criar um gráficos de barras tanto na vertical quanto na horizontal, exemplos desses gráficos são apresentados a seguir:
Example
plt.bar(x, height, width, color, label, edgecolor)
- x: são os dados que serão utilizados no eixo x
- height: são os dados que serão utilizados no eixo y
- width: largura de cada barra
- color: é uma lista representando a cor de cada barra
- label: é o rótulo que desejamos aplicar para os marcadores
- edgecolor: cor da borda das barras
dict_exemplo = { 'A' : 10,
'B' : 25,
'C' : 40,
'D' : 30
}
fig, ax = plt.subplots()
chaves = dict_exemplo.keys()
valores = dict_exemplo.values()
ax.bar(chaves, valores, color=['g', 'y', 'r', 'b'], width=0.7, edgecolor='k');
plt.grid(True, linestyle=':')
ax.set_axisbelow(True)
Histograma
Podemos criar um histograma de uma distribuição da seguinte forma:
Example
plt.hist(x, bins, color, label, edgecolor, alpha)
- x: representa a distribuição
- bins: define a quantidade de barras a serem mostradas no histograma
- color: define a cor desejada
- label: atribui um rótulo para a distribuição
- edgecolor: define a cor do contorno das barras
- alpha: define a opacidade das barras
distribuicao = np.random.randn(1000)
fig, ax = plt.subplots()
ax.hist(distribuicao, bins=100, color='b', edgecolor='k', alpha=0.5);
plt.grid(True, linestyle=':')
ax.set_axisbelow(True);
Note
podemos alterar a quantidade de bins, utilizando o atributo bins
.
Subplots
Utilizamos os subplots para apresentar vários gráficos em uma mesma figura. Assim, podemos criar subplots da seguinte forma:
Example
plt.subplots(nrows, ncols, figsize)
- nrows: é a quantidade linhas desejadas para ser adicionado na figura
- ncols: é a quantidade de colunas desejadas para ser adicionado a figura
- figsize: é o tamanho desejado para a figura
O total de subplots da figura é dado por nrows * ncols. Além disso, esse método retorna uma Figura e uma sequencia de eixos (fig, ax) que podem ser indexados individualmente para realizar as plotagens desejadas. Por exemplo, em uma Figura com nrows=2 e ncols=2 temos os seguintes eixos serem plotados
- ax[0, 0]: a qual representa o primeiro subplot da primeira linha da figura
- ax[0, 1]: a qual representa o segundo subplot da primeira linha da figura
- ax[1, 0]: a qual representa o primeiro subplot da segunda linha da figura
- ax[0, 0]: a qual representa o segundo subplot da segunda linha da figura
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(10, 5))
ax[0, 0].plot(x, x/2, )
ax[0, 1].scatter(np.random.random(10), np.random.random(10), color='green')
ax[1, 0].bar(chaves, valores, color='orange', edgecolor='k')
ax[1, 1].hist(distribuicao, bins=100, color='red', edgecolor='k', alpha=0.7);

Visualizações - Seaborn
Seaborn é uma biblioteca de visualização de dados Python baseada em matplotlib. Ele fornece uma interface de alto nível para desenhar gráficos estatísticos atraentes e informativos.
A seguir veremos algumas visualizações que podem ser geradas pelo seaborn, incluindo:
- histplot
- barplot
- boxplot
- violinplot
- scatterplot
- pairplot
- heatmap
- lineplot
seaborn já possui uma série de datasets que podem ser utilizados para treinamento de modelos e também para visualização. Esses datasets estão presentes no
- sns.load_datasets('dataset')
Para os exemplos a seguir utilizaremos o dataset de Iris que já foi utilizado em aulas anteriores
#carrega dataset
df = sns.load_dataset('iris')
df.head()
Histplot
Histplot
sns.histplot(x, kde, data, hue)
- x: representa o nome do atributo que será utilizado na plotagem
- kde: apresenta uma linha representando a densidade da distribuição
- data: o dataframe que será utilizado na plotagem
- hue: define o agrupamento de atributos desejados como base para definir as cores
sns.histplot(x='sepal_width', kde=True, data=df, hue='species')

Barplot
Descrição
sns.barplot(x, y, data, hue, palette)
- x: representa o nome do atributo que será utilizado na plotagem no eixo x
- y: representa o nome do atributo que será utilizado na plotagem no eixo y
- data: o dataframe que será utilizado na plotagem
- palette: a paleta de cores que será utilizada na plotagem
sns.barplot(x='species', y='sepal_width', data=df, palette='viridis')

Boxplot
Descrição
sns.boxplot(x, y, data, hue, palette)
- x: representa o nome do atributo que será utilizado na plotagem no eixo x
- y: representa o nome do atributo que será utilizado na plotagem no eixo y
- data: o dataframe que será utilizado na plotagem
- width: define o tamanho dos box
- palette: a paleta de cores que será utilizada na plotagem
sns.boxplot(x='species', y='sepal_width', data=df, width=0.3, palette='magma')

Violinplot
Descrição
sns.violinplot(x, y, data, hue, width, palette)
- x: representa o nome do atributo que será utilizado na plotagem no eixo x
- y: representa o nome do atributo que será utilizado na plotagem no eixo y
- data: o dataframe que será utilizado na plotagem
- width: define o tamanho dos violinos
- palette: a paleta de cores que será utilizada na plotagem
sns.violinplot(x='species', y='sepal_width', data=df, width=0.7, palette='Reds')

Scatterplot
Descrição
sns.scatterplot(x, y, data, hue)
- x: representa o nome do atributo que será utilizado na plotagem no eixo x
- y: representa o nome do atributo que será utilizado na plotagem no eixo y
- data: o dataframe que será utilizado na plotagem
- hue: define o agrupamento de atributos desejados como base para definir as cores
sns.scatterplot(x='petal_length', y='sepal_length', data=df, hue='species')

Pairplot
Descrição
sns.pairplot(data, hue)
- data: o dataframe que será utilizado na plotagem
- hue: define o agrupamento de atributos desejados como base para definir as cores
sns.pairplot(data=df, hue='species')

Heatmap
Descrição
sns.heatmap(data)
- data: o dataframe que será utilizado na plotagem
sns.heatmap(df.corr())#calcula a corelação dos atributos

Lineplot
- sns.lineplot(x, y, data, hue,)
- x: representa o nome do atributo que será utilizado na plotagem no eixo x
- y: representa o nome do atributo que será utilizado na plotagem no eixo y
- data: o dataframe que será utilizado na plotagem
- hue: define o agrupamento de atributos desejados como base para definir as cores
flights = sns.load_dataset("flights")
sns.lineplot(y='passengers', x='year', data=flights)

Exercícios - Análise e Visualização de Dados
Para o exercício vamos utilizar o dataset titanic
. Este é um conjunto de dados clássico usado em muitos tutoriais e demos de mineração de dados - perfeito para iniciar a análise exploratória e construir modelos de classificação binários para prever a sobrevivência.
Descrição do dataset
Os dados abrangem apenas os passageiros, não a tripulação. As características dos dados são
- survived - Sobrevivente (0 = Não; 1 = Sim)
- pclass - Classe do passageiro
- sex - Sexo
- age - Idade
- sibsp - Número de irmãos/cônjuges a bordo
- parch - Número de pais/filhos a bordo
- fare - Tarifa do passageiro
- embark_town - Porto de embarque
- class - Classe do passageiro
- who - informa se era homem, mulher ou criança
- alone - informa se o passageiro estava sozinho
Podemos importar o dataset da seguinte forma:
dataset = sns.load_dataset('titanic')
EDA
Baseado nos Laboratórios 2 e 3, faça as seguintes atividades
- Crie um DataFrame utilizando o dataset importado e mostre as 5 primeiras linhas do DataFrame.
- Verifique se há registros incompletos e caso encontre, faça a remoção desses registros
- Verifique os tipos dos atributos e apresente a descrição dos atributos numéricos.
- Calcule o total de sobreviventes, idade média dos passageiros, e o número de homens e mulheres a bordo
- Gere uma visualização para a quantidade de homens e mulheres a bordo
- Gere uma visualização que resuma o intevalo das idades dos passageiros considerando seu sexo e se o passageiro sobreviveu.
- Gere uma visualização do tipo boxplot que mostre a tarifa de acordo com a classe dos passageiros
- Gere uma visualização que mostre a correlação dos atributos no dataset
- Gere uma visualização que mostre os sobreviventes de acordo com seu sexo e sua classe