Você está na página 1de 44

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, por


Ross Ihaka e Robert
Gentleman
I Linguagem muito usada para
cálculos estatísticos, análise
e representação gráfica de
dados
I Open source

I Altamente expansível com o


uso 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 e


rubéola (MMR) e o aparecimento de autismo e doença intestinal.
Estudo de Caso - Vacinas

I Apesar de muitas evidências


científicas contradizerem esse
achado, os relatórios
sensacionalistas da mídia e
teorias da conspiração
levaram algumas pessoas a
acreditar que as vacinas
eram prejudiciais

I Como resultado, muitos pais


deixaram de vacinar seus
filhos, fazendo com que
doenças que praticamente
desapareceram ao longo dos
anos, voltassem a aparecer
Estudo de Caso - Vacinas

I O artigo de 1988 foi retirado e Andrew Wakefield foi "eliminado


do registro médico do Reino Unido, com uma declaração
identificando falsificação deliberada na pesquisa publicada no
The Lancet, e, portanto, foi impedido de praticar medicina no
Reino Unido"

I No entanto, persistem conceitos errôneos, em parte devido a


ativistas autoproclamados que continuam a disseminar
informações erradas sobre vacinas.

I A comunicação eficaz dos dados é um forte antídoto para a


desinformaçã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 mostrar


que as vacinas, de fato, diminuem a ocorrência de doenças.

I Utilizando ferramentas do pacote tidyverse, vamos manipular a


base de dados para atingir nosso objetivo

I Para começar, vamos trabalhar com os casos de


Sarampo(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 casos


de 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-chave
I conhecimento das layers do ggplot2 e sua gramática permite a
criação de diversos gráficos
I 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 maioria


dos 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 de
variáveis, como eixos x e y e cores.
https://rstudio.com/wp- content/uploads/2015/03/ggplot2- cheatsheet.pdf
Gráficos com ggplot2 - California
California

100 Início da vacinação (1963)


Casos de Sarampo/10.000

50

1940 1960 1980 2000


Anos
Criando um objeto ggplot - California
data %>% 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 - California
p <- data %>% filter(state == "California" & !is.na(rate)) %>%
ggplot(aes(year, rate)) +
geom_line() +
ylab("Casos de Sarampo/10.000") + xlab("Anos") + ggtitle ("California")
p

California
Casos de Sarampo/10.000

100

50

0
1940 1960 1980 2000
Anos
Gráficos com ggplot2 - California
p <- p + geom_vline(xintercept=1963, col = "red")
p

California
Casos de Sarampo/10.000

100

50

0
1940 1960 1980 2000
Anos
Gráficos com ggplot2 - California
p + annotate(geom = "text",
label = "Início da vacinação (1963)",
x = 1985,
y = 100,
col = "red")

California
Casos de Sarampo/10.000

100 Início da vacinação (1963)

50

0
1940 1960 1980 2000
Anos
Uma visão geral
Cases de sarampo/10,000 por estado

300

125

Média dos EUA

25

1940 1960 1980 2000


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() e
summarize()

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 layers
g <- 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))

300

125
rate

25
5

1940 1960 1980 2000


year
Uso de layers
g <- g + geom_line(mapping = aes(year, us_rate),
data = avg,
size = 1)
g

300

125
rate

25

1940 1960 1980 2000


year
Uso de layers
g <- g + geom_vline(xintercept=1963,col = "red")
g

300

125
rate

25

1940 1960 1980 2000


year
Uso de layers
g<- g + ggtitle("Cases de sarampo/10,000 por estado") +
xlab("") + ylab("") +
annotate(geom = "text",
label = "Média dos EUA", x = 1955, y = 50)
g

Cases de sarampo/10,000 por estado

300

125

Média dos EUA


25
5

1940 1960 1980 2000


Uso de layers
Cases de sarampo/10,000 por estado

300

125

Média dos EUA

25

1940 1960 1980 2000


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 (heat


map):

I data: data

I geometry: geom_tile() (heat map)

I aesthetics:
I Eixo x: year
I Eixo y: state
I Cor: rate
Reproduzindo o gráfico do WSJ - Sarampo
Sarampo
Wyoming
Wisconsin
West Virginia
Washington
Virginia
Vermont
Utah
Texas
Tennessee
South Dakota
South Carolina
Rhode Island
Pennsylvania
Oregon
Oklahoma
Ohio
North Dakota
North Carolina
New York
New Mexico rate
New Jersey
New Hampshire
Nevada 200
Nebraska
Montana 100
Missouri
Mississippi
Minnesota
Michigan
Massachusetts 0
Maryland
Maine
Louisiana
Kentucky
Kansas
Iowa
Indiana
Illinois
Idaho
Georgia
Florida
District Of Columbia
Delaware
Connecticut
Colorado
California
Arkansas
Arizona
Alabama
1940 1960 1980 2000
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
Sarampo
Wyoming
Wisconsin
West Virginia
Washington
Virginia
Vermont
Utah
Texas
Tennessee
South Dakota
South Carolina
Rhode Island
Pennsylvania
Oregon
Oklahoma
Ohio
North Dakota
North Carolina
New York
New Mexico
New Jersey rate
New Hampshire
Nevada 200
Nebraska
Montana 100
Missouri
Mississippi
Minnesota
Michigan
Massachusetts 0
Maryland
Maine
Louisiana
Kentucky
Kansas
Iowa
Indiana
Illinois
Idaho
Georgia
Florida
District Of Columbia
Delaware
Connecticut
Colorado
California
Arkansas
Arizona
Alabama
1940 1960 1980 2000
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
Sarampo
Wisconsin
Vermont
Utah
Montana
New Jersey
Connecticut
Colorado
Arizona
Michigan
Massachusetts
Washington
Maine
Oregon
North Dakota
Texas
Wyoming
California
Pennsylvania
Rhode Island
West Virginia
Maryland rate
New Mexico
Virginia 200
New York
Idaho 100
North Carolina
Kansas
Ohio
Delaware
Kentucky 0
Illinois
Tennessee
Iowa
District Of Columbia
Indiana
Minnesota
New Hampshire
South Carolina
South Dakota
Arkansas
Alabama
Nebraska
Florida
Nevada
Missouri
Oklahoma
Georgia
Louisiana
Mississippi
1940 1960 1980 2000
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
Sarampo
Wisconsin
Vermont
Utah
Montana
New Jersey
Connecticut
Colorado
Arizona
Michigan
Massachusetts
Washington
Maine
Oregon
North Dakota
Texas
Wyoming
California
Pennsylvania
Rhode Island
West Virginia
Maryland rate
New Mexico
Virginia 200
New York
Idaho 100
North Carolina
Kansas
Ohio
Delaware
Kentucky 0
Illinois
Tennessee
Iowa
District Of Columbia
Indiana
Minnesota
New Hampshire
South Carolina
South Dakota
Arkansas
Alabama
Nebraska
Florida
Nevada
Missouri
Oklahoma
Georgia
Louisiana
Mississippi
1940 1960 1980 2000
O poder de uma boa visualização de dados

I Impacto
I Alto poder de detalhamento
I Consolida um grande número de dados numa só imagem
I Facilita a comparação
I "Uma imagem vale mais do que mil palavras"
Obrigada!
marinabam1@insper.edu.br

Você também pode gostar