R para Data Science · 2019-11-25 · RparaDataScience
Transcript of R para Data Science · 2019-11-25 · RparaDataScience
R para Data Science
Marina Muradian
22/11/2019
Survey - Qual ferramenta você mais usa?
Link: socrative.com
Classroom : MURADIAN331
Por que usar o R?
I Produção Acadêmica e Indústria
I "Limpeza" de dados (tidy data)
I Visualização de dados
I Análises estatísticas e organização de bases de dados
I Machine Learning
I Disponibilidade
https://www.newgenapps.com/blog/6-reasons-why-choose-r-programming-for-data-science-projects
R para Data Science
https://www.burtchworks.com/2019/08/21/2019-sas-r-or-python-survey-update-which-tool-do-data-scientists-analytics-pros-prefer/
R para Data Science
https://trends.google.com.br/trends/explore?date=all&q=R%20programming
R para Data Science
https://www.kaggle.com/sudhirnl7/data-science-survey-2018/output
R
I Criado nos anos 90, porRoss Ihaka e RobertGentleman
I Linguagem muito usada paracálculos estatísticos, análisee representação gráfica dedados
I Open source
I Altamente expansível com ouso das libraries
I RStudio
RStudio
Principais libraries
https://medium.com/activewizards-machine-learning-company/comparison-of-top-data-science-libraries-for-python-r-and-scala-infographic-574069949267
Estudo de Caso - Vacinas
I Polêmica:
https://www.thelancet.com/journals/lancet/article/PIIS0140-6736(97)11096-0/fulltext
I Alegação: ligação entre a vacina contra sarampo, caxumba erubéola (MMR) e o aparecimento de autismo e doença intestinal.
Estudo de Caso - Vacinas
I Apesar de muitas evidênciascientíficas contradizerem esseachado, os relatóriossensacionalistas da mídia eteorias da conspiraçãolevaram algumas pessoas aacreditar que as vacinaseram prejudiciais
I Como resultado, muitos paisdeixaram de vacinar seusfilhos, fazendo com quedoenças que praticamentedesapareceram ao longo dosanos, voltassem a aparecer
Estudo de Caso - Vacinas
I O artigo de 1988 foi retirado e Andrew Wakefield foi "eliminadodo registro médico do Reino Unido, com uma declaraçãoidentificando falsificação deliberada na pesquisa publicada noThe Lancet, e, portanto, foi impedido de praticar medicina noReino Unido"
I No entanto, persistem conceitos errôneos, em parte devido aativistas autoproclamados que continuam a disseminarinformações erradas sobre vacinas.
I A comunicação eficaz dos dados é um forte antídoto para adesinformação e a difusão de fake news.
Estudo de Caso - Vacinas
http://graphics.wsj.com/infectious-diseases-and-vaccines/
Estudo de Caso - Vacinas
I Os dados utilizados para esses gráficos foram coletados,organizados e distribuídos pelo Tycho Project
I Dados: us_contagious_diseases, disponíveis no pacote dslabs
library(dslabs)data("us_contagious_diseases")head(us_contagious_diseases)
## disease state year weeks_reporting count population## 1 Hepatitis A Alabama 1966 50 321 3345787## 2 Hepatitis A Alabama 1967 49 291 3364130## 3 Hepatitis A Alabama 1968 52 314 3386068## 4 Hepatitis A Alabama 1969 49 380 3412450## 5 Hepatitis A Alabama 1970 51 413 3444165## 6 Hepatitis A Alabama 1971 51 378 3481798
Estudo de Caso - Vacinas
I Nosso objetivo é replicar os gráficos do artigo do WSJ e mostrarque as vacinas, de fato, diminuem a ocorrência de doenças.
I Utilizando ferramentas do pacote tidyverse, vamos manipular abase de dados para atingir nosso objetivo
I Para começar, vamos trabalhar com os casos deSarampo(Measles)
Preparando os dados com dplyr - filter()
data <- us_contagious_diseases %>%filter(!state%in%c("Hawaii","Alaska") &
disease == "Measles")head(data)
## disease state year weeks_reporting count population## 1 Measles Alabama 1928 52 8843 2589923## 2 Measles Alabama 1929 49 2959 2619131## 3 Measles Alabama 1930 52 4156 2646248## 4 Measles Alabama 1931 49 8934 2670818## 5 Measles Alabama 1932 41 270 2693027## 6 Measles Alabama 1933 51 1735 2713243
I qual o problema em usar a variável count para comparar o casosde Sarampo por estado?
Criando variáveis com dplyr - mutate()
data <- data %>%mutate(rate = count / population * 10000 * 52/weeks_reporting)
head(data)
## disease state year weeks_reporting count population rate## 1 Measles Alabama 1928 52 8843 2589923 34.143872## 2 Measles Alabama 1929 49 2959 2619131 11.989333## 3 Measles Alabama 1930 52 4156 2646248 15.705255## 4 Measles Alabama 1931 49 8934 2670818 35.498411## 5 Measles Alabama 1932 41 270 2693027 1.271577## 6 Measles Alabama 1933 51 1735 2713243 6.519945
Por que usar o ggplot2?
I Grammar of Graphics - o "gg" do ggplot2:I analogia à gramática de uma língua: formação de frases a partir
de alguns verbos, substantivos e adjetivos-chaveI conhecimento das layers do ggplot2 e sua gramática permite a
criação de diversos gráficosI diminui a necessidade de memorização
I Layers: sintaxe intuitiva e relativamente simples de lembrar
I Abrangência: o default do ggplot2 satisfaz a grande maioriados casos e é visualmente interessante.
I tidy data
Estrutura do ggplot2
I data: conjunto de dados a ser visualizado no gráfico
I geometry: tipo de gráfico (scatterplot, boxplot, barplot,histogram, qqplot, smooth density, etc.)
I aesthetics: aspectos visuais (visual cues) de mapeamento devariáveis, como eixos x e y e cores.
https://rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf
Gráficos com ggplot2 - California
Início da vacinação (1963)
0
50
100
1940 1960 1980 2000Anos
Cas
os d
e S
aram
po/1
0.00
0
California
Criando um objeto ggplot - Californiadata %>% filter(state == "California" &
!is.na(rate)) %>% ggplot()
Criando um objeto ggplot
No ggplot2, os gráficos são construídos por camadas (layers).
De modo geral:
DATA % > % ggplot() + LAYER 1 + ... + LAYER N
I A primeira layer usualmente se refere à geometry
Gráficos com ggplot2 - Californiap <- data %>% filter(state == "California" & !is.na(rate)) %>%
ggplot(aes(year, rate)) +geom_line() +ylab("Casos de Sarampo/10.000") + xlab("Anos") + ggtitle ("California")
p
0
50
100
1940 1960 1980 2000Anos
Cas
os d
e S
aram
po/1
0.00
0
California
Gráficos com ggplot2 - California
p <- p + geom_vline(xintercept=1963, col = "red")p
0
50
100
1940 1960 1980 2000Anos
Cas
os d
e S
aram
po/1
0.00
0
California
Gráficos com ggplot2 - Californiap + annotate(geom = "text",
label = "Início da vacinação (1963)",x = 1985,y = 100,col = "red")
Início da vacinação (1963)
0
50
100
1940 1960 1980 2000Anos
Cas
os d
e S
aram
po/1
0.00
0
California
Uma visão geral
Média dos EUA
5
25
125
300
1940 1960 1980 2000
Cases de sarampo/10,000 por estado
Resumindo dados com summarize()I Se quisermos calcular a média da taxa de Sarampo nos EUA para
cada ano podemos usar os comandos group_by() esummarize()
avg <- us_contagious_diseases %>%filter(disease=="Measles") %>% group_by(year) %>%summarize(us_rate = sum(count, na.rm = TRUE) /sum(population, na.rm = TRUE) * 10000)
head(avg)
## # A tibble: 6 x 2## year us_rate## <dbl> <dbl>## 1 1928 40.4## 2 1929 27.9## 3 1930 31.3## 4 1931 35.4## 5 1932 31.2## 6 1933 30.2
Uso de layersg <- data %>% filter(!is.na(rate)) %>%
ggplot() +geom_line(mapping = aes(year, rate, group = state),color = "grey50",show.legend = FALSE,alpha = 0.2,size = 1) +scale_y_continuous(trans = "sqrt",breaks = c(5, 25, 125, 300))
g
5
25
125
300
1940 1960 1980 2000year
rate
Uso de layersg <- g + geom_line(mapping = aes(year, us_rate),
data = avg,size = 1)
g
5
25
125
300
1940 1960 1980 2000year
rate
Uso de layers
g <- g + geom_vline(xintercept=1963,col = "red")g
5
25
125
300
1940 1960 1980 2000year
rate
Uso de layersg<- g + ggtitle("Cases de sarampo/10,000 por estado") +
xlab("") + ylab("") +annotate(geom = "text",
label = "Média dos EUA", x = 1955, y = 50)g
Média dos EUA
5
25
125
300
1940 1960 1980 2000
Cases de sarampo/10,000 por estado
Uso de layers
Média dos EUA
5
25
125
300
1940 1960 1980 2000
Cases de sarampo/10,000 por estado
Gráfico animado
library(gganimate)
g + transition_reveal(year)
Reproduzindo o gráfico do WSJ - Sarampo
Objetivo: visualizar os dados de todos os estados num só gráfico (heatmap):
I data: data
I geometry: geom_tile() (heat map)
I aesthetics:I Eixo x: yearI Eixo y: stateI Cor: rate
Reproduzindo o gráfico do WSJ - Sarampo
AlabamaArizona
ArkansasCaliforniaColorado
ConnecticutDelaware
District Of ColumbiaFlorida
GeorgiaIdahoIllinois
IndianaIowa
KansasKentuckyLouisiana
MaineMaryland
MassachusettsMichigan
MinnesotaMississippi
MissouriMontana
NebraskaNevada
New HampshireNew JerseyNew Mexico
New YorkNorth Carolina
North DakotaOhio
OklahomaOregon
PennsylvaniaRhode Island
South CarolinaSouth Dakota
TennesseeTexasUtah
VermontVirginia
WashingtonWest Virginia
WisconsinWyoming
1940 1960 1980 2000
0
100
200
rate
Sarampo
Atualizando os dados
data1 <- us_contagious_diseases %>%filter(!state%in%c("Hawaii","Alaska") &
disease == "Measles") %>%mutate(rate = count / population * 10000)
head(data1)
## disease state year weeks_reporting count population rate## 1 Measles Alabama 1928 52 8843 2589923 34.143872## 2 Measles Alabama 1929 49 2959 2619131 11.297640## 3 Measles Alabama 1930 52 4156 2646248 15.705255## 4 Measles Alabama 1931 49 8934 2670818 33.450426## 5 Measles Alabama 1932 41 270 2693027 1.002589## 6 Measles Alabama 1933 51 1735 2713243 6.394562
Reproduzindo o gráfico do WSJ - Sarampo
h <- data1 %>% ggplot(aes(year, state, fill = rate)) +geom_tile(color = "grey50") +scale_x_continuous(expand=c(0,0)) +scale_fill_gradientn(colors = brewer.pal(9, "Reds"),
trans = "sqrt") +theme_minimal() +theme(panel.grid = element_blank()) +ggtitle("Sarampo") +ylab("") +xlab("")
h
Reproduzindo o gráfico do WSJ - Sarampo
AlabamaArizona
ArkansasCaliforniaColorado
ConnecticutDelaware
District Of ColumbiaFlorida
GeorgiaIdahoIllinois
IndianaIowa
KansasKentuckyLouisiana
MaineMaryland
MassachusettsMichigan
MinnesotaMississippi
MissouriMontana
NebraskaNevada
New HampshireNew JerseyNew Mexico
New YorkNorth Carolina
North DakotaOhio
OklahomaOregon
PennsylvaniaRhode Island
South CarolinaSouth Dakota
TennesseeTexasUtah
VermontVirginia
WashingtonWest Virginia
WisconsinWyoming
1940 1960 1980 2000
0
100
200
rate
Sarampo
Reproduzindo o gráfico do WSJ - Sarampo
I Podemos ordenar os estados com base nos valores de rate:
data1 <- data1 %>% mutate(state = reorder(state, rate))
data1 %>% ggplot(aes(year, state, fill = rate)) +geom_tile(color = "grey50") +scale_x_continuous(expand=c(0,0)) +scale_fill_gradientn(colors = brewer.pal(9, "Reds"),
trans = 'sqrt') +theme_minimal() +theme(panel.grid = element_blank()) +ggtitle("Sarampo") +ylab("") +xlab("")
Reproduzindo o gráfico do WSJ - Sarampo
MississippiLouisiana
GeorgiaOklahoma
MissouriNevadaFlorida
NebraskaAlabamaArkansas
South DakotaSouth Carolina
New HampshireMinnesota
IndianaDistrict Of Columbia
IowaTennessee
IllinoisKentuckyDelaware
OhioKansas
North CarolinaIdaho
New YorkVirginia
New MexicoMaryland
West VirginiaRhode IslandPennsylvania
CaliforniaWyoming
TexasNorth Dakota
OregonMaine
WashingtonMassachusetts
MichiganArizona
ColoradoConnecticutNew Jersey
MontanaUtah
VermontWisconsin
1940 1960 1980 2000
0
100
200
rate
Sarampo
Reproduzindo o gráfico do WSJ - Sarampo
I E adicionar a linha referente ao ano que a vacina foi introduzida:
h <- h + geom_vline(xintercept=1963, col = "blue")h
MississippiLouisiana
GeorgiaOklahoma
MissouriNevadaFlorida
NebraskaAlabamaArkansas
South DakotaSouth Carolina
New HampshireMinnesota
IndianaDistrict Of Columbia
IowaTennessee
IllinoisKentuckyDelaware
OhioKansas
North CarolinaIdaho
New YorkVirginia
New MexicoMaryland
West VirginiaRhode IslandPennsylvania
CaliforniaWyoming
TexasNorth Dakota
OregonMaine
WashingtonMassachusetts
MichiganArizona
ColoradoConnecticutNew Jersey
MontanaUtah
VermontWisconsin
1940 1960 1980 2000
0
100
200
rate
Sarampo
O poder de uma boa visualização de dados
I ImpactoI Alto poder de detalhamentoI Consolida um grande número de dados numa só imagemI Facilita a comparaçãoI "Uma imagem vale mais do que mil palavras"
Obrigada!