class: center, middle, inverse, title-slide #
## R-Ladies São Paulo
Visualização de dados com R ### Julho/2020 --- layout: true <div class="my-footer"><span> <a href="https://www.meetup.com/pt-BR/R-Ladies-Sao-Paulo">Meetup</a> | <a href="https://twitter.com/RLadiesSaoPaulo">Twitter</a> | <a href="http://instagram.com/RLadiesSaoPaulo">Instagram</a> | <a href="http://facebook.com/RLadiesSaoPaulo">Facebook</a> | <a href="https://github.com/rladies/meetup-presentations_sao-paulo">GitHub</a> | <a href="http://bit.ly/2020-2-rladies">bit.ly/2020-2-rladies</a> </span></div> --- class: # Pré-requisitos ## `R` e `RStudio` instalados no seu notebook <img src="img/rlogos/rstudio-r.jpg" width="40%" style="display: block; margin: auto;" /> - Instale o R [fazendo o download aqui](https://cran.r-project.org/) e o RStudio [aqui](https://rstudio.com/products/rstudio/download/#download). --- class: # Pré-requisitos ## Pacote ggplot2 e tidyverse instalados ```r install.packages("tidyverse") # Para instalar library(tidyverse) # Para carregar a biblioteca ``` ## Pacote `dados` - Se quiser reproduzir os exercícios com as bases de dados traduzidas para o português, é possível através da instalação do pacote `dados` (atualmente em desenvolvimento): ```r # remotes::install_github("cienciadedatos/dados") library(dados) ``` --- class: # Programação - Apresentação do RStudio - Apresentação do pacote `ggplot2` - Usando o `ggplot2` para visualizar e explorar os dados - Usando o `ggplot2` para criar visualizações de dados para comunicar <div class="figure" style="text-align: center"> <img src="img/horst/ggplot2_exploracao_pt.png" alt="Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a>" width="40%" /><img src="img/horst/ggplot2_obra_prima_pt.png" alt="Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a>" width="40%" /> <p class="caption">Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a></p> </div> --- class: center, middle, inverse # R-Ladies --- class: # Sobre as R-Ladies ## 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-vinde, 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: # Sobre as R-Ladies ## Para quem? Nosso público-alvo são pessoas consideradas minorias de gênero, portanto, mulheres cis ou trans, homens 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 capacitando-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: # Sobre as R-Ladies ## Como o R-Ladies começou? <img src="https://raw.githubusercontent.com/beatrizmilz/IV-SER-RLadies/master/docs/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 à 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: # Sobre as R-Ladies ## Crescimento da R-Ladies no mundo <img src="img/echarts.png" width="100%" style="display: block; margin: auto;" /> Atualizado em: Junho/2020. Fonte: [R Community Explorer](https://benubah.github.io/r-community-explorer/rladies.html) --- class: # Sobre as R-Ladies ## Comunidade da R-Ladies - Capítulos no mundo <img src="img/r-ladies-community.PNG" width="100%" style="display: block; margin: auto;" /> Atualizado em: Junho/2020. Fonte: [R Community Explorer](https://benubah.github.io/r-community-explorer/rladies.html) --- class: # Sobre as R-Ladies ## Código de conduta O R-Ladies dedica-se a proporcionar uma experiência livre de assédio para todas as pessoas participantes, desta forma, não é tolerada nenhuma forma de assédio. [Código de conduta - R-Ladies](https://github.com/rladies/starter-kit/wiki/Code-of-Conduct#portuguese) --- class: # R-Ladies no Brasil Atualizado em: julho de 2020. Fonte: [R Community Explorer](https://benubah.github.io/r-community-explorer/rladies.html)
--- class: center, middle, inverse # Vamos começar? <!-- - instalar R e RStudio --> <!-- - instalar o ggplot2 (e tidyverse) --> <!-- - explicar como o ggplot2 funciona --> <!-- - exemplos ggplot2 --> --- class: center, middle, inverse # RStudio --- class: # RStudio **RStudio** é o IDE (integrated development environment) da Linguagem R, ou seja, o ambiente que utilizamos para editar e executar os códigos em R. Tem quatro áreas, conforme a figura abaixo: <img src="img/intro-rstudio/RStudio_screen.png" width="80%" style="display: block; margin: auto;" /> Fonte: [Curso Introdução ao `R` - Fatec](https://github.com/MaryMS/2018-11-R-Course-FatecZS) --- class: # RStudio <img src="img/intro-rstudio/01-rstudio.png" width="100%" style="display: block; margin: auto;" /> Fonte: [SW Carpentry](http://swcarpentry.github.io/r-novice-gapminder/01-rstudio-intro/index.html) --- class: # RStudio <img src="img/intro-rstudio/01-rstudio-script.png" width="100%" style="display: block; margin: auto;" /> Fonte: [SW Carpentry](http://swcarpentry.github.io/r-novice-gapminder/01-rstudio-intro/index.html) --- class: # RStudio <img src="img/intro-rstudio/haydee1.jpg" width="90%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: # RStudio <img src="img/intro-rstudio/haydee2.jpg" width="90%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: # RStudio <img src="img/intro-rstudio/haydee3.jpg" width="90%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: # RStudio <img src="img/intro-rstudio/haydee4.jpg" width="90%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: # RStudio <img src="img/intro-rstudio/haydee5.jpg" width="90%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: # RStudio <img src="img/intro-rstudio/haydee6.jpg" width="90%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: # RStudio <img src="img/intro-rstudio/haydee7.jpg" width="90%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: # RStudio <img src="img/intro-rstudio/haydee8.jpg" width="90%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: center, middle, inverse # Introdução ao ggplot2 --- class: # O que é o ggplot2? - É um pacote usado para visualização de dados, mantido pela [RStudio](https://rstudio.com/). - É uma implementação dos conceitos e definições sobre o que é um gráfico oriundos do livro _Grammar of Graphics_ de Leland Wilkinson. - O ggplot2 é poderoso, pois não é limitado a um grupo de gráficos pré-determinados. Você pode criar gráficos específicos para atender a sua necessidade ([Wickham](https://ggplot2-book.org/introduction.html)). - [Cheatsheet em português](https://www.rstudio.com/wp-content/uploads/2016/03/ggplot2-cheatsheet-portuguese.pdf) .pull-left[ - Para começar a usar o pacote, precisa carregá-lo: ```r library(ggplot2) # ou library(tidyverse) ``` ] .pull-right[ <img src="img/rlogos/hex-ggplot2.png" width="50%" style="display: block; margin: auto;" /> ] --- class: # Sintaxe - Um gráfico feito com ggplot2 é uma combinação de **camadas**. - Apresentaremos os compontentes de um ggplot usando como referencia o livro [ggplot2: Elegant Graphics for Data Analysis](https://ggplot2-book.org/introduction.html), do Hadley Wickham. - Não precisa utilizar todos os componentes seguintes em seu gráfico, mas é interessante saber que existem. - A função `ggplot()` inicia um gráfico ggplot: .left-code[ ```r ggplot() ``` ] .right-plot[ ![](index_files/figure-html/plot-ggplot-vazio-1.png) ] --- class: # Os gráficos são compostos por... ## dados: - Muitas vezes precisamos organizar os dados antes de utilizar o ggplot. Para isso usamos muito os pacotes `dplyr` e `tidyr`. - Nos próximos exemplos, utilizaremos a base `diamante` do pacote `dados`: ```r knitr::kable(head(dados::diamante, 5)) ``` | preco| quilate|corte |cor |transparencia | profundidade| tabela| x| y| z| |-----:|-------:|:-------|:---|:-------------|------------:|------:|----:|----:|----:| | 326| 0.23|Ideal |E |SI2 | 61.5| 55| 3.95| 3.98| 2.43| | 326| 0.21|Premium |E |SI1 | 59.8| 61| 3.89| 3.84| 2.31| | 327| 0.23|Bom |E |VS1 | 56.9| 65| 4.05| 4.07| 2.31| | 334| 0.29|Premium |I |VS2 | 62.4| 58| 4.20| 4.23| 2.63| | 335| 0.31|Bom |J |SI2 | 63.3| 58| 4.34| 4.35| 2.75| --- class: # Os gráficos são compostos por... ## dados (data): .left-code[ ```r ggplot(data = diamante) ``` ] .right-plot[ ![](index_files/figure-html/plot-ggplot-dados-1.png) ] --- class: # Os gráficos são compostos por... ## Geometrias (layers - geoms) .left-code[ ```r ggplot(data = diamante) + geom_col(aes(x = corte, y = preco)) ``` ] .right-plot[ ![](index_files/figure-html/plot-ggplot-geoms-1.png) ] --- class: # Os gráficos são compostos por... ## Transformações estatísticas (layers - stats) --- class: # Os gráficos são compostos por... ## Escalas (scales): --- class: # Os gráficos são compostos por... ## Sistemas de coordenadas (coord): --- class: # Os gráficos são compostos por... ## Facetas (facets): --- class: # Os gráficos são compostos por... ## Temas (themes): --- class: center, middle, inverse # Visualização de dados --- class: # Visualizar é explorar ## Por que explorar os dados com visualização? O que essa tabela te diz?
--- class: # Visualizar é explorar ## Por que explorar os dados com visualização? E agora? <img src="index_files/figure-html/unnamed-chunk-26-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar ## Por que explorar os dados com visualização? Que tal agora? <img src="index_files/figure-html/unnamed-chunk-27-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar ## Por que explorar os dados com visualização? Ah, mas devem ser números beeeem diferentes... Será?
--- class: # Visualizar é explorar ## Características da visualização para exploração - Usada para entender melhor o conjunto de dados - Normalmente é feita em cima dos dados não agregados - Ajuda a entender conceitos estatísticos - Aparência e comunicação importam menos - A principal audiência é quem rodou o código - Explora o gráfico por um bom tempo normalmente histogramas e gráficos de dispersão --- class: # Visualizar é explorar ## Explorando os dados Dataset: casas para alugar no Brasil a partir do QuintoAndar. ``` ## # A tibble: 10,692 x 13 ## city area rooms bathroom parking_spaces floor animal furniture condo rent ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl> ## 1 São ~ 70 2 1 1 7 acept furnished 2065 3300 ## 2 São ~ 320 4 4 0 20 acept not furn~ 1200 4960 ## 3 Port~ 80 1 1 1 6 acept not furn~ 1000 2800 ## 4 Port~ 51 2 1 0 2 acept not furn~ 270 1112 ## 5 São ~ 25 1 1 0 1 not a~ not furn~ 0 800 ## 6 São ~ 376 3 3 7 NA acept not furn~ 0 8000 ## 7 Rio ~ 72 2 1 0 7 acept not furn~ 740 1900 ## 8 São ~ 213 4 4 4 4 acept not furn~ 2254 3223 ## 9 São ~ 152 2 2 1 3 acept furnished 1000 15000 ## 10 Rio ~ 35 1 1 0 2 acept furnished 590 2300 ## # ... with 10,682 more rows, and 3 more variables: tax <dbl>, ## # fire_insurance <dbl>, total <dbl> ``` Fonte: [https://www.kaggle.com/rubenssjr/brasilian-houses-to-rent](https://www.kaggle.com/rubenssjr/brasilian-houses-to-rent) --- class: # Visualizar é explorar Que tal... uma distribuição dos preços de aluguel? ```r rents %>% ggplot(aes(rent)) + geom_histogram(bins=100) + theme_minimal() ``` <img src="index_files/figure-html/unnamed-chunk-30-1.png" style="display: block; margin: auto;" /> Esse é um **histograma**. --- class: # Visualizar é explorar Como tamanho do imóvel (área) e preço do aluguel se relacionam? ```r rents %>% ggplot(aes(area, rent)) + geom_point() ``` <img src="index_files/figure-html/unnamed-chunk-31-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar Pera... vamos tirar os outliers. ```r rents %>% ggplot(aes(area, rent)) + geom_point() + xlim(0, 2000) + ylim(0, 20000) ``` ``` ## Warning: Removed 7 rows containing missing values (geom_point). ``` <img src="index_files/figure-html/unnamed-chunk-32-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar Qual o padrão que vemos aqui? ```r rents %>% ggplot(aes(area, rent)) + geom_point() + xlim(0, 2000) + ylim(0, 20000) + geom_smooth(method='lm') ``` <img src="index_files/figure-html/unnamed-chunk-33-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar Aplicando cores... ```r rents %>% ggplot(aes(area, rent, color=furniture)) + geom_point() + xlim(0, 1000) + ylim(0, 15000) ``` <img src="index_files/figure-html/unnamed-chunk-34-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar E a cidade, influencia no preço do aluguel? ```r rents %>% ggplot(aes(area, rent, color=city)) + geom_point() + xlim(0, 1000) + ylim(0, 15000) ``` <img src="index_files/figure-html/unnamed-chunk-35-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar E a relação do alugel com o valor do condomínio? ```r rents %>% ggplot(aes(condo, rent)) + geom_point() + scale_x_continuous(labels=function(x) format(x, scientific=F)) ``` <img src="index_files/figure-html/unnamed-chunk-36-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar Quê? Um condomínio que custa R$ 1.117.000 por mês? ```r rents %>% ggplot(aes(condo, rent)) + geom_point() + ylim(0, 10000) + scale_x_continuous(labels=function(x) format(x, scientific=F), limits=c(900000, 1200000)) ``` <img src="index_files/figure-html/unnamed-chunk-37-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é explorar Imagina falar que o valor médio dos condomínios é de <span style="color: red;">R$ 1.174</span>? O valor mediano, de <span style="color: blue;">R$ 560</span>, parece bem mais fiel à realidade, né? ```r rents %>% ggplot(aes(condo)) + xlim(0, 1500) + ylim(0, 1250) + geom_histogram(bins=10) + geom_vline(xintercept=mean(rents$condo), color='red') + geom_vline(xintercept=median(rents$condo), color='blue') ``` <img src="index_files/figure-html/unnamed-chunk-38-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é comunicar ## E para comunicação? O que uma pessoa leiga concluiria desse gráfico? <img src="index_files/figure-html/unnamed-chunk-39-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é comunicar ## E agora? Concluir pela pessoa. / facilitar a conclusao <img src="index_files/figure-html/unnamed-chunk-40-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é comunicar ## E agora? Pode até ser outra conclusão <img src="index_files/figure-html/unnamed-chunk-41-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é comunicar ## E agora? Ou outra... <img src="index_files/figure-html/unnamed-chunk-42-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é comunicar ## E para comunicação? Tudo com um só gráfico. <img src="index_files/figure-html/unnamed-chunk-43-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é comunicar ## O problema... É mais complicado ```r rents %>% group_by(city) %>% summarize(rent_price=median(rent)) %>% mutate(city=fct_reorder(city, -rent_price)) %>% ggplot(aes(city, rent_price, fill=T)) + geom_col() + theme_minimal() + theme(panel.grid.major.x = element_blank(), panel.grid.minor = element_blank()) + guides(fill=F) + scale_fill_manual(values = "#88398a") + geom_text(aes(label=scales::dollar(rent_price, prefix = "R$ ", big.mark = ".")), color="#88398a", vjust=-1) + labs(x="", y="", title="Mediana do preço do alguel em 5 cidades brasileiras", subtitle="*mediana é o valor do meio de um conjunto de dados", caption="Dados extraídos do QuintoAndar") + coord_cartesian(clip="off") ``` <img src="index_files/figure-html/unnamed-chunk-44-1.png" style="display: block; margin: auto;" /> --- class: # Visualizar é comunicar ## O problema... dado bruto ``` ## # A tibble: 10,692 x 13 ## city area rooms bathroom parking_spaces floor animal furniture condo rent ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl> ## 1 São ~ 70 2 1 1 7 acept furnished 2065 3300 ## 2 São ~ 320 4 4 0 20 acept not furn~ 1200 4960 ## 3 Port~ 80 1 1 1 6 acept not furn~ 1000 2800 ## 4 Port~ 51 2 1 0 2 acept not furn~ 270 1112 ## 5 São ~ 25 1 1 0 1 not a~ not furn~ 0 800 ## 6 São ~ 376 3 3 7 NA acept not furn~ 0 8000 ## 7 Rio ~ 72 2 1 0 7 acept not furn~ 740 1900 ## 8 São ~ 213 4 4 4 4 acept not furn~ 2254 3223 ## 9 São ~ 152 2 2 1 3 acept furnished 1000 15000 ## 10 Rio ~ 35 1 1 0 2 acept furnished 590 2300 ## # ... with 10,682 more rows, and 3 more variables: tax <dbl>, ## # fire_insurance <dbl>, total <dbl> ``` --- class: # Visualizar é comunicar ## O problema... dado agregado ```r rents %>% group_by(city) %>% summarize(rent_price=median(rent)) %>% mutate(city=fct_reorder(city, -rent_price)) ``` ``` ## # A tibble: 5 x 2 ## city rent_price ## <fct> <dbl> ## 1 Belo Horizonte 2300 ## 2 Campinas 1500 ## 3 Porto Alegre 1650 ## 4 Rio de Janeiro 2300 ## 5 São Paulo 3400 ``` --- class: # Visualizar é explorar ## Características da visualização para comunicação - Você já tirou conclusões sobre o conjunto de dados - Normalmente é feita em cima de dados agregados - Representa informações complicadas de forma simples *(e não simplista)* - Voltada para além de quem o criou - Público vai olhar para o gráfico por pouco tempo - Menos é mais - knowing the answer is not enough, you have to convince others - exemplo frederica fradapane normalmente gráficos de linha e barra, mas varia bastante --- class: # Visualizar é explorar ## Boas práticas - data to ink (Edward Tufte writes about this concept in his book The Visual Display of Quantitative Information) - gráfico certo - every plotting choice to one unique feature of your data (precisa significar algo) - cuidado com cores!! --- class: # Visualizar é explorar mostrar 5 conceitos e exemplos --- class: # comunicação/visualização falar de codificação e boas práticas - cores - tamanhos - gráficos --- class: # do's and dont's - exemplos --- class: # Referências - [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) --- class: # Como saber mais? - Website RLadies Global: [https://rladies.org/](https://rladies.org/) - Twitter: [@RLadiesGlobal](https://twitter.com/rladiesglobal), [@RLadiesSaoPaulo](https://twitter.com/RLadiesSaoPaulo) - Instagram: [@RLadiesSaoPaulo](http://instagram.com/RLadiesSaoPaulo) - Facebook: [@RLadiesSaoPaulo](http://facebook.com/RLadiesSaoPaulo) - MeetUp: [https://www.meetup.com/pt-BR/R-Ladies-Sao-Paulo](https://www.meetup.com/pt-BR/R-Ladies-Sao-Paulo) - Github: [https://github.com/rladies/meetup-presentations_sao-paulo](https://github.com/rladies/meetup-presentations_sao-paulo) - R-Ladies LATAM Blog (Latin America) - Em breve! - **[Capítulos da R-Ladies no Brasil, e eventos online](https://github.com/R-Ladies-Sao-Paulo/RLadies-Brasil)** ### Não tem capítulo na sua cidade e quer iniciar um? <center> Saiba como em <a href="https://rladies.org/about-us/help/"> R-Ladies - How do get involved </a> </center> - Apresentação feita com o pacote [xaringan](https://github.com/yihui/xaringan), e o tema `metropolis` modificado por [Bea Milz](https://beatrizmilz.com).