-
Objetivos dos gráficos em análise de dados:
- Entender as propriedades dos dados
- Encontrar padrões nos dados
- Sugerir estratégias de modelagem
- Analisar “bugs”
- Comunicar resultados
Análise Exploratória de Dados (EDA)
- Os gráficos para análise exploratória abrangem os 4 primeiros objetivos, ou seja, não são para comunicar um resultado final do seu trabalho.
- Características:
- Feitas rapidamente e em grande quantidade
- O objetivo é o entendimento dos dados
- Eixos/legendas normalmente são retiradas
- Cores/tamanhos são primariamente usadas para informação
- Principais gráficos:
- Diagrama de caixa (Boxplot)
- Histogramas
- Gráfico de barra (Barplot)
- Gráfico de dispersão (Scatterplot)
Como exemplo, usaremos dados da Agência de Proteção Ambiental dos EUA (EPA), avgpm25.csv, que informa a quantidade de poluição por partícula fina (PM2.5). A média anual de PM2.5 que não pode exceder 12 $\mu g/m^3$.
pollution = read.csv("https://fhnishida.netlify.app/project/rec5004/avgpm25.csv")
summary(pollution)
## pm25 fips region longitude
## Min. : 3.383 Min. : 1003 Length:576 Min. :-158.04
## 1st Qu.: 8.549 1st Qu.:16038 Class :character 1st Qu.: -97.38
## Median :10.047 Median :28034 Mode :character Median : -87.37
## Mean : 9.836 Mean :28431 Mean : -91.65
## 3rd Qu.:11.356 3rd Qu.:41045 3rd Qu.: -80.72
## Max. :18.441 Max. :56039 Max. : -68.26
## latitude
## Min. :19.68
## 1st Qu.:35.30
## Median :39.09
## Mean :38.56
## 3rd Qu.:41.75
## Max. :64.82
Diagrama de caixa (Boxplot)
- Apresenta mínimo, máximo, os quartis e outliers.
boxplot(pollution$pm25, col="blue")
abline(h=12, col="red") # Linha horizontal no valor 12
- Para múltiplos boxplots, usamos `boxplot(pollution$pm25 ~ pollution$region, col="blue")
abline(h=12, col="red") # Linha horizontal no valor 12
Histograma
hist(pollution$pm25, col="green")
hist(pollution$pm25, col="green", breaks=100) # 100 quebras
rug(pollution$pm25) # Traços dos valores da amostra abaixo do histograma
abline(v=12, col="red") # Linha vertical no valor 12
- Podemos colocar mais de um gráfico numa figura usando a função `par(mfrow, mar)`:
par(mfrow=c(2, 1), mar=c(4, 4, 2, 1)) # Criando figura com 2 linhas e 1 coluna + margens
pol_west = pollution[pollution$region == "west",]
pol_east = pollution[pollution$region == "east",]
hist(pol_west$pm25, col="green")
hist(pol_east$pm25, col="green")
- Note que você precisa usar
par(mfrow=c(1, 1))para voltar a incluir apenas 1 gráfico na figura.
Gráfico de barra (Barplot)
barplot(table(pollution$region), col="wheat",
main="Nº de países em cada região")
Gráfico de dispersão (Scatterplot)
- Gera gráficos sob 2 dimensões
plot(pollution$latitude, pollution$pm25)
abline(h=12, lwd=1.5, lty=2, col="red")
abline(lm(pm25 ~ latitude, data=pollution), col="blue")
par(mfrow=c(1, 2), mar=c(4, 4, 2, 1)) # Criando figura com 1 linha e 2 colunas + margens
plot(pol_west$latitude, pol_west$pm25, main="West")
plot(pol_east$latitude, pol_east$pm25, main="East")
- Também é possível adicionar objetos gráficos e textos no gráfico gerado por
plot():abline(): adiciona linhas horizontal, vertical ou de regressãopoints(): adiciona pontos ao gráficolines(): adiciona linhas ao gráficotext(): adiciona texto ao gráficotitle(): adiciona anotações aos eixos, título, subtítulo e margem exteriormtext(): adiciona texto às margens (interna e externa) do gráficoaxis(): adiciona traços/rótulos aos eixos
par(mfrow=c(1, 1)) # Retornando ao padrão
air_may = airquality[airquality$Month==5,]
air_other = airquality[airquality$Month!=5,]
plot(airquality$Wind, airquality$Ozone, main="Ozone and Wind in NYC")
points(air_may$Wind, air_may$Ozone, col="blue")
points(air_other$Wind, air_other$Ozone, col="red")
legend("topright", pch=1, col=c("blue", "red"),
legend=c("May", "Other Months"))
Alguns parâmetros gráficos importantes:
pch: símbolo dos pontos gráficos (padrão é círculo)lty: tipo da linha (padrão é linha sólida, mais pode ser pontilhado, etc.)lwd: grossura da linha (integer)col: cor, especificada como número, texto ou código hex (funçãocolors()dá um vetor de cores por nome)xlab: rótulo do eixo xylab: rótulo do eixo ypar(): função que especifica parâmetros globais que afetam todas figuras:las: orientação dos rótulosbg: cor de fundomar: tamanho da margemoma: tamanho da margem externa (padrão é 0)mfrow: número de gráficos por linhamfcol: número de gráficos por coluna
Grammar of Graphics (ggplot2)
-
Componentes básicos do
ggplot2:- um data frame
- estética (aesthetics): como os dados são mapeados (tamanho, forma, cor)
- objetos geométricos (geoms): pontos, linhas, formas
- facets: para gráficos condicionais
-
Ao invés de criar um gráfico diretamente, os gráficos do
ggplot2são construídos em camadas (layers)
- Data Frame
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
- Base do Gráfico (
ggplot())- dados que serão incluídos no gráfico
- toda vez que for incluir uma variável, é necessário precisa usar a função
aes()sobre elas
library(ggplot2)
g = ggplot(data=mtcars, aes(mpg, wt)) # Criando a base do gráfico
g
- Layer geomético (
geom)- incluindos formas, linhas e pontos
- caso não sejam informadas novas variáveis, a função para criar um objeto geométrico irá usar as variáveis-base definidas na função
ggplot()inicial - Junta-se a base do gráfico com outras layers usando o sinal
+
g + geom_point()
- Layer de suavização/tendência (
smooth)
g + geom_point() + geom_smooth(method="lm") # suavização a partir de OLS
## `geom_smooth()` using formula = 'y ~ x'
- Layers condicionais (facets)
g + geom_point() + geom_smooth(method="lm") + facet_grid(. ~ cyl) # agrupando por nº cilindros horizontalmente
## `geom_smooth()` using formula = 'y ~ x'
g + geom_point() + geom_smooth(method="lm") + facet_grid(cyl ~ .) # agrupando por nº cilindros verticalmente
## `geom_smooth()` using formula = 'y ~ x'
- Anotações
- Rótulos:
xlab(),ylab(),labs(),ggtitle() - Cada geom tem opções para modificar, mas use
theme()para opções globais do gráfico. Use?themee veja a quantidade de configurações você pode fazer no seu gráfico. - Se quiser temas pré-definidos, há 2 templates padrão
theme_gray()etheme_bw()(preto/branco). Também é possível usar outros usando o pacoteggthemes.
- Rótulos:
g + geom_point() + ggthemes::theme_economist() +
ylab("Peso (libras)") + xlab("Milhas por galão") +
ggtitle("Milhas por galão X Peso do carro")
- Modificando Estética
- Dentro de cada geom, podemos definir a cor (
color), o tamanho (size) e a transparência (alpha)
- Dentro de cada geom, podemos definir a cor (
g + geom_point(color="steelblue", size=9, alpha=0.4)
g + geom_point(aes(color=cyl), size=9, alpha=0.4) # colorindo por variável - precisa usar aes()