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.
PreparaƧao de Dados: PorquĆŖ preciso dos meus dados Tidy?
IntroduĆ§Ć£o ao ggplot: Geoms and Aesthetics
AcessĆ”rios dos grĆ”ficos: labels, escalas, tĆtulos, e outros.
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:
Etapa dos Dados: Define qual banco de dados vocĆŖ pretende visualizar
Etapa de Mapear: Define quais variĆ”veis -> representaƧƵes grĆ”ficas vocĆŖ pretende visualizar.
Etapa de Geom: Define como vocĆŖ pretende visualizar.
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:
gapminder %>%
g_grouped <- 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 (x
e 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
gapminder %>%
gap_grouped <- 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
gapminder %>%
gap_grouped <- 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?