Fala galera, tudo tranquilo? Sentiram minha falta? O Dados ao Cubo tem novidades pra vocês, espero que curtam nosso novo conteúdo. Então, hoje o tema é a gramática dos gráficos. Para quem usa matplotlib, seaborn, plotly ou bokeh vai ver que é uma abordagem bem diferente, mas quem tem intimidade R e utilizou o ggplot2 já vai estar familiarizado com a sintaxe. Simbora!
Origem da gramática dos gráficos
A Gramática dos Gráficos foi introduzida no livro de Leland Wilkinson The Grammar of Graphics, de 1999. Ela apresenta uma abordagem diferente para plotagem de gráficos, utilizando propriedades explícitas e bem definidas.
Em 2005, Hadley Wickham criou o pacote ggplot2 para R (pacote de visualização de dados para a linguagem de programação R) e, em 2010 lançou o artigo A layered grammar of graphics onde descreve algumas atualizações para a Gramática. Nesse artigo vamos apresentar a vocês os principais conceitos e implementação com a biblioteca plotnine.
Plotnine é uma biblioteca Python inspirada no ggplot2 que implementa a gramática dos gráficos de maneira bem similar ao ggplot2. A partir do tópico 2 vou apresentar a sintaxe dela pra vocês. Primeiramente vamos entender alguns conceitos.
Principais componentes da gramática dos gráficos
A gramática dos gráficos é baseada em 7 aspectos dos gráficos, descritos abaixo:
- Dados: São as informações que você quer plotar para transformar em conhecimento. São a primeira informação que você precisa ter e a primordial, pois sem dados não existem os gráficos rs.
- Estética: A estética é a forma que você vai apresentar esses dados, e são muito importantes para atingir o seu público. Eixos (x, y, z…), tamanho, forma (quadrados, X, circulos…), cor…
- Escala: Os dados podem ser representados todos na mesma escala (entre 0 e 1 por exemplo) ou, caso representados em escalas diferentes, podem causar distorções nas informações (por exemplo, o preço de um imóvel variando de 10.000 a 100.000 em um eixo e a metragem quadrada variando de 40m² a 1.000m² em outro eixo).
- Geometria: Os objetos geométricos podem ser: pontos (scatter), barras, linhas, pizza, donuts, boxplots … São uma decisão muito importante pois por exemplo gráficos de boxplot (figura abaixo) geralmente são indicados para um público mais técnico, e gráficos de pizza não são muito indicados em casos de valores muito próximos.
- Estatística: As medidas estatísticas demonstradas graficamentes são mais fáceis de analisar do que apenas os valores numéricos em uma tabela, por exemplo. São exemplos: Medidas de tendência central, espalhamento, intervalos de confiança…
- Facetas: Facetas representam uma ou mais dimensões extras através da criação de subplots. Cada subplot representa um valor categórico (por exemplo Sexo Masculino em um subplot e Feminino em outro, representando o Gênero).
- Coordenadas: Talvez a informação menos declarada nesse tipo de sistema, representa se os dados estão em sistema cartesiano, polar…
Representações Gráficas
Nessa seção vamos apresentar as formas de representações, utilizando os conceitos dos componentes da gramática dos gráficos, como criar várias dimensões de dados utilizando esses componentes.
Sendo assim, em todos os exemplos vamos utilizar a função theme_bw para especificar que queremos que o fundo da imagem seja em preto (b – black) e branco (w – white).
from plotnine import * from plotnine.data import mtcars
Primeiro, com o código acima, vamos importar a biblioteca plotnine e o dataset que utilizaremos, no caso o dataset de exemplo que já vem na biblioteca, o mtcars, que trás informações de carros.
O dicionário de dados do dataset é o seguinte, em tradução livre:
Variável | Significado |
mpg | Milhas/Galões |
cyl | Nº de Cilindros |
disp | Deslocamento |
hp | Cavalos de força (horse power) |
drat | Proporção do eixo traseiro |
wt | Peso |
qsec | ¼ de Tempo de milha |
vs | Motor (0 = V-Shaped) |
am | Transmissão (0 = Automática) |
gear | Nº de engrenagens |
carb | Nº de Carburadores |
Representando duas dimensões (2-D)
No nosso primeiro exemplo, vamos utilizar a Estética (aes) e Geometria para representar um gráfico em duas dimensões, passando os eixos X (variável ‘wt’) e Y (variável ‘mpg’) e o geom_point para representar esses gráficos utilizando pontos (scatter plot).
(ggplot(mtcars, aes('wt', 'mpg')) + geom_point() + theme_bw())
Representando três dimensões (3-D)
Nesse exemplo vamos adicionar a variável gear (que tem os valores 3, 4 e 5) representada no aes pela cor, gerando um gráfico que representa 3 dimensões (wt, mpg e gear).
(ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)')) + geom_point() + theme_bw())
Representando quatro dimensões (4-D)
Adicionando a variável cyl como o tamanho de cada bolinha, conseguimos representar quatro dimensões no gráfico.
(ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)', size='cyl')) + geom_point() + theme_bw())
Outra maneira de representar quatro dimensões (4-D)
Nesse exemplo, passamos a variável cyl para uma Faceta ao invés da Estética (aes) tamanho (size). É outra maneira de representar quatro dimensões em um gráfico.
(ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)')) + geom_point() + facet_wrap('~cyl') + theme_bw())
Estatísticas
Até agora, utilizamos Estética (aes), Geometria (geom) e Facetas (facet). Vamos agora acrescentar estatística com o método stat, aplicando uma regressão linear (‘lm’) ao gráfico. Note que o método stat_smooth já adiciona um intervalo de confiança de 95% aos dados.
(ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)')) + geom_point() + stat_smooth(method='lm') + theme_bw())
Representando cinco dimensões (5-D)
Então, retornaremos a variável cyl pro tamanho da bolinha e setar uma Faceta para a variável am, criando um gráfico em cinco dimensões.
(ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)', size='cyl')) + geom_point() + facet_wrap('~am') + theme_bw())
Representando seis dimensões (6-D)
Por fim, vamos representar seis dimensões! Assim, criando uma faceta com duas dimensões, uma pra variável am e outra para a variável carb.
(ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)', size='cyl')) + geom_point() + facet_grid('am ~ carb') + theme_bw())
Gramática dos Gráficos ao Cubo
A gramática dos gráficos é uma forma muito interessante de apresentar informações de forma gráfica. Existem outros pacotes em Python que implementam a Gramática dos gráficos, como ggplot ou altair. Além disso existe o famoso ggplot2 para R.
De acordo com o gráfico animado abaixo, incorporando uma variável temporal como mais uma dimensão. Espero que tenham gostado! Abraços e até a próxima!
Referências sobre Gramática dos Gráficos
- A Grammar of Graphics for Python — plotnine 0.7.1 documentation
- Plotnine: Grammar of Graphics for Python • Blog • Data Science Workshops
- Making Plots With plotnine – Data Analysis and Visualization in Python for Ecologists
- Livro: The Grammar of Graphics
Conteúdos ao Cubo
Por fim, deixo algumas sugestões de conteúdos que você pode encontrar no Dados ao Cubo, sempre falando sobre o mundo dos dados.
- Análise de Dados para Detecção de Fraude
- Métodos de Classificação para Classes Desbalanceadas
- Análise de Dados: Detecção de Fraude de Cartão de Crédito
- Compreendendo Agile BI – Parte I
- Agile BI na Prática – Parte II
- Funções em Python
- Análise de Dados com Seaborn Python
- Deploy do Metabase com Docker
Então, finalizo com um convite para você ser Parceiro de Publicação Dados ao Cubo e escrever o próximo artigo, compartilhando conhecimento para toda a comunidade de dados. Não esqueça de assinar a nossa Newsletter para ficar por dentro de todas as novidades.
Programador e cozinheiro. Formado pela Universidade Federal do Piauí e com um mestrado (interrompido) pela UFRGS. Com uma grande sede de conhecimento, está sempre se perguntando os porquês e tentando dar o melhor naquilo que faz. Desde pequeno diz que vai ser cientista, seja da computação, de dados ou na cozinha. O conhecimento é a única esperança.
“Um homem não é outra coisa senão o que faz de si mesmo.” Sartre