Visualização de Dados
André Grégio
Paulo Almeida
JUSTIÇA 4.0: INOVAÇÃO E EFETIVIDADE NA REALIZAÇÃO DA JUSTIÇA PARA TODOS
PROJETO DE EXECUÇÃO NACIONAL BRA/20/015
1.
Matplotlib
2
Visualização com matplotlib
Referências para estudo:
▸ [Link]
ls-introductory-usage-py
▸ [Link]
3
Visualização de DataFrames com
matplotlib
▸ A biblioteca “tradicional” para confeccionar gráficos é a
MatPlotLib.
▸ Pandas faz uso da MatPlotLib de maneira fácil.
▸ Para usar os plots do MatPlotLib, além de importar o
Pandas no seu programa, faça:
import [Link] as plt
4
Visualização de DataFrames com
matplotlib
Relembrando o DataFrame de pessoas:
dados = {'nome': ["Ana", "Bob", "Cleo"],
'idade': [50, 36, 2],
'altura': [1.5, 1.73, .61]}
df = [Link](dados, columns = ['nome', 'idade', 'altura'])
5
Visualização de DataFrames com
matplotlib
[Link](x='idade', y='altura', kind='bar')
[Link]()
6
Visualização de DataFrames com
matplotlib
>>> sdf = df.sort_values('idade')
>>> [Link](x='idade', y='altura', kind='bar')
>>> [Link]()
7
Visualização de DataFrames com
matplotlib
Suponha um DataFrame composto pelo número de casos e óbitos
por COVID-19 no Paraná durante os meses de fev-mar/2022.
Casos Obitos
Data
2022-02-01 1987643 41056
2022-02-02 2005886 41095
2022-02-03 2032592 41109
…
2022-03-29 2400103 42679
2022-03-30 2402205 42690
2022-03-31 2404630 42700>
8
Visualização de DataFrames com
matplotlib
Suponha um DataFrame composto pelo número de casos e óbitos
por COVID-19 no Paraná durante os meses de fev-mar/2022.
Casos Obitos
Data
2022-02-01 1987643 41056
2022-02-02 2005886 41095
2022-02-03 2032592 41109 [Link]()
… [Link]()
2022-03-29 2400103 42679
2022-03-30 2402205 42690
2022-03-31 2404630 42700>
9
2.
Outros tipos de gráficos
10
Top 5: Dataframe Covid-19
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163
305 Londrina 144141 2397
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471
143 Cascavel 75249 1207
11
Tipos de Gráficos - Barras
12
Tipos de Gráficos - Barras
Como chegar neste gráfico?
13
Tipos de Gráficos - Barras
Vamos começar de forma mais simples…
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163
305 Londrina 144141 2397
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471
143 Cascavel 75249 1207
14
Tipos de Gráficos - Barras
Vamos começar de forma mais simples…
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163
305 Londrina 144141 2397
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471
143 Cascavel 75249 1207
[Link](kind='bar')
[Link]()
15
Tipos de Gráficos - Barras
???
[Link](kind='bar')
[Link]()
16
Tipos de Gráficos - Barras
Vamos rotular o eixo x de acordo com a coluna “MUNICÍPIOS”
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163
305 Londrina 144141 2397
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471
143 Cascavel 75249 1207
17
Tipos de Gráficos - Barras
Vamos rotular o eixo x de acordo com a coluna “MUNICÍPIOS”
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163
305 Londrina 144141 2397
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471
143 Cascavel 75249 1207
[Link](kind='barh', x='MUNICÍPIO', y=['CASOS', 'ÓBITOS POR COVID-19'])
[Link]()
18
Tipos de Gráficos - Barras
Vamos rotular o eixo x de acordo com a coluna “MUNICÍPIOS”
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163 Eixo y
Eixo x
305 Londrina 144141 2397 (barras)
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471
143 Cascavel 75249 1207
[Link](kind='barh', x='MUNICÍPIO', y=['CASOS', 'ÓBITOS POR COVID-19'])
[Link]()
19
Tipos de Gráficos - Barras
Vamos rotular o eixo x de acordo com a coluna “MUNICÍPIOS”
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163
305 Londrina 144141 2397
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471 Barra
143 Cascavel 75249 1207
horizontal
[Link](kind='barh', x='MUNICÍPIO', y=['CASOS', 'ÓBITOS POR COVID-19'])
[Link]()
20
Tipos de Gráficos - Barras (horizontais)
21
Tipos de Gráficos - Barras
E se quisermos ver as barras acumuladas?
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163
305 Londrina 144141 2397
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471
143 Cascavel 75249 1207
22
Tipos de Gráficos - Barras
ax = [Link](kind='bar', x='MUNICÍPIO',
y='CASOS')
[Link](kind='bar',
x='MUNICÍPIO',
y='ÓBITOS POR COVID-19',
ax=ax,
color='red')
[Link]()
23
Tipos de Gráficos - Barras
ax = [Link](kind='bar', x='MUNICÍPIO',
y='CASOS')
[Link](kind='bar',
x='MUNICÍPIO',
y='ÓBITOS POR COVID-19',
ax=ax,
color='red')
[Link]()
24
Tipos de Gráficos - Barras
25
Tipos de Gráficos - Barras
▸ Com eixo y rotulado:
[Link]("Quantidade")
26
Tipos de Gráficos - Barras
▸ Com eixo y rotulado:
[Link]("Quantidade")
27
Tipos de Gráficos - Barras
▸ Com rótulos do eixo x rotacionados 45 graus:
[Link](rotation=45)
28
Tipos de Gráficos - Barras
▸ Com rótulos do eixo x rotacionados 45 graus:
[Link](rotation=45)
29
Tipos de Gráficos - Barras
▸ Em escala logarítmica:
[Link]("log")
30
Tipos de Gráficos - Barras
▸ Em escala logarítmica:
[Link]("log")
31
Tipos de Gráficos - Barras
32
Top 5: Dataframe Covid-19
Vamos fazer um gráfico de pizza…
MUNICÍPIO CASOS ÓBITOS POR COVID-19
20 Curitiba 245996 8163
305 Londrina 144141 2397
262 Maringá 115613 1735
44 Ponta Grossa 80137 1471
143 Cascavel 75249 1207
33
Carregando os dados…
import pandas as pd
import [Link] as plt
df = pd.read_csv("Covid/informe_epidemiologico_31_03_2022_obitos_casos_municipio.csv",
delimiter=";",
usecols=['MUNICÍPIO', 'CASOS', 'ÓBITOS POR COVID-19'])
df.sort_values(by=['CASOS'], inplace=True, ascending=False)
top5 = [Link](5) # Obtém os 5 maiores valores
34
Tipos de Gráficos - Pizza
35
Tipos de Gráficos - Pizza
Como chegar neste gráfico?
36
Tipos de Gráficos - Pizza
import pandas as pd
import [Link] as plt
# Código do carregamento dos dados suprimido…
[Link](kind='pie',y='CASOS')
[Link]()
37
Tipos de Gráficos - Pizza
38
Tipos de Gráficos - Pizza
import pandas as pd
import [Link] as plt
# Código do carregamento dos dados suprimido…
[Link](kind='pie', y='CASOS', labels=top5['MUNICÍPIO'])
[Link]()
39
Tipos de Gráficos - Pizza
40
Tipos de Gráficos - Pizza
import pandas as pd
import [Link] as plt
# Código do carregamento dos dados suprimido…
[Link](kind='pie', y='CASOS', labels=top5['MUNICÍPIO'],
autopct='%1.1f%%')
[Link]()
41
Tipos de Gráficos - Pizza
42
3.
Médias Móveis
43
Rolling: médias móveis
Uma média móvel usa “janelas deslizantes” para mostrar a
média de um período de tempo, evitando conclusões
imprecisas devido a picos e vales sazonais.
▸ Permite melhor visualização das tendências dos dados
▸ “Achata” as flutuações que dificultam a interpretação
44
Rolling: médias móveis
Uma média móvel usa “janelas deslizantes” para mostrar a
média de um período de tempo, evitando conclusões
imprecisas devido a picos e vales sazonais.
Exemplo: Novos casos de COVID-19 de acordo com a Secretaria
de Saúde do Paraná
[Link]
45
Rolling: médias móveis
Exemplo: Novos casos de
COVID-19 de acordo com a
Secretaria de Saúde do
Paraná
[Link]
Pagina/Coronavirus-COVID-19
46
Rolling: médias móveis
Com a média móvel e janela de 7 dias…
47
Rolling: médias móveis
Trecho de Código:
ax=dfcovid['Novos'].plot(label="Novos Casos")
ax.set_ylabel("Casos")
ax.set_title("COVID-19 no PR")
mediamovel = [Link](7).mean()
[Link](label='Média Móvel', color='orange')
48
Rolling: médias móveis
Para outros tipos de rolling, basta substituir mean() pelo
método que se deseja, por exemplo, std().
Tipos de rolling possíveis:
[Link]
49
4.
Seaborn
50
Seaborn
Ferramenta para visualização de dados baseada em
Matplotlib.
Interface de (ainda mais) alto nível que o Matplotlib para
geração de gráficos.
51
relplot
relplot é uma função flexível para gerar gráficos mostrando as
relações entre variáveis.
Por padrão, os gráficos gerados são de dispersão (scatter)
Veja a documentação em:
[Link]/generated/[Link]
52
relplot
[Link](data=dados, x=nomeX, y=nomeY)
dados: conjunto de dados (e.g., dataframe Pandas)
x = nome da coluna que possui o eixo X
y = nome da coluna que possui o eixo Y
53
Para começar
Considere o arquivo [Link]
Nome;Prova1;Prova2;Período;Escola
Aluno 0;100;100;Manhã;Escola 1
Aluno 1;93;92;Manhã;Escola 1
Aluno 2;93;100;Manhã;Escola 1
Aluno 6;100;95;Manhã;Escola 1
…
54
Dispersão
Vamos exibir em um gráfico de dispersão a relação entre a
nota na primeira com a segunda prova para os alunos.
55
Exemplo
import pandas as pd
import seaborn as sns
import [Link] as plt
notas_df = pd.read_csv("[Link]",delimiter=';')
[Link](data=notas_df, x="Prova1", y="Prova2")
[Link]()
56
Tema
O Seaborn possui vários temas padrão para estilizar o gráfico
Use a função sns.set_theme()
Você pode chamar a função sem parâmetros (vai aplicar o
estilo padrão), ou modificar paletas, fontes, estilos, …
Veja a documentação aqui
[Link]/generated/seaborn.set_theme.html
57
Exemplo
import pandas as pd
import seaborn as sns
import [Link] as plt
notas_df = pd.read_csv("[Link]",delimiter=';')
sns.set_theme(palette="icefire")
[Link](data=notas_df, x="Prova1", y="Prova2")
[Link]()
58
Adicionando informações
Vamos mudar a cor e o formato de cada ponto de acordo com
o período que o aluno estuda
[Link](..., hue=cor, style=estilo)
cor: coluna no datraframe que controla a cor
estilo = coluna no datraframe que controla o estilo
59
Exemplo
import pandas as pd
import seaborn as sns
import [Link] as plt
notas_df = pd.read_csv("[Link]",delimiter=';')
sns.set_theme(palette="icefire")
[Link](data=notas_df, x="Prova1", y="Prova2", hue="Período", style="Período")
[Link]()
60
Múltiplos Plots
A opção col indica uma coluna para separar a série em
múltiplos gráficos
Vamos criar um gráfico por escola
61
Exemplo
import pandas as pd
import seaborn as sns
import [Link] as plt
notas_df = pd.read_csv("[Link]",delimiter=';')
sns.set_theme(palette="icefire")
[Link](data=notas_df, x="Prova1", y="Prova2",
hue="Período", style="Período", col="Escola")
[Link]()
62
Size
O parâmetro size coloca os tamanhos dos marcadores de
acordo com determinada coluna
63
Exemplo
import pandas as pd
import seaborn as sns
import [Link] as plt
notas_df = pd.read_csv("[Link]",delimiter=';')
sns.set_theme(palette="icefire")
[Link](data=notas_df, x="Prova1", y="Prova2", hue="Período",
style="Período", col="Escola", size="Idade")
[Link]()
64
5.
Regressões com Seaborn
65
Regressões
O Seaborn possui funções prontas para automaticamente criar
regressões e mostrá-las em gráficos
66
regplot
A função regplot por padrão cria uma regressão linear com os
dados.
[Link](data=Dados, x=colX, y=colY)
Dados: conjunto de dados
colX: coluna que contém o eixo X
colY: coluna que contém o eixo Y
67
Exemplo
Vamos considerar os dados do valor diário das ações da
Petrobrás entre 01/2021 e 03/2022.
Uma regressão linear vai mostrar se o valor da ação está com
tendência de alta ou baixa nesse período
68
Exemplo
import pandas as pd
import seaborn as sns
import [Link] as plt
petro_df = pd.read_csv("[Link]",delimiter=',', usecols=["Adj Close"])
petro_df.insert(0, "Index", range(0, len(petro_df)))
[Link](data=petro_df, x="Index", y="Adj Close");
[Link]()
69
Misturando Tudo
O Seaborn utiliza o Matplotlib
Podemos modificar os gráficos gerados pelo Seaborn
normalmente utilizando o que foi aprendido para o Matplotlib
70
Misturando Tudo
Vamos mostrar uma regressão apenas com os últimos 30 dias
da Petrobrás, e inserir o resto da série histórica diretamente
via comandos do Matplotlib
71
Misturando Tudo
import pandas as pd
import seaborn as sns
import [Link] as plt
petro_df = pd.read_csv("[Link]",delimiter=',', usecols=["Adj Close"])
petro_df.insert(0, "Index", range(0, len(petro_df)))
[Link](data=petro_df[len(petro_df)-30:len(petro_df)], x="Index", y="Adj
Close", scatter=False);
[Link](petro_df["Index"],petro_df["Adj Close"])
[Link]()
scatter=False para não mostrar o gráfico de dispersão
da regressão.
72
Ajustando polinômios
Ao inserir um inteiro N maior que 1 no parâmetro orderint,
o Seaborn fará um ajuste de um polinômio de grau N nos
dados através da função [Link]fit do Numpy
Veja a teoria sobre interpolação polinomial e ajuste de curvas
em [Link]/2021/10/29/numerical-analysis
73
Exemplo
import pandas as pd
import seaborn as sns
import [Link] as plt
petro_df = pd.read_csv("[Link]",delimiter=',', usecols=["Adj Close"])
petro_df.insert(0, "Index", range(0, len(petro_df)))
[Link](data=petro_df, x="Index", y="Adj Close", order=2)
[Link]()
74
Mais
Esses são apenas alguns exemplos sobre o que é possível fazer
com o Seaborn
Veja mais na documentação
Exemplos
Distribuições e histogramas
[Link]/tutorial/[Link]
Mapas de calor
[Link]/examples/spreadsheet_heatmap.html
75
6.
Teste seus conhecimentos
76
Teste seus conhecimentos
1. Replique tudo que foi ensinado durante as aulas no seu
computador para fixar os conhecimentos.
2. Reproduza os gráficos do tutorial do Seaborn - link na
página da disciplina.
77
Obrigado!
Bons Estudos!!!
78