Data Analytics Data Science Python

Introdução à Gramática dos Gráficos com plotnine

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ávelSignificado
mpgMilhas/Galões 
cylNº de Cilindros
dispDeslocamento
hpCavalos de força (horse power)
dratProporção do eixo traseiro
wtPeso
qsec¼ de Tempo de milha
vsMotor (0 = V-Shaped)
amTransmissão (0 = Automática)
gearNº de engrenagens
carbNº 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

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.

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. 

Gostou? Compartilhe!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *