Tutorial 8: VisualizaĆ§Ć£o de Dados com ggplot I

IntroduĆ§Ć£o: VisualizaĆ§Ć£o de Dados com ggplot.

Nas semanas anteriores, cobrimos trĆŖs tarefas fundamentais em R. ComeƧamos com uma introduĆ§Ć£o bĆ”sica ao R. Demos nosso segundo passo aprendendo a usar os pacotes do tidyverse. Neste ambiente, aprendemos a usar o dplyr para manipulaĆ§Ć£o de dados, e conectar dados relacionais, e o tidyr para organizar nossos bancos de dados.

Este semana vamos um passo adiante em nossa aprendizado. Aprenderemos sobre como utilizar o R para visualizar seus dados. Para isto, utilizaremos a pacote ggplot, que tambƩm faz parte do tidyverse.

Este tutorial Ć© inspirado no excelente livro Data Visualization:A practical introduction de Kieran Healy.

Porque investir em boas visualizaƧƵes ?

Enquanto acadĆŖmicos, uma das habilidades mais importantes que vocĆŖ precisa adquirir Ć© a capacidade de comunicar de forma efetiva seus resultados, sejam esses simples dados exploratĆ³rios, atĆ© modelos estatĆ­sticos rebuscados. A meu ver, mma visualizaĆ§Ć£o efetiva e bem pensada Ć© sempre mais atraente do que uma tabela. O pĆŗblico em geral, incluindo nossos colegas acadĆŖmicos, nĆ£o saberĆ£o onde olhar e como analisar uma tabela cheia de nĆŗmeros, enquanto um bom grĆ”fico pode ser bastante intuitivo de seguir.

Nosso itinerƔrio.

Para aprendar sobre visualizaĆ§Ć£o de dados, vamos percorrer os seguintes passos.

  1. PreparaƧao de Dados: PorquĆŖ preciso dos meus dados Tidy?

  2. IntroduĆ§Ć£o ao ggplot: Geoms and Aesthetics

  3. AcessƔrios dos grƔficos: labels, escalas, tƭtulos, e outros.

  4. Casos Aplicados: reproduzindo grĆ”ficos de artigos acadĆŖmicos.

PreparaĆ§Ć£o dos Dados: PorquĆŖ preciso dos meus dados Tidy?

Ter seus dados em formato tidy Ć© fundamental para o uso do ggplot. 80% do trabalho de visualizaĆ§Ć£o de dados estĆ” em preparar seus dados, os outros 20% Ć© pensar quais dados utilizar e como botar em cĆ³digo.

NĆ³s aprendemos semana passsada, porĆ©m a guisa de revisĆ£o. As trĆŖs propriedades mais importantes que definem um banco de dados tidy sĆ£o:

  • Cada coluna Ć© uma variĆ”vel.

  • Cada linha Ć© uma observaĆ§Ć£o.

  • Cada valor em uma linha.

Vamos ver estas regras visualmente:

E porque Ć© importante ter nossos dados em formato tidy quando pensamos em visualizaĆ§Ć£o? O ggplot funciona conectando colunas com visuais. E para fazer isto, precisamos de que cada coluna seja uma variĆ”vel ā€“ exatament como dados tidy sĆ£o organizados.

Introducao ao ggplot.

VisualizaĆ§Ć£o de dados envolve conectar (mapear) variĆ”veis em seu banco de dados a representaƧƵes grĆ”ficas. O ggplot fornece uma linguagem unificada para este processo de variĆ”veis -> grĆ”fico. HĆ” outras formas e outros pacotes de visualizaĆ§Ć£o em R. O ggplot Ć© uma destas linguagens.

Grammar of Graphics.

O ggplot Ʃ baseado na Grammar of Graphics. A grammar of graphics Ʃ uma linguagem desenvolvida para criar e descrever de forma unificada visualizaƧƵes grƔficas. Esta linaguem funciona com duas regras fundamentais:

  • Os grĆ”ficos sĆ£o construĆ­dos em camadas.

  • Cada variĆ”vel precisa ser mapeada a uma representaĆ§Ć£o grĆ”fica.

Segue abaixo uma visualizaĆ§Ć£o grĆ”fica da Grammar of Graphics.. Discutiremos ao longo destas aulas cada uma das camadas de funcionamento da Grammar of Graphics.

ggplot: intuiĆ§Ć£o.

O ggplot implementa o framework do Grammar of Graphics em R. Como esperado, Cada grƔfico Ʃ construƭdo camada por camada:

  • ComeƧando com seus dados,
  • Mapeamento Dados -> Visuais (aes),
  • DecisƵes geomĆ©tricas (geoms) e,
  • Embelezamento do grĆ”fico (scale, theme e labels).

E sua lĆ³gica fundamental funciona conectando variĆ”veis a representaƧƵes grĆ”ficas por meio de uma funĆ§Ć£o chamada aesthethics mapping (aes).

O grĆ”fico abaixo de Kieran Healy resume bem a lĆ³gica:

ggplot: na prƔtica.

Quatro ā€œgrandeā€ etapas definem nosso trabalho de visualizaĆ§Ć£o:

  1. Etapa dos Dados: Define qual banco de dados vocĆŖ pretende visualizar

  2. Etapa de Mapear: Define quais variĆ”veis -> representaƧƵes grĆ”ficas vocĆŖ pretende visualizar.

  3. Etapa de Geom: Define como vocĆŖ pretende visualizar.

  4. Etapa de Embelezamento: Labels, escalas, coordenados, temasā€¦.

Exemplo BƔsico.

Vamos ver um exemplo bƔsico de como funciona o ggplot utilizando o banco de dados gapminder.

Em abstrato

Com Dados.

library(tidyverse)
library(gapminder)

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      geom_point() # Etapa do Geom

Geoms: Como queremos visualizar nossos dados?

As geom_function controlam o tipo de grĆ”fico que pretendemos visualizar. Por exemplo, grĆ”ficos de dispersĆ£o, barras, mapas, linhas, boxplots, densidade, cada tipo de grĆ”fico representa uma geom_function() diferente. Vamos ver diversos exemplos a seguir.

Tipos de GrƔfico: Uma variƔvel.

Todos estes grĆ”ficos necessitam desomente uma variĆ”vel como input (no eixo x). Os valores do eixo y sĆ£o calculados diretamente pelo ggplot, de acordo com o grĆ”fico do seu interesse. Vamos ver alguns exemplos.

geom_density

Vamos gerar um grƔfico simples de densidade. Vamos plotar a densidade dos valores de expectativa de vida usando os dados do gapminder.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp)) + # mapear
      geom_density() # forma geomƩtrica

Customizar o grƔfico usando as representaƧƵes grƔficas fill e alpha.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp)) + # mapear
      geom_density(alpha=.5, fill="tomato2") # forma geomƩtrica

geom_histogram

Semelhante Ć  densidade, porĆ©m, com histograms, os valores do eixo x sĆ£o agrupados em intervalos (bins), e os valores do y sĆ£o a soma de casos nestes intervalos.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp)) + # mapear
      geom_histogram() # forma geomƩtrica

Mais algumas customizaƧƵes, utilizando as representaƧƵes grƔficas color e fill e ajudstando a largura dos intervalos em x.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp)) + # mapear
      geom_histogram(bins=50, color="black", 
                     fill="lightgreen") # forma geomƩtrica

geom_bar (variƔvel discreta)

geom_bar funciona da mesma forma que geom_hist, porĆ©m a variĆ”vel x Ć© categĆ³rica (discreta). Dessa forma, o y serĆ” a soma de observaƧƵes em cada grupo presente em x.

ggplot(data=gapminder,  # dados
        mapping=aes(x=continent)) + # mapear
      geom_bar() 

Perceba, o eixo y Ʃ a soma de cada continente. Internamente, o ggplot usa o group_by() + summarize() para somar as observaƧƵes em cada grupo. Isto Ʃ diferente de plotar dados jƔ agrupados. Para isto, precisamos alterar o input de geom_bar. Por exemplo:

g_grouped <- gapminder %>%
              count(continent)


ggplot(data=g_grouped,  # dados
       # adiciona o y
        mapping=aes(x=continent, y=n)) + # mapear
        # adiciona identity
        geom_bar(stat="identity")   

Tipos de GrƔfico: Contƭnua x Contƭnua.

geom_point

Quando trabalhamos com duas variĆ”veis contĆ­nuas, o uso de grĆ”fico de dispersĆ£o (com pontos) Ć© em geral a escolha mais intuitiva. Como esperado, este tipo de grĆ”fico necessita de no mĆ­nimo duas variĆ”veis (xe y), e ambas precisam ser contĆ­nuas. Vejamos um exemplo.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      geom_point() # Etapa do Geom

Vamos alterar outras representaƧƵes grƔficas: shape altera a formato dos pontos e size controla o tamanho dos pontos.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      geom_point(shape=22, alpha=.5, 
                 fill="tomato2", 
                 color="black", 
                 size=2) # Etapa do Geom

geom_smooth

O geom_smooth adiciona uma curva para descrever de forma intuitiva o padrĆ£o de associaĆ§Ć£o dos seus dados.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      geom_smooth(fill="steelblue", 
                 color="black", 
                 size=1, alpha=.3) # Etapa do Geom

MĆŗltiplos geoms.

O gŕafico acima Ć© pouco intuitivo sem a inclusĆ£o dos pontos em si. Lembre-se que o ggplot funciona em camadas, portanto, podemos facilmente combinar mĆŗltiplas formas geomĆ©tricas em um Ćŗnico grĆ”fico. Somente precisamos incluir todos os dados e variĆ”veis nas nossas representaƧƵes grĆ”ficas.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      
      # Pontos
      
    geom_point(shape=22, alpha=.2, 
                 fill="tomato2", 
                 color="black", 
                 size=2) + # Etapa do Geom

  
      # TendĆŖncia
    
      geom_smooth(fill="tomato2", 
                 color="black", 
                 size=1, alpha=.6) # Etapa do Geom

Tipos de GrƔfico: Discreta x Contƭnua.

geom_boxplot

O geom_boxplot combina variĆ”veis de tipo distintos. Utilizamos esta forma geomĆ©trica quando pretendemos apresentar um valor contĆ­nuo dividiso por outros valores categĆ³rico (grupos). O boxplot agrega esta variĆ”vel contĆ­nua e apresenta de forma intuitiva sua dispersĆ£o e medida central de cada grupo (mediana).

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=continent)) + # Etapa de Mapear
      
      # Pontos
      
    geom_boxplot(fill="tomato2", 
                 color="black", 
                 size=1.5, 
                 alpha=.5)  # Etapa do Geom

RepresentaƧƵes GrƔficas (aes)

AtĆ© aqui, usamos basicamente duas representaƧƵes grĆ”ficas dentro das nossa funĆ§Ć£o de mapear (aes): os eixos x e y. Intuitivamente, costumamos pensar nos eixos x e y como as Ćŗnicas variĆ”veis no banco de dados e consideramos outros elementos dos grĆ”ficos ā€“ cores, transparĆŖncia, formato ā€“ como acessĆ³rios.

Esta nĆ£o Ć© a forma como o ggplot funciona.

Todas as representaƧƵes grĆ”ficas ā€“ color, fill, shape, alpha, linetype, etcā€¦ ā€“ podem ser mapeadas a variĆ”veis do seu banco de dados. Este processo funciona adicionando mais elementos dentro da nossa funĆ§Ć£o de mapear (aes).

Quais RepresentaƧƵes grĆ”ficas (aes) estĆ£o disponĆ­veis?

As principais representaƧƵes grĆ”ficas sĆ£o as seis acima apresentadas.

Cada uma destas representaƧƵes combinarĆ” melhor com grĆ”ficos distintos, e com objetivos distintos da sua anĆ”lise. Todas as variĆ”veis que vocĆŖ pretende visualizar do seu banco de dados precisar ser mapeada em seu objeto do ggplot. Este mapeamento se dĆ” a partir da funĆ§Ć£o aes(). As suas representaƧƵes grĆ”ficas nĆ£o definem como vocĆŖ mostrarĆ” seus dados, mas somente o que vocĆŖ pretende mostrar e usando qual representaĆ§Ć£o grĆ”fica.

Vamos ver alguns exemplos de como mapear variƔveis -> representaƧƵes grƔficas.

Color: Para Colorir Dados Agrupados.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap, # Etapa de Mapear
           color=continent)) + # Com fill
      geom_point() # Etapa do Geom

Fill: Para Preencher Dados Agrupados.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp, fill=continent)) + # mapear
      geom_density(alpha=.5) # forma geomƩtrica

gap_grouped <- gapminder %>%
                group_by(year, continent) %>%
                summarise(m=mean(lifeExp, na.rm = TRUE))

ggplot(data=gap_grouped,  # dados
        mapping=aes(x=year, y=m, 
                    fill=continent)) + # mapear
      geom_bar(stat="identity", position="dodge") 

Alpha e size: Para mostrar variaĆ§Ć£o em valores.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa mapear 
      geom_point(aes(alpha=pop, 
           size=log(pop))) + # addicionar representaƧƵes grƔficas
      geom_smooth(color="red") + # Etapa do Geom
      scale_x_log10()

Shape

gap_grouped <- gapminder %>%
                group_by(year, continent) %>%
                summarise(m=mean(lifeExp, na.rm = TRUE))

ggplot(data=gap_grouped, ## Etapa dos Dados
       aes(y=m, x=year, 
           shape=continent)) + # Etapa mapear 
      geom_point(size=3) +
      geom_line()

Desafio:

Descreva o grƔfico abaixo usando o que aprendemos do ggplot e grammar of graphics.

  • Quantas VariĆ”veis?

  • Quantas RepresentaƧƵes GrĆ”ficas?

  • Quais Geoms?

  • Quais RepresentaƧƵes GrĆ”ficas?