Simples e Direto: um guia de visualização de dados com Python

Dalton Costa
Datapsico
Published in
8 min readOct 2, 2020

Esse texto é ideal para você que precisa saber como fazer um gráfico rápido e que represente o seu dado corretamente. Vamos criar diferentes tipos de gráficos para diferentes tipos de variáveis utilizando a linguagem Python e as biliotecas Pandas e Seaborn.

Se você prefere utilizar a linguagem R, aqui no PsicoData temos um artigo sobre visualização de dados utilizando a linguagem R.

Vamos utilizar nesse tutorial um banco de dados criado aqui no PsicoData sobre casos de suicido no Brasil de 2014 a 2018. A descrição do banco de dados e o seu processamento pode ser consultado nesse link.

O banco pode ser baixado por esse link.

import pandas as pd
banco = pd.read_csv("datasus_suicidio_2014_2018.csv", encoding='iso-8859-1')
banco.head()

Output:

Conhecendo Alguns Termos

Antes de seguirmos, vamos relembrar alguns termos importantes.

Variáveis

Quando coletamos informações, em geral, fazemos por amostragem. Essas informações vão muito além de números ou palavras, elas trazem consigo caracteristicas e contextos que serão fundamentais para nossas futuras análises.

Cada uma dessas características coletadas, como peso, altura, sexo ou idade, é chamada de variável.

As variáveis podem assumir diferentes valores, que basicamente podem ser separados em

  • Quantitativos ou numéricos
  • Qualitativos ou não numéricos, ou categóricos

Classificação das Variáveis

As variáveis quantitativas ou numéricas podem ser

  • Discretas: assumem apenas valores inteiros. Ex.: número de irmãos, número de passageiros.
  • Contínuas: assumem qualquer valor no intervalo dos números reais. Ex.: peso, altura.

As variáveis qualitativas ou categóricas podem ser

  • Nominais: quando as categorias não possuem uma ordem natural. Ex.: nomes, cores, sexo.
  • Ordinais: quando as categorias podem ser ordenadas. Ex.: tamanho (pequeno, médio, grande), classe social (baixa, média, alta), grau de instrução (básico, médio, graduação, pós-graduação).
Figura criada pelo autor.

Agora que relembramos os tipos de variáveis, vamos realizar a vizualiação do banco utilizando da visualização univariada e multivariada.

Visualização Univariada

A análise univariada objetiva analisar uma variável de cada vez. Quando analisamos uma variável de forma independente, geralmente estamos mais interessados na distribuição de seus valores e ignoramos outras variáveis do conjunto de dados.

Visualizando Variáveis Quantitativas

A maneira mais fácil visualizar uma variável quantitativa é por meio da sua distribuição utilizando um histograma. A forma mais simples de se fazer um histograma é o utilizando a biblioteca Pandas. Basta ao final da variável chamar a função ‘hist()’.

banco['idade'].hist()

Output:

Mas cuidado, a escala do histograma pode revelar informações que não são verdades. Para vermos com mais detalhes e nitidez a real distribuição dos nossos dados devemos aumentar o número de bins.

banco['idade'].hist(bins = 10)
banco['idade'].hist(bins = 50)
banco['idade'].hist(bins = 100)

Output:

A primeira figura é um instograma com 10 bins, a segunda contém 50 bins e a última 100 bins.

Há também outra maneira de entender a distribuição dos dados quantitativos, utilizandos gráficos de densidade. Eles podem ser considerados uma versão suavizada do histograma. Vamos constuir um gráfico de densidade para a mesma variável e utilizando a mesma biblioteca.

banco['idade'].plot(kind='density')

Output:

O eixo-y representa a probabilidade do valor do eixo-x ser observado

Também podemos fazer uma gráfico de densidade utilizando a biblioteca Seaborn. Utilizando a função ‘distplot()’ é possível criar um belo gráfico de densidade juntamente com a distribuição dos dados em formato de histograma.

import seaborn as sns
sns.distplot(banco['idade'])

Output:

Em alguns casos, uma simples visualização da distribuição ou da densidade não é suficiente para entendermos nossos dados quantitativos. Para isso podemos utilizar gráficos mais complexos como o boxplot e violinplot.

Antes de irmos para o código, vamos entender um pouco sobre como interpretar um boxplot. O boxplot ou diagrama de caixa é um tipo de gráfico que permite visualizar a distribuição e os outliers dos dados. Além disso, é possível visualizar medidas descritivas como o mínimo, máximo, primeiro quartil, segundo quartil ou a mediana e o terceiro quartil.

Imagem retirada do site operdata

Agora para criamos um boxplot podemos continuar utilizando a biblioteca Seaborn. Veja como é simples:

sns.boxplot(x='idade', data=banco)

Output:

Ah, o mínimo e o máximo do boxplot são geralmente calculados a partir de 1.5 deIntervalo Interquartil (o valor pintado de azul, no qual se encontram 50% dos dados).

Por fim, podemos representar nossos dados quantitativos por meio de um violinplot. Um tipo de gráfico que combina a densidade dos dados e o boxplot.

sns.violinplot(x='idade', data=banco)

Output:

Visualizando Variáveis Qualitativas

Agora vamos visualizar algumas variávei categóricas do nosso banco. A forma mais fácil de visualizar variáveis qualitativas é por meio do gráfico de barras e pizza. Mas antes, precisamos transformar nossa variável que contém apenas textos em números, por isso, primeiramente, vamos contar quantas vezes cada categoria se repete na variável que vamos trabalhar.

sexo = banco['SEXO'].value_counts()

Output:

Agora podemos plotar a variável sexo.

sexo.plot(kind='barh', color = ['red', 'blue'])

Output:

Podemos representar o mesmo gráfico, porém agora com um gráfico de pizza.

sexo.plot(kind='pie', autopct='%1.2f%%')

Output:

Lembrando que os gráficos de pizza são boas representações de 2–5 categóricas quando não se necessita comparar diretamente elas.

Variáveis de Tempo

Quando se tem variável do tipo datatime o melhor gráfico para observar a variação do tempo é o clássico gráfico de linhas. Criar um gráfico de linhas é muito fácil com a biblioteca Pandas, basta chamar a fução ‘plot()’, que tem como padrão o gráfico de linhas.

O primeiro passo é configurar a variável para o tipo datatime e em seguida podemos extrair informações de tempo. Veja no exemplo abaixo como converter uma extrair para tipo datetime, contar o número de casos por mês e ano e em seguida criar um gráfico de linha.

data = banco['DTOBITO'].groupby(pd.to_datetime(banco['DTOBITO'], infer_datetime_format=True).dt.to_period("M")).agg('count') data.plot()

Output:

Visualização Multivariada

A visualização multivariada nos extrair ver as relações entre duas ou mais variáveis em uma única figura. Assim como no caso de gráficos univariados, o tipo de gráfico escolhido dependerá dos tipos de variáveis que estarão sendo analisadas.

Variavel Quantitativa vs Variável Quantitativa

Utilizando duas variáveis quantitativas, podemos fazer uma correlação entre elas. Especialmente se temos muitas variáveis quantitivas pode ser difícil interpretar os dados, por isso, uma solução simples é criar um gráfico do tipo heatmap. Assim, podemos vizualizar a matriz de correlação com mais detalhes.

Como o nosso banco de dados tem apenas uma variável quantitativa interessante (variável idade), vamos criar algums variáveis quantitativas com valores aleatórios. Logo em seguida, vamos colocar isso tudo em um dicionário e transformar em um DataFrame, assim podemos criar nossa matrix de correlação.

import numpy as npnp.random.seed(1)varAletoria1 = banco['idade'] + np.random.randint(0, 50, 58634)
varAletoria2 = banco['idade'] + np.random.normal(0, 10, 58634)
varAletoria3 = banco['idade'] + np.random.randint(0, 10, 58634)
varAletoria4 = banco['idade'] + np.random.normal(0, 20, 58634)
dictQuant = {
'idade': banco['idade'].values,
'var1': varAletoria1,
'var2': varAletoria2,
'var3': varAletoria3,
'var4': varAletoria4
}
df = pd.DataFrame(data = dictQuant)
matrix = df.corr()

Output:

Vamos agora representar essa matriz em um gráfico heatmap utilizando a biblioteca Seaborn.

sns.heatmap(matrix, cmap="YlGnBu", annot=True, fmt='g')

Output:

Também podemos ver o comportamento de duas variáveis quantitativas por meio de um Scatterplot, um tipo de gráfico que mostra a associação e a disperção de pares de dados.

sns.scatterplot(data=df, x="idade", y="var2")

Output:

Variavel Quantitativa vs Variável Qualitativa

“Qual gráfico devemos utilizar quando temos um variável quantitativa e outra qualitativa? “

A resposta para essa pergunta é depende. Antes de pensar em qual gráfico utilizar pense em qual informação você quer enfatizar. Dependendo da sua resposta, determinado gráfico será mais adequado a informação que deseja comunicar.

Vamos ver a relação entre a variável ‘idade’ e ‘var2’ em relação a variável ‘sexo’. O código é o mesmo do anterior, porém passamos o hiperparametro ‘hue’.

sns.scatterplot(data=df, x="idade", y="var2", hue= banco['SEXO'])

Output:

Podemos fazer também um boxplot e um violinplot mediado pela divido por sexo:

_, axes = plt.subplots(1, 2, sharey=True, figsize=(10, 4)) sns.boxplot(x='idade', y='SEXO', data=banco, ax=axes[0])
sns.violinplot(x='idade', y='SEXO', data=banco, ax=axes[1])

Output:

Ou até mesmo um gráfico de densidade dividido pelo por uma variável categorica. Por exemplo, podemos visualizar a densidade da variável ‘idade’ em relação ao sexo.

banco.groupby('SEXO')['idade'].value_counts().unstack(0).plot.kde()

Output:

Variavel Qualitativa vs Variável Qualitativa

Por último, podemos criar gráficos combinando duas variáveis qualitativas. No primeiro exemplo, vamos criar, utilizando apenas a biblioteca Pandas, um gráfico de barras contendo a frequência do nível de escolaridade por sexo, veja só:

ordem = ['Nenhuma','1 a 3 anos','4 a 7 anos', '8 a 11 anos', '12 e mais'] banco.groupby('SEXO')['ESC'].value_counts().unstack(0).loc[ordem].plot.bar()

Output:

Se você precisa criar uma crosstab para analisar duas variáveis qualitativas pode ser confuso de analisar, especialemte se há muitas categorias. Para isso, você pode utilizar um gráfico de heatmap para t e auxiliar na interpretação dos dados. Perceba que dessa vez vamos usar cores diferentes.

ordem = ['Nenhuma','1 a 3 anos','4 a 7 anos', '8 a 11 anos', '12 e mais'] x=banco.groupby('RACACOR')'ESC'].value_counts().unstack(0).loc[ordem] sns.heatmap(x, cmap="viridis", annot=True, fmt='g')

Output:

Conclusão

Vimos como representar diferentes tipos de variáveis em um gráfico. A escolha de qual gráfico vamos utilizar depende exclusivamente do nosso objetivo e o que queremos enfatizar.

Esse texto não é livre de limitações. Podemos melhorar muito nossos gráficos e deixá-lo ainda mais bonito e complexo com inumeras configurações, recomendamos você olhar a documentação de cada biblioteca citada para deixar seu gráfico ao seu gosto. Além disso, não citamos outras bibliotecas interativas como Plotly e Bokeh, essas produzem gráficos lindos, no entanto, o código é mais complexo.

Espero que tenha gostado e qualquer dúvida, comentário ou observação é muito bem-vinda! Fique à vontade para se manifestar e vamos aprender juntos! Se preferir, você pode me contatar pelo dalton.bc96@gmail.com

Obrigado pela leitura!

--

--