class: center, middle, inverse, title-slide # Oficina de R - Intermediário ## R-Ladies São Paulo
bit.ly/rladiesSP6
### 23/02/2019 --- class: center, middle ##Organização e realização: <img src="img/rladies.jpeg" width="15%" style="display: block; margin: auto;" /> [R-Ladies São Paulo](https://www.meetup.com/R-Ladies-Sao-Paulo) ##Apoio: <img src="img/loggi.png" width="50%" style="display: block; margin: auto;" /> [Loggi](https://www.loggi.com/) --- class: center, middle # O que é o R-Ladies? R-Ladies é uma organização mundial que promove a diversidade de gênero na comunidade da linguagem R. R-Ladies São Paulo integra, orgulhosamente, a organização R-Ladies Global, em São Paulo. # Como? Através de meetups e mentorias em um ambiente seguro e amigável. Nosso principal objetivo é promover a linguagem computacional estatística R compartilhando conhecimento, assim, quem tiver interesse na linguagem será bem-vinda, independente do nível de conhecimento. Fonte: [About us - R-Ladies](https://rladies.org/about-us/), [Meetup R-Ladies São Paulo](https://www.meetup.com/R-Ladies-Sao-Paulo/) --- class: center, middle # Para quem? Nosso principal público-alvo são as pessoas que se identificam com o gênero feminino, portanto, mulheres cis, mulheres trans, bem como pessoas não-binárias e queer. # Missão Como uma iniciativa de diversidade, a missão das R-Ladies é alcançar uma representação proporcional de pessoas de gêneros atualmente sub-representados na comunidade R, incentivando, inspirando e caacitando-as. Fonte: [About us - R-Ladies](https://rladies.org/about-us/), [Meetup R-Ladies São Paulo](https://www.meetup.com/R-Ladies-Sao-Paulo/) --- class: center, middle ## Como o R-Ladies começou? <img src="img/gabriela.jpeg" width="20%" style="display: block; margin: auto;" /> **[Gabriela de Queiroz](https://github.com/gdequeiroz)** fundou o R-Ladies no dia **1 de outubro de 2012**. Ela queria retribuir à comunidade depois de ir a vários encontros e aprender muito de graça. O primeiro encontro R-Ladies foi realizado em ** San Francisco, Califórnia (Estados Unidos) **. Nos anos seguintes, mais capítulos do R-Ladies começaram em todo o mundo. Fonte: [About us - R-Ladies](https://rladies.org/about-us/history/) --- class:center, middle <img src="img/shiny2.png" width="100%" style="display: block; margin: auto;" /> Fonte: [R-Ladies Shiny App](https://gqueiroz.shinyapps.io/rshinylady/) (26/01/2019) --- class: center, middle # Código de conduta O R-Ladies dedica-se a proporcionar uma experiência livre de assédio para todos. Não toleramos nenhuma forma de assédio aos participantes. [Código de conduta - R-Ladies](https://github.com/rladies/starter-kit/wiki/Code-of-Conduct#portuguese) --- class: center, middle # Como saber mais? [Meetup](https://www.meetup.com/pt-BR/R-Ladies-Sao-Paulo) Twitter: [@RLadiesGlobal](https://twitter.com/rladiesglobal), [@RLadiesSaoPaulo](https://twitter.com/RLadiesSaoPaulo) Instagram: [@RLadiesSaoPaulo](http://instagram.com/RLadiesSaoPaulo) Website: [https://rladies.org/](https://rladies.org/) R-Ladies LATAM Blog (Latin America) - Em breve! [R-Ladies - How do get involved](https://rladies.org/about-us/help/) --- class: center, middle # R-Ladies São Paulo <img src="img/1meetupsp.jpeg" width="70%" style="display: block; margin: auto;" /> **Primero Meetup R-Ladies em São Paulo - Agosto/2018** --- class: middle # Cronograma de hoje ## Manhã: - Revisão - O que é o tidyverse e dplyr - Introdução ao purrr - Introdução ao ggplot2 ## Tarde: - Introdução ao ggplot2 - Introdução ao RMarkdown --- class: middle, center # Tidyverse --- ### Relembrando: O Tidyverse É uma coleção de pacotes R projetados para a ciência de dados. Todos os pacotes compartilham uma mesma filosofia de desenvolvimento, sintaxe e estruturas de dados. ```r install.packages("tidyverse") #para instalar o tidyverse library(tidyverse) #para utilizar o tidyverse ``` <img src="img/Tidyverse_packages.png" width="60%" style="display: block; margin: auto;" /> --- ### Pacotes do Tidyverse - **ggplot2**: cria gráficos <br></br> - **dplyr**: manipulação de dados <br></br> - **tidyr**: arruma os dados <br></br> - **readr**: leitura dos dados <br></br> - **purrr**: ferramentas para programação funcional, trabalha com funções e vetores <br></br> - **tibble**: dataframes moderno, mais simples de manipular <br></br> - **magrittr**: facilita a escrita e leitura do código <br></br> - **stringr**: trabalha com strings <br></br> - **forcats**: trabalha com fatores <br></br> - **lubridate**: trabalha com datas --- ### dplyr A ideia do pacote **dplyr** é tornar a manipulação de dados explícita utilizando verbos que indicam a ação a ser realizada. O encadeamento dos verbos com o banco de dados é realizado com o operador **pipe**: **%>%** O dplyr foi desenhado para trabalhar com o operator pipe **%>%** do pacote magritrr. --- ### Pipe (%>%) **Atalho**: CTRL + SHIFT + M Pense no Pipe %>% como um operador que aplica as operações à direita nos valores que estão à esquerda. **Exemplo:** gosta_de_melancia <- df_turma_da_monica %>% filter(personagem == "Magali") No código acima, temos um objeto chamado **gosta_de_melancia**, um dataset chamado **df_turma_da_monica** e uma operação de **filtro**. À direita do Pipe temos: filter(personagem == "Magali") À esquerda do Pipe temos: df_turma_da_monica Portanto, será aplicado o filtro personagem == "Magali" no dataset df_turma_da_monica. E o resultado dessa operação será atribuída ao objeto gosta_de_melancia. --- ### Importação de arquivos ```r library(tidyverse) # Uma outra opção é carregar somente o(s) pacote(s) que irá utilizar. #library(dplyr) # Importa o arquivo csv para o objeto df_titanic df_titanic <- read_csv("data/titanic.csv") ``` --- ### View e glimpse - Para visualizar um objeto: **View**(nome-do-objeto) - **glimpse()**: mostra informações como o número de observações (linhas) e variáveis (colunas), o nome das colunas, o tipo delas e os primeiros dados de cada coluna. ```r df_titanic %>% glimpse() ``` ``` ## Observations: 891 ## Variables: 12 ## $ id_passageiro <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15… ## $ sobreviveu <chr> "nao", "sim", "sim", "sim", "nao", "nao", "nao", … ## $ classe <dbl> 3, 1, 3, 1, 3, 3, 1, 3, 3, 2, 3, 1, 3, 3, 3, 2, 3… ## $ nome <chr> "Braund, Mr. Owen Harris", "Cumings, Mrs. John Br… ## $ sexo <chr> "masculino", "feminino", "feminino", "feminino", … ## $ idade <dbl> 22, 38, 26, 35, 35, NA, 54, 2, 27, 14, 4, 58, 20,… ## $ irmaos_conjuge <dbl> 1, 1, 0, 1, 0, 0, 0, 3, 0, 1, 1, 0, 0, 1, 0, 0, 4… ## $ pais_criancas <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 5, 0, 0, 1… ## $ passagem <chr> "A/5 21171", "PC 17599", "STON/O2. 3101282", "113… ## $ tarifa <dbl> 7.2500, 71.2833, 7.9250, 53.1000, 8.0500, 8.4583,… ## $ cabine <chr> NA, "C85", NA, "C123", NA, NA, "E46", NA, NA, NA,… ## $ embarque <chr> "Southampton", "Cherbourg", "Southampton", "South… ``` --- ### Relembrando: Os 6 verbos do dplyr - **filter**(): seleciona linhas - **arrange**(): ordena de acordo com uma ou mais colunas - **select**(): seleciona colunas - **mutate**(): cria/modifica colunas - **summarise**(): sumariza/agrega colunas - **group_by**(): agrupa colunas --- # filter Selecionar linhas da base de dados. ```r # Seleciona os sobreviventes. df_titanic %>% filter(sobreviveu == "sim") ``` ``` ## # A tibble: 342 x 12 ## id_passageiro sobreviveu classe nome sexo idade irmaos_conjuge ## <dbl> <chr> <dbl> <chr> <chr> <dbl> <dbl> ## 1 2 sim 1 Cumi… femi… 38 1 ## 2 3 sim 3 Heik… femi… 26 0 ## 3 4 sim 1 Futr… femi… 35 1 ## 4 9 sim 3 John… femi… 27 0 ## 5 10 sim 2 Nass… femi… 14 1 ## 6 11 sim 3 Sand… femi… 4 1 ## 7 12 sim 1 Bonn… femi… 58 0 ## 8 16 sim 2 Hewl… femi… 55 0 ## 9 18 sim 2 Will… masc… NA 0 ## 10 20 sim 3 Mass… femi… NA 0 ## # … with 332 more rows, and 5 more variables: pais_criancas <dbl>, ## # passagem <chr>, tarifa <dbl>, cabine <chr>, embarque <chr> ``` --- # arrange Ordenar as linhas da base de dados conforme uma ou mais variáveis. ```r # Ordena por ordem crescente da coluna nome. passageiros_ordenados <- df_titanic %>% arrange(nome) passageiros_ordenados ``` ``` ## # A tibble: 891 x 12 ## id_passageiro sobreviveu classe nome sexo idade irmaos_conjuge ## <dbl> <chr> <dbl> <chr> <chr> <dbl> <dbl> ## 1 846 nao 3 Abbi… masc… 42 0 ## 2 747 nao 3 Abbo… masc… 16 1 ## 3 280 sim 3 Abbo… femi… 35 1 ## 4 309 nao 2 Abel… masc… 30 1 ## 5 875 sim 2 Abel… femi… 28 1 ## 6 366 nao 3 Adah… masc… 30 0 ## 7 402 nao 3 Adam… masc… 26 0 ## 8 41 nao 3 Ahli… femi… 40 1 ## 9 856 sim 3 Aks,… femi… 18 0 ## 10 208 sim 3 Albi… masc… 26 0 ## # … with 881 more rows, and 5 more variables: pais_criancas <dbl>, ## # passagem <chr>, tarifa <dbl>, cabine <chr>, embarque <chr> ``` --- # arrange É possível ordenar na ordem descrescente e também por mais de uma variável. ```r # Ordena por ordem decrescente de idade e por ordem crescente de nome. passageiros_ordenados <- df_titanic %>% arrange(desc(idade), nome) passageiros_ordenados ``` ``` ## # A tibble: 891 x 12 ## id_passageiro sobreviveu classe nome sexo idade irmaos_conjuge ## <dbl> <chr> <dbl> <chr> <chr> <dbl> <dbl> ## 1 631 sim 1 Bark… masc… 80 0 ## 2 852 nao 3 Sven… masc… 74 0 ## 3 494 nao 1 Arta… masc… 71 0 ## 4 97 nao 1 Gold… masc… 71 0 ## 5 117 nao 3 Conn… masc… 70.5 0 ## 6 746 nao 1 Cros… masc… 70 1 ## 7 673 nao 2 Mitc… masc… 70 0 ## 8 34 nao 2 Whea… masc… 66 0 ## 9 281 nao 3 Duan… masc… 65 0 ## 10 457 nao 1 Mill… masc… 65 0 ## # … with 881 more rows, and 5 more variables: pais_criancas <dbl>, ## # passagem <chr>, tarifa <dbl>, cabine <chr>, embarque <chr> ``` --- # filter & arrange ```r # Filtra os sobreviventes homens e ordena por classe. df_titanic %>% filter(sexo == "masculino" & sobreviveu == "sim") %>% arrange(classe) ``` ``` ## # A tibble: 109 x 12 ## id_passageiro sobreviveu classe nome sexo idade irmaos_conjuge ## <dbl> <chr> <dbl> <chr> <chr> <dbl> <dbl> ## 1 24 sim 1 Slop… masc… 28 0 ## 2 56 sim 1 Wool… masc… NA 0 ## 3 98 sim 1 Gree… masc… 23 0 ## 4 188 sim 1 "Rom… masc… 45 0 ## 5 210 sim 1 Blan… masc… 40 0 ## 6 225 sim 1 Hoyt… masc… 38 1 ## 7 249 sim 1 Beck… masc… 37 1 ## 8 299 sim 1 Saal… masc… NA 0 ## 9 306 sim 1 Alli… masc… 0.92 1 ## 10 371 sim 1 Hard… masc… 25 1 ## # … with 99 more rows, and 5 more variables: pais_criancas <dbl>, ## # passagem <chr>, tarifa <dbl>, cabine <chr>, embarque <chr> ``` --- # select Selecionar colunas (variáveis) da base de dados. ```r # Seleciona as colunas indicadas. df_titanic %>% select(nome, idade, classe, embarque) ``` ``` ## # A tibble: 891 x 4 ## nome idade classe embarque ## <chr> <dbl> <dbl> <chr> ## 1 Braund, Mr. Owen Harris 22 3 Southampt… ## 2 Cumings, Mrs. John Bradley (Florence Briggs Tha… 38 1 Cherbourg ## 3 Heikkinen, Miss. Laina 26 3 Southampt… ## 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35 1 Southampt… ## 5 Allen, Mr. William Henry 35 3 Southampt… ## 6 Moran, Mr. James NA 3 Queenstow ## 7 McCarthy, Mr. Timothy J 54 1 Southampt… ## 8 Palsson, Master. Gosta Leonard 2 3 Southampt… ## 9 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Ber… 27 3 Southampt… ## 10 Nasser, Mrs. Nicholas (Adele Achem) 14 2 Cherbourg ## # … with 881 more rows ``` --- # select O select tem várias funções úteis, como por exemplo: - **starts_with**("cla"): seleciona colunas que começam com "cla" <br></br> - **ends_with**("ifa"): seleciona colunas que terminam com "ifa" <br></br> - **contains**("ssa"): seleciona colunas que contêm "ssa" <br></br> --- # select ```r # Seleciona as colunas que começam com "id". df_titanic %>% select(starts_with("id")) ``` ``` ## # A tibble: 891 x 2 ## id_passageiro idade ## <dbl> <dbl> ## 1 1 22 ## 2 2 38 ## 3 3 26 ## 4 4 35 ## 5 5 35 ## 6 6 NA ## 7 7 54 ## 8 8 2 ## 9 9 27 ## 10 10 14 ## # … with 881 more rows ``` --- # select Ao inserir o caracter **-** na frente da coluna, você estará excluindo as colunas da seleção. ```r df_titanic %>% select(-id_passageiro, -nome) ``` ``` ## # A tibble: 891 x 10 ## sobreviveu classe sexo idade irmaos_conjuge pais_criancas passagem ## <chr> <dbl> <chr> <dbl> <dbl> <dbl> <chr> ## 1 nao 3 masc… 22 1 0 A/5 211… ## 2 sim 1 femi… 38 1 0 PC 17599 ## 3 sim 3 femi… 26 0 0 STON/O2… ## 4 sim 1 femi… 35 1 0 113803 ## 5 nao 3 masc… 35 0 0 373450 ## 6 nao 3 masc… NA 0 0 330877 ## 7 nao 1 masc… 54 0 0 17463 ## 8 nao 3 masc… 2 3 1 349909 ## 9 sim 3 femi… 27 0 2 347742 ## 10 sim 2 femi… 14 1 0 237736 ## # … with 881 more rows, and 3 more variables: tarifa <dbl>, cabine <chr>, ## # embarque <chr> ``` --- # mutate Criar ou modificar colunas de uma base de dados. Supondo que o valor da tarifa no dataset está em libras, e que 1£ = R$ 4.93, vamos descobrir qual é o valor das tarifas em reais. ```r # Calcula a coluna tarifa para o valor da tarifa em reais e # atribui ao objeto tarifa_conversao, # o df_titanic e a coluna tarifa já calculada. # Importante: neste caso a coluna tarifa do df_titanic não é alterada. tarifa_conversao <- df_titanic %>% mutate(tarifa = tarifa * 4.93) ``` ```r # Cria uma nova variável chamada tarifa_real e # atribui ao objeto tarifa_conversao o df_titanic e # mais a nova coluna tarifa_real. # Importante: neste caso não é criado uma nova coluna no df_titanic. tarifa_conversao <- df_titanic %>% mutate(tarifa_real = tarifa * 4.93) ``` --- # summarize Sumariza colunas da base de dados, ou seja, resume os valores das colunas em um só valor, podendo ser a média, mediana, min, max, etc. ```r # Calcula a média da variável idade # na.rm = TRUE remove os NAs df_titanic %>% summarize(mean(idade, na.rm=TRUE)) ``` ``` ## # A tibble: 1 x 1 ## `mean(idade, na.rm = TRUE)` ## <dbl> ## 1 29.7 ``` --- # group_by + summarize Agrupa as colunas de uma base de dados. O group_by é bastante utilizado com o summarize. ```r # Agrupa pela variável sobreviveu e # calcula o número de passageiros por grupo (sim/nao). # A função n() mostra o número de linhas em cada grupo. df_titanic %>% group_by(sobreviveu) %>% summarize(num_passageiros = n()) ``` ``` ## # A tibble: 2 x 2 ## sobreviveu num_passageiros ## <chr> <int> ## 1 nao 549 ## 2 sim 342 ``` --- # dplyr - os n verbos - Manipulação de observações - **filter()**, distinct(), sample_frac(), sample_n(), slice(), top_n() - **arrange()**, add_row() - Manipulação de variáveis - **select()** - matches(), num_range(), one_off(), everything() - **mutate()**, mutate_at(), mutate_if(), transmute(), add_column(), rename() - sum(), median(), sd(), quantile(), n_distinct(), if_else(), recode() - Funções de síntese - **summarise()**, summarise_all(), summarise_at(), summarise_if() - **group_by()**, ungroup(), group_by_all(), group_by_at(), group_by_if() --- class: middle #### Para relembrar e fazer os desafios de dplyr da oficina de R básico: - https://bit.ly/rladiesSP5 --- class: center, middle # Introdução ao Join --- # dplyr - combinando tabelas ```r band_members ## # A tibble: 3 x 2 ## name band ## <chr> <chr> ## 1 Mick Stones ## 2 John Beatles ## 3 Paul Beatles band_surnames <- tibble(surname = c("Jagger", "Lennon", "McCatney")) ``` ```r bind_cols(band_members, band_surnames) ## # A tibble: 3 x 3 ## name band surname ## <chr> <chr> <chr> ## 1 Mick Stones Jagger ## 2 John Beatles Lennon ## 3 Paul Beatles McCatney ``` --- # dplyr - combinando tabelas <br> <img src="img/dplyr_bind_1.png" width="83%" style="display: block; margin: auto;" /> <br> <img src="img/dplyr_bind_2.png" width="77%" style="display: block; margin: auto;" /> --- # dplyr - mesclando tabelas <br> <img src="img/dplyr_join_2.png" width="85%" style="display: block; margin: auto;" /> --- # dplyr - mesclando tabelas ```r band_members %>% glimpse() ## Observations: 3 ## Variables: 2 ## $ name <chr> "Mick", "John", "Paul" ## $ band <chr> "Stones", "Beatles", "Beatles" ``` ```r band_instruments %>% glimpse() ## Observations: 3 ## Variables: 2 ## $ name <chr> "John", "Paul", "Keith" ## $ plays <chr> "guitar", "bass", "guitar" ``` ```r left_join(band_members, band_instruments, by = "name") %>% glimpse() ## Observations: 3 ## Variables: 3 ## $ name <chr> "Mick", "John", "Paul" ## $ band <chr> "Stones", "Beatles", "Beatles" ## $ plays <chr> NA, "guitar", "bass" ``` --- # dplyr - mesclando tabelas ```r right_join(band_members, band_instruments, by = "name") %>% glimpse() ## Observations: 3 ## Variables: 3 ## $ name <chr> "John", "Paul", "Keith" ## $ band <chr> "Beatles", "Beatles", NA ## $ plays <chr> "guitar", "bass", "guitar" inner_join(band_members, band_instruments) %>% glimpse() ## Joining, by = "name" ## Observations: 2 ## Variables: 3 ## $ name <chr> "John", "Paul" ## $ band <chr> "Beatles", "Beatles" ## $ plays <chr> "guitar", "bass" full_join(band_members, band_instruments, by = "name") %>% glimpse() ## Observations: 4 ## Variables: 3 ## $ name <chr> "Mick", "John", "Paul", "Keith" ## $ band <chr> "Stones", "Beatles", "Beatles", NA ## $ plays <chr> NA, "guitar", "bass", "guitar" ``` --- # dplyr - mesclando tabelas ```r glimpse(band_members) ## Observations: 3 ## Variables: 2 ## $ name <chr> "Mick", "John", "Paul" ## $ band <chr> "Stones", "Beatles", "Beatles" ``` ```r glimpse(band_instruments2) ## Observations: 3 ## Variables: 2 ## $ artist <chr> "John", "Paul", "Keith" ## $ plays <chr> "guitar", "bass", "guitar" ``` ```r left_join(band_members, band_instruments2, by=c("name"="artist")) %>% glimpse() ## Observations: 3 ## Variables: 3 ## $ name <chr> "Mick", "John", "Paul" ## $ band <chr> "Stones", "Beatles", "Beatles" ## $ plays <chr> NA, "guitar", "bass" ``` --- # dplyr - mesclando tabelas ```r base_A <- tibble(chave_nome_igual= c(1:3,NA), chave_nome_diferente_A= c(1:3,NA) , var_nome_igual= letters[1:4], var_nome_diferente_A= letters[1:4]) %>% glimpse() ## Observations: 4 ## Variables: 4 ## $ chave_nome_igual <int> 1, 2, 3, NA ## $ chave_nome_diferente_A <int> 1, 2, 3, NA ## $ var_nome_igual <chr> "a", "b", "c", "d" ## $ var_nome_diferente_A <chr> "a", "b", "c", "d" ``` ```r base_B <- tibble(chave_nome_igual= c(2:4,NA), chave_nome_diferente_B= c(2:4,NA), var_nome_igual= letters[5:8], var_nome_diferente_B= letters[5:8]) %>% glimpse() ## Observations: 4 ## Variables: 4 ## $ chave_nome_igual <int> 2, 3, 4, NA ## $ chave_nome_diferente_B <int> 2, 3, 4, NA ## $ var_nome_igual <chr> "e", "f", "g", "h" ## $ var_nome_diferente_B <chr> "e", "f", "g", "h" ``` --- # dplyr - mesclando tabelas ```r full_join(base_A, base_B, by = c("chave_nome_igual" = "chave_nome_igual", "chave_nome_diferente_A" = "chave_nome_diferente_B"), suffix =c(".A",".B"), na_matches = pkgconfig::get_config("dplyr::na_matches")) %>% glimpse() ## Observations: 5 ## Variables: 6 ## $ chave_nome_igual <int> 1, 2, 3, NA, 4 ## $ chave_nome_diferente_A <int> 1, 2, 3, NA, 4 ## $ var_nome_igual.A <chr> "a", "b", "c", "d", NA ## $ var_nome_diferente_A <chr> "a", "b", "c", "d", NA ## $ var_nome_igual.B <chr> NA, "e", "f", "h", "g" ## $ var_nome_diferente_B <chr> NA, "e", "f", "h", "g" ``` --- class: center, middle # Introdução ao purrr --- # purrr - programação funcional O R é uma linguagem multi-paradigma: array, orientada a objectos, imperativo ... mas tem como cerne a linguagem funcional, e portanto uma natureza de soluções centrada em funções. <br> > **map(.x,.f)**: Para cada ** .x ** faça ** .f **, onde: - .x: vetor, uma lista, colunas de um data frame - .f: função, fórmula ou vetor atômico --- # purrr - map & exemplo ```r df_titanic2 <- df_titanic[1:9,c(1:3,11)] ``` - **map()** - aplica uma função a elementos (de listas ou vetores) ```r df_titanic2 %>% map(is.na) %>% map(sum) ## $id_passageiro ## [1] 0 ## ## $sobreviveu ## [1] 0 ## ## $classe ## [1] 0 ## ## $cabine ## [1] 6 ``` ```r #df_titanic2 %>% map(~sum(is.na(.))) #df_titanic2 %>% map( function(x) sum(is.na(x)) ) ``` --- # purrr - map + if - **map_if()** - aplica a função condicionalmente ```r df_titanic2 %>% map_if(is.character, as.factor) ## $id_passageiro ## [1] 1 2 3 4 5 6 7 8 9 ## ## $sobreviveu ## [1] nao sim sim sim nao nao nao nao sim ## Levels: nao sim ## ## $classe ## [1] 3 1 3 1 3 3 1 3 3 ## ## $cabine ## [1] <NA> C85 <NA> C123 <NA> <NA> E46 <NA> <NA> ## Levels: C123 C85 E46 ``` --- # purrr - map + at - **map_at()** - aplica a função aos elementos especificados por nome ou index ```r df_titanic2 %>% map_at("sobreviveu", as.factor) ## $id_passageiro ## [1] 1 2 3 4 5 6 7 8 9 ## ## $sobreviveu ## [1] nao sim sim sim nao nao nao nao sim ## Levels: nao sim ## ## $classe ## [1] 3 1 3 1 3 3 1 3 3 ## ## $cabine ## [1] NA "C85" NA "C123" NA NA "E46" NA NA ``` --- # purrr - map + n ```r x <- list(1, 2); y <- list(10, 20); z <- list(100, 200) ``` - **map2()** - aplica uma função a um par de elementos (de duas listas/vetores) ```r map2(x, y, ~ .x + .y) ## [[1]] ## [1] 11 ## ## [[2]] ## [1] 22 ``` - **pmap()** - aplica uma função a um grupo de elementos de um grupo de listas ```r pmap(list(x, y, z), sum) ## [[1]] ## [1] 111 ## ## [[2]] ## [1] 222 ``` --- # purrr - possibilidades > o **map()** sempre retorna uma lista, mas você pode: - **map_lgl()** - lógico - **map_chr()** - caracter - **map_int()** - inteiro - **map_dbl()** - double - **map_df() ** - data frame - **map_dfr() ** - data frame (pelas linhas) - **map_dfc() ** - data frame (pelas colunas) - **walk()** - retorna o .x invisível (permite o uso do %>%) > ou ainda: - **modify_depth()** - aplica a função a cada elemento de um dado nível da lista - **cross2()** - obtem todas as combinações de .x e .y - **append()** - adiciona valores ao fim de uma lista - **flatten()** - remove um nível de index de uma lista - **...** --- # purrr - aplicações > faça para 1, crie a receita, faça para todos! ```r #ilustração - 1 list.files("\diretório_yakult", pattern='*.xlsx') %>% map(read_excel) %>% walk(glimpse) #ilustração - 2 f_inventada <- function(data, concorrentes, visualização){ } dados %>% cross_df %>% pmap(f_inventada) #ilustração - 3 mtcars %>% split(.$cyl) %>% map(~ lm(mpg ~ wt, data = .x)) %>% map(summary) %>% map_dbl("r.squared") ``` --- class: center, middle # [Cheatsheets :)](https://www.rstudio.com/resources/cheatsheets/) ## [Materiais de estudo](https://github.com/beatrizmilz/materiais_estudo_R) --- class: center, middle # Introdução ao ggplot2 --- ### O que é o ggplot2? - É um pacote usado para visualização de dados. - É uma implementação dos conceitos e definições sobre o que é um gráfico oriundos do livro _Grammar of Graphics_ de Leland Wilkinson. - [Cheatsheet em português](https://www.rstudio.com/wp-content/uploads/2016/03/ggplot2-cheatsheet-portuguese.pdf) - **Materiais interessantes:** *[Workshop Code Your Graph](https://alison.rbind.io/html/jamboree_heart_ggplot.html) *[R for Data Science - capítulos 3 e 28](https://r4ds.had.co.nz/data-visualisation.html) <img src="img/ggplot2.png" width="30%" style="display: block; margin: auto;" /> --- # O que é o grammar of graphics? - A ideia básica é que de forma independente podemos especificar e combinar blocos de construção de um gráfico para criar praticamente qualquer tipo de exibição gráfica desejada. - Os blocos de construção (ou camadas) de um gráfico incluem: - data - aesthetic mapping - geometric object - statistical transformations - scales - coordinate system - position adjustments - faceting --- **Carregando a nossa base**: Vamos usar a base diamonds que já vem no pacote do ggplot2 ```r diamonds <- ggplot2::diamonds DT::datatable(head(diamonds), fillContainer = FALSE) ```
--- ** Exemplo passo a passo - geom_histogram() ** A função ggplot() recebe um data frame e cria a camada base do gráfico. Se rodarmos somente ela, teremos um painel em branco: ```r diamonds %>% ggplot() #usando o pipe ``` <img src="index_files/figure-html/unnamed-chunk-48-1.png" style="display: block; margin: auto;" /> --- ** Exemplo passo a passo - geom_histogram() ** Porém, para construirmos o gráfico precisamos dizer como as observações das nossas variáveis serão representadas no gráfico e e para isso usamos a camada de mapeamento estético. A combinação ggplot() + geom_() é o que definirá o tipo de gráfico que queremos gerar ```r diamonds %>% ggplot() + geom_histogram(mapping = aes(x = depth)) ``` ``` ## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. ``` <img src="index_files/figure-html/unnamed-chunk-49-1.png" style="display: block; margin: auto;" /> --- ** Desafio 1 ** Plotar a distribuição de frequências (também conhecida como histograma) da variável price --- ** Desafio 1 - RESPOSTA ** Plotar a distribuição de frequências (também conhecida como histograma) da variável price ```r #lembre-se que as camadas são unidas por um + e não por %>% diamonds %>% ggplot() + geom_histogram(mapping = aes(x = price)) ``` ``` ## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. ``` <img src="index_files/figure-html/unnamed-chunk-50-1.png" style="display: block; margin: auto;" /> --- ** Exemplo passo a passo 2: geom_bar ** Para variáveis categóricas, ou seja, aquelas que representam uma categoria como qualidade (bom, ruim), sexo(M, F) ou no nosso caso, a qualidade do corte da pedra, podemos usar um gráfico de barras ```r diamonds %>% ggplot() + geom_bar(aes(x=cut)) ``` <img src="index_files/figure-html/unnamed-chunk-51-1.png" style="display: block; margin: auto;" /> --- ** Exemplo passo a passo 2: geom_bar ** Podemos preencher as colunas com a informação sobre a cor das pedras ```r diamonds %>% ggplot()+ geom_bar(aes(x=cut, fill=color)) ``` <img src="index_files/figure-html/unnamed-chunk-52-1.png" style="display: block; margin: auto;" /> --- ** Exemplo passo a passo 2: geom_bar ** Com a camada theme_bw() podemos mudar o fundo do nosso gráfico ```r diamonds %>% ggplot() + geom_bar(aes(x=cut, fill=color)) + theme_bw() ``` <img src="index_files/figure-html/unnamed-chunk-53-1.png" style="display: block; margin: auto;" /> --- ** Exemplo passo a passo 2: geom_bar ** Usando a função labs() podemos inserir títulos e legendas apropriadas para nosso gráfico ```r diamonds %>% ggplot(aes(x=cut, fill=color)) + geom_bar() + theme_bw() + labs(title = "Título do gráfico", x = "Corte do diamante", y = "Contagem", fill = "Cor") ``` <img src="index_files/figure-html/unnamed-chunk-54-1.png" style="display: block; margin: auto;" /> --- ** Desafio 2 ** Plote um gráfico de barras da váriavel claridade da pedra incluindo a informação sobre a cor da pedra para cada tipo de claridade de pedra. Use também legendas apropriadas --- ** Desafio 2 - RESPOSTA ** Plote um gráfico de barras da váriavel claridade da pedra incluindo a informação sobre a cor da pedra para cada tipo de claridade de pedra. Use também legendas apropriadas ```r diamonds %>% ggplot(aes(x=clarity, fill=color)) + geom_bar() + theme_bw() + labs(title = "Cores dos diamantes por tipo de claridade", x = "Claridade do diamante", y = "Contagem", fill = "Cor") ``` <img src="index_files/figure-html/unnamed-chunk-55-1.png" style="display: block; margin: auto;" /> --- ** Exemplo passo a passo 3: geom_point ** ```r diamonds %>% ggplot() + geom_point(aes(x = carat, y = price)) ``` <img src="index_files/figure-html/unnamed-chunk-56-1.png" style="display: block; margin: auto;" /> --- ** Exemplo passo a passo 3: geom_point ** Podemos estabelecer um tamanho médio por pedra e classificá-las como pequenas ou grandes ```r diamonds %>% mutate( tamanho = (x + y + z)/3, tamanho = ifelse(tamanho <= 6, "Pequena", "Grande") ) %>% filter(!is.na(tamanho)) %>% ggplot() + geom_point(mapping = aes(x = carat, y = price, color = tamanho)) ``` <img src="index_files/figure-html/unnamed-chunk-57-1.png" style="display: block; margin: auto;" /> --- ** Exemplo passo a passo 3: geom_point ** Dois pontos importantes nesse exemplo: - Aqui fomos capazes de juntar os conceitos aprendidos até aqui do dplyr usando as funções mutate() e filter() juntamente com os as funções do ggplot2. Isso é extremamente comum quando estamos lidando com a visualização de dados. - O atributo color foi utilizado dentro da função aes(), pois temos a variável tamanho que precisa ser mapeada para ser representada no gráfico. --- ** Exemplo passo a passo 3: geom_point ** Outro exemplo ```r diamonds %>% mutate( compra = ifelse(cut == "Fair" & price >= 5000, "Não vale a pena comprar", "Top")) %>% ggplot() + geom_point(mapping = aes(x = carat, y = price, color = compra)) ``` <img src="index_files/figure-html/unnamed-chunk-58-1.png" style="display: block; margin: auto;" /> --- ** Desafio 3 ** Plote um gráfico de dispersão das variáveis price e carat pintando os pontos de acordo com a qualidade do corte das pedras --- ** Desafio 3 ** Plote um gráfico de dispersão das variáveis price e carat pintando os pontos de acordo com a qualidade do corte das pedras ```r diamonds %>% ggplot() + geom_point(mapping = aes(x = carat, y = price, color = cut)) ``` <img src="index_files/figure-html/unnamed-chunk-59-1.png" style="display: block; margin: auto;" /> --- # Atributos estéticos * A função aes() indica a relação entre os dados e cada aspecto visual do gráfico, ou seja, qual variável será representada no eixo x, no eixo y, o tipo de linha do gráfico, a cor e o tamanho dos componentes geométricos, etc. * Os aspectos visuais mais utilizados incluem: **color=**: altera a cor de formas que não têm área (pontos e retas). **fill=**: altera a cor de formas com área (barras, caixas, densidades, áreas). **size=**: altera o tamanho de formas. **type=**: altera o tipo da forma, geralmente usada para pontos. **linetype=**: altera o tipo da linha. --- # Formas geométricas * Os _geoms_ basicamente definem o tipo de gráfico que queremos construir. Os principais são: *geom_line* - para linhas definidas por pares (x,y). *geom_abline* - para retas definidas por um intercepto e uma inclinação. *geom_hline* - para retas horizontais. *geom_bar* - para barras. *geom_histogram* - para histogramas. *geom_boxplot* - para boxplots. *geom_density* - para densidades. *geom_area* - para áreas. --- **Quais aspectos visuais utilizar para cada geom_ ?** * Depende do que se quer mostrar no gráfico e do que cada geom_ aceita como aspecto visual * Porém, temos um gif muito bom para isso [link aqui](https://www.yihanwu.ca/post/geoms-and-aesthetic-parameters/): ```r frameWidget(edgebundle(graph_from_data_frame(relationship), tension = 0.45, cutoff = 0.1, width = NULL, fontsize = 14, padding = 110, nodesize = c(5, 20), directed = FALSE), height = "600") ```
[Fonte](https://www.yihanwu.ca/post/geoms-and-aesthetic-parameters/) --- **Associando gráficos** Imagine que temos dois gráficos que mapeiam as mesmas variáveis: ```r # esquerda diamonds %>% ggplot() + geom_point(aes(x = carat, y = price)) ``` <img src="index_files/figure-html/unnamed-chunk-62-1.png" style="display: block; margin: auto;" /> ```r # direita diamonds %>% ggplot() + geom_smooth(aes(x = carat, y = price)) ``` ``` ## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")' ``` <img src="index_files/figure-html/unnamed-chunk-63-1.png" style="display: block; margin: auto;" /> --- **Associando gráficos** Podemos simplesmente escrever: ```r # juntos diamonds %>% ggplot() + geom_point(aes(x = carat, y = price)) + geom_smooth(aes(x = carat, y = price)) ``` ``` ## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")' ``` <img src="index_files/figure-html/unnamed-chunk-64-1.png" style="display: block; margin: auto;" /> --- **Associando gráficos** Podemos ainda especificar a função aes() dentro da função ggplot2 para não repetirmos ela duas vezes (e assim evitar possíveis erros, pois diferentes váriáveis podem ser mapeadas no gráfico) ```r diamonds %>% ggplot(aes(x = carat, y = price)) + geom_point(aes(color = color)) + geom_smooth() ``` ``` ## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")' ``` <img src="index_files/figure-html/unnamed-chunk-65-1.png" style="display: block; margin: auto;" /> --- **Associando gráficos** Podemos também reproduzir um mesmo gráfico para várias categorias de uma dada variável: ```r diamonds %>% ggplot(aes(x = carat, y = price)) + geom_point(aes(color = color)) + geom_smooth() + facet_wrap(~cut) #testar parametros ncol e nrow ``` ``` ## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")' ``` <img src="index_files/figure-html/unnamed-chunk-66-1.png" style="display: block; margin: auto;" /> --- ** Desafio 4 ** Plote um gráfico de dispersão das variáveis price e carat pintando os pontos de acordo com a qualidade do corte das pedras juntamente com a linha de tendência desses pontos (e seu intervalo de confiança) para cada uma das categorias da variável color --- ** Desafio 4 - RESPOSTA ** Plote um gráfico de dispersão das variáveis price e carat pintando os pontos de acordo com a qualidade do corte das pedras juntamente com a linha de tendência desses pontos (e seu intervalo de confiança) para cada uma das categorias da variável color ```r diamonds %>% ggplot(mapping = aes(x = carat, y = price)) + geom_point(aes(color = cut)) + geom_smooth() + facet_wrap(~color) ``` ``` ## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")' ``` <img src="index_files/figure-html/unnamed-chunk-67-1.png" style="display: block; margin: auto;" /> --- class: inverse, center, middle ## Temos mais um tempinho? --- Associando diferentes gráficos ** Dessa vez precisamos de um pacote extra chamado patchwork** ```r #instale o pacote com esse comando: devtools::install_github("thomasp85/patchwork") ``` ``` ## Skipping install of 'patchwork' from a github remote, the SHA1 (fd7958ba) has not changed since last install. ## Use `force = TRUE` to force installation ``` ```r #carregue o pacote library(patchwork) ``` --- ** Desafio 5 - E ÚLTIMO! ** Plote quaisquer dois gráficos usando o ggplot2 e salve cada um deles em um objeto chamado grafico1 e grafico2, respectivamente (pode ser os gráficos mais simples que vimos no começo, como o histograma e o gráfico de dispersão) --- ** Desafio 5 - RESPOSTA ** ```r grafico1 <- diamonds %>% ggplot(aes(x=clarity, fill=color)) + geom_bar() + theme_bw() + labs(title = "Cores dos diamantes por tipo de claridade", x = "Claridade do diamante", y = "Contagem", fill = "Cor") grafico2 <- diamonds %>% filter(color %in% c("E", "F", "G", "H", "I", "J")) %>% ggplot() + geom_boxplot(aes(x = color, y = price, fill = color), show.legend = FALSE) + labs(title = "Boxplot das cores dos diamantes", x = "Cor do diamante", y = "Preço do diamante") grafico1 + grafico2 ``` <img src="index_files/figure-html/unnamed-chunk-69-1.png" style="display: block; margin: auto;" /> --- class: center, middle # Introdução ao Rmarkdown --- ## Rmarkdown * É um tipo de arquivo que suporta códigos em R, texto, markdown e outros formatos. * Apresenta os seus códigos, o resultado, e também os seus comentários. * Arquivos **.Rmd** são reprodutíveis. * São interessantes para trabalhar em equipe, para comunicar seus resultados, e para desenvolver seus códigos em R. * O markdown é uma linguagem de marcação simples. * [Rmarkdown Cheatsheet](http://www.rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf) --- ## Rmarkdown * Possibilita exportar diferentes tipos de arquivos. <img src="img/markdown.png" width="50%" style="display: block; margin: auto;" /> --- class: middle ## Como criar um arquivo RMarkdown? No RStudio, clique em File → New File → R Markdown <img src="img/1.PNG" width="267" style="display: block; margin: auto;" /> --- class: middle ## Como criar um arquivo RMarkdown? <img src="img/New_R_Markdown.png" width="90%" style="display: block; margin: auto;" /> --- class: middle ## yaml - metadados do documento: - **y**et **a**nother **m**arkup **l**anguage - Controla muitas das configurações do documento. - title: título - subtitle: subtítulo - author: autor - date: data - output: formato (Ex: html_document, pdf_document, etc). - Cuidado com a **identação** Leia também: [Output Formats - R Markdown: The Definitive Guide](https://bookdown.org/yihui/rmarkdown/output-formats.html) ```r --- title: "Initial R Markdown document" author: "Karl Broman" date: "April 23, 2015" output: html_document --- ``` --- ## Markdown * O markdown é uma linguagem de marcação simples. * [Rmarkdown Cheatsheet](http://www.rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf) * Elaborada para ser fácil de ler, fácil de escrever. **Negrito**: `**bold**` _Itálico_: `_italics_` --- ##Sintaxe Markdown **Adicionar títulos** `# Título 1` `## Título 2` `### Título 3` # Título 1 ## Título 2 ### Título 3 --- class: middle ## Fazendo uma lista Você pode fazer uma lista escrevendo com hífens ou asteriscos, como a seguir: `* negrito com asteriscos duplos` `* itálico com underline` `* fonte do tipo código com crase` ou dessa forma: `- negrito com asteriscos duplos` `- itálico com underline` `- fonte do tipo código com crase` Cada um vai aparecer como: - negrito com asteriscos duplos - itálico com underline - fonte do tipo código com crase Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Fazendo uma lista enumerada Você pode fazer uma lista numerada usando somente números. Você pode usar o mesmo número quantas vezes quiser: `1. negrito com asteriscos duplos` `1. itálico com underline` `1. fonte do tipo código com crase` Isso irá aparecer como: 1. negrito com asteriscos duplos 1. itálico com underline 1. fonte do tipo código com crase Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Compilando o RMarkdown Você compila o documento de RMarkdown para uma página html ao clicar no botão "Knit HTML" no canto superior esquerdo. <img src="img/knit.png" width="50%" style="display: block; margin: auto;" /> --- ### Desafio Crie um novo documento R Markdown. Delete todos os chuncks de código de R e escreva um pouco de Markdown (algumas seções, textos estilizados e lista com itens). Converta o documento em um arquivo html. Você pode usar o [Rmarkdown Cheatsheet](http://www.rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf) para referência. Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Mais de Markdown Você pode fazer um hiperlink dessa forma: `[**texto para mostrar**](http://the-web-page.com)`. Você pode incluir arquivo de imagem dessa forma: `` Você pode fazer sobescrito (e.g., F~2~) com `F~2` e superescrito (e.g., F^2^) com `F^2^`. Se você sabe como escrever equações em LaTeX, ficará feliz em saber que pode usar $ $ e $$ $$ para inserir equações matemáticas, como e `$E = mc^2$`e `$$y = \mu + \sum_{i=1}^p \beta_i x_i + \epsilon$$` Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Chuncks de Código R Markdown é interessante e útil, mas seu real poder vem da combinação de Markdown com chuncks de códigos em R. Isso é o Markdown. Quando processado, o código em R será executado; se ele produz figuras, as figuras serão inseridas ao final do documento. <img src="img/chunk.png" width="788" style="display: block; margin: auto;" /> - É uma boa ideia dar a cada chunck um nome, pois ele podem ajudar a corrigir erros, e, se quaisquer gráficos são produzidos, os nomes dos arquivos serão baseados no nome do chunck de código que os produzirem. Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Como criar um chunck de código? <img src="img/8.PNG" width="267" style="display: block; margin: auto;" /> Dica: Atalho do teclado para criar chunks: `Ctrl + ALt + I`. # Desafio Adicione chunks de código para carregar o pacote dplyr --- class: middle ## Como as coisas são compiladas? - Quando você pressiona o botão “Knit HTML”, o documento R Markdown é processado pelo knitr e um documento Markdown é produzido (como, também, um potencial conjunto de arquivos de figuras): o código em R é executado e substituído pelo input e output; se figuras são produzidas, links para essas figuras serão incluídos. - A seguir, os documentos Markdown e de figuras são processados pela ferramenta pandoc, que converte o arquivo Markdown em um arquivo html, com as figuras anexadas. <img src="img/rmd-15-rmd_to_html_fig-1.png" width="768" style="display: block; margin: auto;" /> Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Opções de chunck Há uma variedade de opções que podem afetar como os chuncks de código são tratados. - Use `echo=FALSE` para evitar que o próprio código apareça. - Use `results="hide"` para evitar que qualquer resultado seja impresso. - Use `eval=FALSE` para mostrar o código, mas ele não é avaliado. - Use `warning=FALSE` e `message=FALSE` para ocultar qualquer messagens de avisos produzidas. - Use `out.width` para controlar o tamanho de figuras produzidas (Ex: `out.width = "100%"`). Assim, você pode escrever: <img src="img/chunk_load_libraries.png" width="791" style="display: block; margin: auto;" /> Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Opções globais de chunck Muitas vezes, haverá algumas opções que você irá querer repetir seu uso; para isso, você pode configurar as opções globais de chunck, como: <img src="img/chunk_global_options.png" width="788" style="display: block; margin: auto;" /> A opção `fig.path` define onde as figuras serão salvas. A `/` é importante, pois sem ela, as figuras seriam salvas no local padrão, mas só com nomes que começam com Figs. Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Código R no texto Você pode fazer com que todo número em seu relatório seja reproduzível. ```r #Use `r e ` para um in-line code chunk . #O código será executado e #substituído com o valor do resultado. ``` ```r `r code` Ex: `r round(3.14159265359, 2)` ``` 3.14 Não deixe que esse chunck in-line seja separado através das linhas. Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Código em R no texto Outro exemplo: ```r # O dataframe mtcars possui `r nrow(mtcars)` carros. ``` Exemplo: O dataframe mtcars possui 32 carros. --- class: middle ## Desafio - Tente um pouco de código R in-line. Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Exemplo: adicionando um gráfico ```r attach(mtcars) ``` ``` ## The following object is masked from package:ggplot2: ## ## mpg ``` ```r plot(wt, mpg, main="Exemplo de Gráfico de Dispersão", xlab="Peso do Carro ", ylab="Milhas Por Galão ", pch=19) ``` <img src="index_files/figure-html/unnamed-chunk-83-1.png" style="display: block; margin: auto;" /> --- class: middle ## Exemplo: adicionando uma tabela simples ```r 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 ``` --- class: middle ## Exemplo: adicionando uma tabela ```r DT::datatable(head(mtcars, 10), fillContainer = TRUE, options = list(pageLength = 5)) ```
--- class: middle ## Adicionando imagens usando o Knitr Função: `knitr::include_graphics()` Exemplo: ```r knitr::include_graphics("https://www.r-project.org/Rlogo.png") ``` <img src="https://www.r-project.org/Rlogo.png" width="50%" style="display: block; margin: auto;" /> --- class: middle ## Adicionando imagens usando Knitr: opções de Chunk - `out.width = "50%"` - tamanho da imagem <img src="https://www.r-project.org/Rlogo.png" width="50%" style="display: block; margin: auto;" /> [Opções do KnitR](https://yihui.name/knitr/options/#chunk-options) --- class: middle ##Adicionando imagens usando Knitr: opções de Chunk - **Alinhamento da figura** - `fig.align = 'center', 'default', **'left'**,'right'` <img src="https://www.r-project.org/Rlogo.png" width="20%" style="display: block; margin: auto auto auto 0;" /> - `fig.align = 'center', 'default', 'left', **'right' **` <img src="https://www.r-project.org/Rlogo.png" width="20%" style="display: block; margin: auto 0 auto auto;" /> --- class: middle ##Adicionando imagens usando Knitr: opções de Chunk - Legenda de figura - `fig.cap="Logo R"` <div class="figure" style="text-align: center"> <img src="https://www.r-project.org/Rlogo.png" alt="R Logo" width="50%" /> <p class="caption">R Logo</p> </div> --- class: middle ## Desafio - Adicionar imagem - Usar opções de chunk para controlar o tamanho da figura e para esconder o código. Refêrencia: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Outras opções de saída Você também pode converter o R Markdown para PDF ou um documento Word. Clique no pequeno triângulo próximo ao botão "Knit HTML" para aparecer um menu. Ou você pode colocar pdf_document ou word_document ino cabeçalho do arquivo. <img src="img/knit.png" width="276" style="display: block; margin: auto;" /> Dica: Criando documentos em PDF Criando documentos em .pdf pode requerer a instalação de TeX. Se pedido, isso é detalhado numa mensagem de erro. Referência: [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) --- class: middle ## Outras opções de saída - Você pode fazer apresentações usando R, RMarkdown e KnitR - Use o pacote [Xaringan](https://github.com/yihui/xaringan). Essa apresentação foi feita com Xaringan! [3o Meetup R-Ladies São Paulo sobre Apresentações no R](https://beatrizmilz.github.io/apresentacao_RLadies_xaringan/) - Rmd compila em um formato HTML. Entoã você pode criar páginas html usando essa ferramenta. O pacote **[prettydoc](https://cran.r-project.org/web/packages/prettydoc/vignettes/architect.html)**. - Pacote bookdown - escrever livros; https://bookdown.org/ - Pacote blogdown - criar páginas na internet; https://bookdown.org/yihui/blogdown/ - Veja a [galeria](https://rmarkdown.rstudio.com/gallery.html), lá tem exemplos do que dá pra fazer com Rmarkdown. - Veja mais: https://rmarkdown.rstudio.com/index.html --- ## DEU ERRO NO KNITR! Calma! É bem comum dar erro ao compliar o arquivo pois **qualquer** código errado causa isso. Algumas coisas pra se observar: - Yaml header - se algo estiver errado, vai dar erro ao compilar. Muito cuidado com a identação! - Código nos chunks - teste o Run All Chunks e ver se dá erro em algum específico. Se descobrir, tente verificar o que há de errado no código (pode ser a falta de um parênteses, vírgula, entre outros). <img src="https://media.giphy.com/media/j9GASQ5ocrIRicnmyq/giphy.gif" width="30%" style="display: block; margin: auto;" /> --- ##Desafio - Use o que aprendeu sobre RMarkdown e crie um pequeno relatório das atividades que fizemos hoje! - O [Cheat Sheet do RMarkdown](http://www.rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf) pode te ajudar! --- # Referências - https://r4ds.had.co.nz - https://www.curso-r.com/material/ - https://www.tidyverse.org - http://brunaw.com/slides/rladies-sp/13-08-2018/meetup.html#1 - https://github.com/MaryMS/2018-11-R-Course-FatecZS - https://beatrizmilz.github.io/talk/oficina_intro_r_ufabc_2018/ - [SW Carpentry](https://swcarpentry.github.io/r-novice-gapminder/15-knitr-markdown/index.html) ... A apresentação foi feita em [xaringan](https://github.com/yihui/xaringan), um pacote do R! :) --- class: middle, inverse # Muito obrigada! R-Ladies São Paulo