Skip to content

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

  1. Crie um DataFrame utilizando o dataset importado e mostre as 5 primeiras linhas do DataFrame.
  2. Verifique se há registros incompletos e caso encontre, faça a remoção desses registros
  3. Verifique os tipos dos atributos e apresente a descrição dos atributos numéricos.
  4. Calcule o total de sobreviventes, idade média dos passageiros, e o número de homens e mulheres a bordo
  5. Gere uma visualização para a quantidade de homens e mulheres a bordo
  6. Gere uma visualização que resuma o intevalo das idades dos passageiros considerando seu sexo e se o passageiro sobreviveu.
  7. Gere uma visualização do tipo boxplot que mostre a tarifa de acordo com a classe dos passageiros
  8. Gere uma visualização que mostre a correlação dos atributos no dataset
  9. Gere uma visualização que mostre os sobreviventes de acordo com seu sexo e sua classe