class: center, middle, inverse, title-slide #
## R-Ladies São Paulo
Curso Básico de R ### 08/02/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;" /> ## <center><b>OU</b></center> ## - `RStudio` Cloud - Através do link: [https://rstudio.cloud/project/876850](https://rstudio.cloud/project/876850) <img src="img/rstudiocloud.PNG" width="40%" style="display: block; margin: auto;" /> --- class: # Usando a `RStudio` Cloud - Exemplo de como acessar o projeto (GIF): <img src="img/gif-rstudiocloud.gif" width="100%" style="display: block; margin: auto;" /> - Importante: Quando aparecer na sua tela, clique em **"Save a permanent copy"**. --- class: # Programação ## Manhã - O que é um algoritmo? - O que é o R? - Introdução ao RStudio - Boas Práticas de Programação - R Básico --- class: # Programação ## Tarde - Introdução ao Pacote Tidyverse - O Operador Pipe - Visualização de Data Frames no RStudio - Introdução ao Pacote dplyr - Para aprender mais --- class: center # Apoio <BR> <div class="figure" style="text-align: center"> <img src="img/rlogos/Insper-positivo.png" alt="<center><b>Insper</center></b>" width="30%" /> <p class="caption"><center><b>Insper</center></b></p> </div> <BR> <div class="figure" style="text-align: center"> <img src="img/rlogos/RCONSORTIUM.png" alt="<center><b>RConsortium</center></b>" width="20%" /> <p class="caption"><center><b>RConsortium</center></b></p> </div> --- class: # Apoio <BR> <div class="figure" style="text-align: center"> <img src="img/rlogos/cursor1-41.png" alt="<center><b>Curso-R - www.curso-r.com</center></b>" width="30%" /> <p class="caption"><center><b>Curso-R - www.curso-r.com</center></b></p> </div> - Ao final do dia: sorteio de uma vaga no curso ["R para Ciência de Dados I"](https://www.curso-r.com/cursos/r4ds-1/). - **Bolsas de diversidade:** Para inscrição no processo de seleção, é preciso preencher o formulário. - **Workshops:** regressão linear, webscraping I , webscraping II, deploy, e XGBOOST http://bit.ly/curso-r-bolsa-w - **Cursos:** R para Ciência de Dados I, R para Ciência de Dados II, Introdução a Machine Learning com R, Dashboards com R e Deep learning com R <br> http://bit.ly/curso-r-bolsa-c --- class: ## 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: ## 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 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: ## 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: ## Crescimento da R-Ladies no mundo <img src="img/echarts.png" width="70%" style="display: block; margin: auto;" /> Atualizado em: Janeiro/2020. Fonte: [R Community Explorer](https://benubah.github.io/r-community-explorer/rladies.html) --- class: ## Comunidade da R-Ladies - Capítulos no mundo <img src="img/r-ladies-community.PNG" width="100%" style="display: block; margin: auto;" /> Atualizado em: Janeiro/2020. Fonte: [R Community Explorer](https://benubah.github.io/r-community-explorer/rladies.html) --- class: ## 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: fevereiro de 2020. Fonte: [R Community Explorer](https://benubah.github.io/r-community-explorer/rladies.html)
--- class: # Cronograma da manhã - O que é um algoritmo? - O que é o R? - Introdução ao RStudio - Boas Práticas de Programação - Fundamentos de R --- class: # O que é um algoritmo? Um algoritmo é uma sequência finita de instruções. **Exemplo** * Receita de bolo <img src="img/receita-bolo.jpg" width="90%" style="display: block; margin: auto;" /> --- class: # O que é um algoritmo? Um algoritmo é uma sequência finita de instruções. **Mais exemplos** * [Construir uma estante de livros](https://pt.wikihow.com/Construir-uma-Estante-de-Livros) <img src="img/estante.jpg" width="70%" style="display: block; margin: auto;" /> --- class: # O que é um algoritmo? Um algoritmo é uma sequência finita de instruções. **Mais exemplos** * [Fazer um drone caseiro com arduino](https://www.palpitedigital.com/como-fazer-drone-caseiro-arduino/) <img src="img/drone-arduino-e1469058606329-600.webp" width="50%" style="display: block; margin: auto;" /> --- class: # O primeiro algoritmo Foi desenvolvido no século XIX pela matemática e escritora inglesa Ada Lovelace. <img src="img/ada_lovelace.jpeg" width="40%" style="display: block; margin: auto;" /> --- class: # O que é programar? Programar um computador é escrever instruções em qualquer **linguagem** que o computador entenda. Essa sequência de instruções pode ser executada por um humano ou um computador. Então, **programação é a arte de fazer com que o computador execute uma sequência de instruções definidas.** ```r print('Ola!') ``` ``` ## [1] "Ola!" ``` --- class: # O que é o R? > "R é um ambiente de software livre para computação estatística e gráficos". (https://www.r-project.org/) **R** é um ambiente computacional e uma linguagem de programação que vem progressivamente se especializando em manipulação, análise e visualização gráfica de dados. Na atualidade é considerado o melhor ambiente computacional para essa finalidade. O ambiente está disponível para diferentes sistemas operacionais: Unix/Linux, Mac e Windows. * Baseada na linguagem estatística S * 1ª versão de 1995 por Ross Ihaka e Robert Gentleman da Universidade de Auckland <img src="img/Rlogo.png" width="20%" style="display: block; margin: auto;" /> --- class: # O que é o R? * Berço na Estatística * Muito usado por cientistas de dados, estatísticos e pesquisadores. * Mantida pela [R Development Core Team](https://cran.r-project.org/) * Pode ser usada para diversos fins. --- class: # Por que usar o R? - É uma linguagem de programação para análise de dados - É open source - É uma linguagem interpretada - Possui uma comunidade ativa de desenvolvedores - É flexível, permitindo desenvolver funções e pacotes para facilitar o trabalho - Está disponível em diferentes plataformas: Windows, Linux e Mac - É reprodutível! - É compartilhável! --- class: # O que é possível fazer com R? * Análise de dados - Estatística, modelagem, etc. * Visualização de dados * Apresentações * Relatórios dinâmicos * Escrever livros * Mineração de dados * Muito mais ... --- class: # Exemplo **Gráfico elaborado com `R` - Proposta Orçamentária PMSP 2019 - 10 maiores orçamentos** <img src="img/PMSP-chunk-5-1.png" width="70%" style="display: block; margin: auto;" /> Fonte: [Explorando o orçamento da Prefeitura Municipal de São Paulo](https://beatrizmilz.github.io/DadosExecucaoOrcamentariaPMSP/proposta2019.html) --- class: # Exemplo **Gráfico elaborado com `R` - Execução Orçamentária PMSP na função Gestão Ambiental** <img src="img/PMSP-chunk-5-2.png" width="70%" style="display: block; margin: auto;" /> Fonte: [Explorando o orçamento da Prefeitura Municipal de São Paulo](https://beatrizmilz.github.io/DadosExecucaoOrcamentariaPMSP/gestaoambiental.html) --- class: # Exemplo **Gráfico elaborado com `R` - Material Particulado 10 - Dados CETESB - RPollution** <img src="img/PMSP-chunk-6-1.png" width="70%" style="display: block; margin: auto;" /> Fonte: [Rpollution](https://www.rpollution.com/) --- class: # Exemplo **Frequência de Palavras - TESE Doutorado PROCAM/USP Ana Lucia Spinola** <img src="img/ana-lu-freq.png" width="70%" style="display: block; margin: auto;" /> Fonte: [Ana Lu Spinola](https://analuspi.github.io/Text-Mining/) --- class: # Exemplo **BIGRAM - TESE Doutorado PROCAM/USP Ana Lucia Spinola** <img src="img/bigram-ana-lu.png" width="70%" style="display: block; margin: auto;" /> Fonte: [Ana Lu Spinola](https://analuspi.github.io/Text-Mining/) --- class: center, middle ## Introdução ao 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/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/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/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/haydee1.jpg" width="100%" 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/haydee2.jpg" width="100%" 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/haydee3.jpg" width="100%" 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/haydee4.jpg" width="100%" 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/haydee5.jpg" width="100%" 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/haydee6.jpg" width="100%" 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/haydee7.jpg" width="100%" 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/haydee8.jpg" width="100%" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- class: # Help! - Pedir ajuda: **help**(nome_da_funcao) ou **?**nome_da_funcao. ```r help(sum) ?sum ``` - Se a dúvida permanecer, procure no [Stack OverFlow](https://stackoverflow.com/) ou Google. - E se ainda tiver dúvidas, pergunte para a comunidade (há grupos no Telegram e outras redes sociais). --- class: center, middle ## Boas práticas iniciais para organizar seu projeto Fonte: [SW Carpentry](http://swcarpentry.github.io/r-novice-gapminder/02-project-intro/index.html) --- class: # Boas práticas - **Tratar dados como somente leitura:** - Esse é provavelmente o objetivo mais importante da configuração de um projeto. - Os dados geralmente consomem tempo e/ou são caros para coletar. - Trabalhar com eles interativamente (por exemplo, no Excel), onde eles podem ser modificados, significa que você nunca tem certeza de onde os dados vieram, ou como eles foram modificados desde a coleta. - Portanto, é uma boa ideia tratar seus dados como “somente leitura”. - Nunca sobrescrever os seus dados originais! Isso vale para a base e para variáveis. - Ex: ter uma pasta "data_raw" (dados brutos), e "data" (dados já tratados). - Exemplo dos dados de orçamento da prefeitura: com código, fazer download dos dados brutos em uma pasta "data_raw". Tratar os dados, e a base "limpa" deve ser exportada para a pasta "data". Tudo isso deve ser realizado através de código! --- class: # Boas práticas - **Qualquer coisa gerada pelos seus scripts deve ser tratada como descartável:** - Não salvar o workspace ao fechar! - Ideal é que todos os seus resultados sejam possíveis de ser reproduzidos através do script. --- class: # Boas práticas - **Os nomes das suas variáveis devem fazer sentido:** Ao nomear suas variáveis, dê nomes que tenham significado para seres humanos. Pense que o código que você escreve hoje deve ser claro para você daqui 1 ano e também deve ser claro para algum(a) colega seu(ua). - **Exemplo positivo**: ```r lista_de_mercado <- c("chocolate", "pao", "café") ``` - **Exemplo negativo**: ```r lista <- c("chocolate", "pao", "café") ``` --- class: # Boas práticas - **Comente bem o seu código:** É possível fazer comentários usando o símbolo '#'. É sempre bom explicar o que uma variável armazena, o que uma função faz, porque alguns parâmetros são passados para uma determinada função, qual é o objetivo de um trecho de código, etc. ```r # Esse é um exemplo. O # é útil para escrever um comentário! help(sum) # a função help é útil para pesquisar a documentação ``` - Atalho útil para comentário: `Ctrl + Shift + C` <img src="img/gif-atalho-comentario.gif" width="100%" style="display: block; margin: auto;" /> --- class: # Boas práticas - **Evite linhas de código muito longas:** Usar linhas de código mais curtas ajuda na leitura do código. - **Exemplo positivo**: fica mais fácil de ler! ```r df_titanic %>% filter(sexo == "masculino" & sobreviveu == "sim") %>% arrange(classe) ``` - **Exemplo para evitar:** fica mais difícil de ler ```r df_titanic %>% filter(sexo == "masculino" & sobreviveu == "sim") %>% arrange(classe) ``` - Atalho útil para identação: `Ctrl + Shift + A` <img src="img/gif-atalho-identacao.gif" width="100%" style="display: block; margin: auto;" /> Fonte: [SW Carpentry](http://swcarpentry.github.io/r-novice-gapminder/02-project-intro/index.html) --- class: # Boas práticas - **Escreva um código organizado:** Por exemplo, adote um padrão no uso de minúsculas e maiúsculas, uma lógica única na organização de pastas e arquivos, pode ser adotada uma breve descrição (como comentário) indicando o que um determinado script faz. - Exemplo: use snake_case (palavras em minúsculas, separados por um underscore) em todas as variáveis e funções do seu projeto. - Dica útil: função `clean_names()` do pacote `janitor`. ```r names(iris) ``` ``` ## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species" ``` ```r iris_clean <- janitor::clean_names(iris) names(iris_clean) ``` ``` ## [1] "sepal_length" "sepal_width" "petal_length" "petal_width" "species" ``` --- class: # Boas práticas - **Carregue todos os pacotes que irá usar sempre no início do arquivo:** Quando alguém abrir o seu código será fácil identificar quais são os pacotes que devem ser instalados e quais dependências podem existir. - Exemplo: ```r # Pacotes utilizados no projeto library(dplyr) # utilizada para manipulação dos dados library(ggplot2) # utilizada para criar gráficos bonitos library(magrittr) # possibilita usar o pipe %>% ``` --- class: # Boas práticas - **Evite referência de caminho que considere seu computador ou usuário:** Faça referência ao caminho do projeto. - **Exemplo positivo**: ```r df_titanic <- read_csv("data/titanic.csv") ``` - **Exemplo negativo**: ```r df_titanic <- read_csv("C:\Users\beatr\Documents\GitHub\2020-R-Ladies-SP-Basico\data/titanic.csv") ``` --- class: # Antes de começar: o projeto - Ao realizar um projeto, sempre organizar os arquivos em uma **pasta** que conterá todos os arquivos de seu projeto. - Nomear novos arquivos com **nomes descritivos** <img src="img/diretorio-projeto.PNG" width="50%" style="display: block; margin: auto;" /> --- class: # Projetos - Um bom layout de projeto facilitará sua vida: - ajudará a garantir a integridade de seus dados; - facilita o compartilhamento de seu código com outra pessoa (colega de laboratório, colaborador ou /orientador); - ele permite que você facilmente faça o upload do seu código com a submissão do seu manuscrito; torna-se mais fácil recuperar o projeto depois de um intervalo. --- class: # Criando um projeto - Clique na opção **“File”** do menu, e então em **“New Project”**. -> Clique em **“New Directory”**. -> Clique em **“New Project”**. -> 1. Escreva o nome do diretório (pasta) onde deseja manter seu projeto, ex. “my_project”. Clique no botão **“Create Project”**. - OBS: Crie um novo script para escrever seus códigos! **File -> New File -> RScript ** <img src="img/gif-criar-projeto.gif" width="90%" style="display: block; margin: auto;" /> --- class: # Instruções - Abrir o `RStudio` no seu computador (ou o RStudio Cloud caso esteja sem RStudio instalado) - Crie um novo projeto para utilizar durante este curso (caso esteja usando o RStudio Cloud, automaticamente já estará utilizando um projeto) - Crie um novo `R` script (file -> new file -> `R` script) --- class: # E lá vamos nós! <center><img src="img/S5e27_T.V._typing.gif"></center> --- class: center, middle ## `R` Básico --- class: # `R` como calculadora - O `R` permite realizar muitas operações aritméticas em seu console! ```r 2 + 5 # adição ``` ``` ## [1] 7 ``` ```r 9 - 4 # subtração ``` ``` ## [1] 5 ``` ```r 5 * 2 # multiplicação ``` ``` ## [1] 10 ``` ```r 7 / 5 # divisão ``` ``` ## [1] 1.4 ``` - `CTRL + ENTER`: executa a linha selecionada no script. --- class: # `R` como calculadora ```r 9 %% 4 # resto da divisão de 9 por 4 ``` ``` ## [1] 1 ``` ```r 7 %/% 4 # parte inteira da divisão de 7 por 4 ``` ``` ## [1] 1 ``` ```r 8 ^ 2 # potenciação ``` ``` ## [1] 64 ``` ```r sqrt(1024) # radiciação ``` ``` ## [1] 32 ``` A ordem matemática das operações também vale no R. --- class: # Funções matemáticas ```r sin(1) # funções trigonométricas ``` ``` ## [1] 0.841471 ``` ```r log(1) # logaritmo natural (base e) ``` ``` ## [1] 0 ``` ```r log10(10) # logaritmo na base 10 ``` ``` ## [1] 1 ``` ```r exp(0.5) # e^(1/2) ``` ``` ## [1] 1.648721 ``` Fonte: [SW Carpentry](http://swcarpentry.github.io/r-novice-gapminder/01-rstudio-intro/index.html) --- class: # Desafio 1 Haydée quer contabilizar quantas pessoas participaram dos meetups das RLadies São Paulo em 2019. Ela contabilizou o número de pessoas que participaram em cada evento: 1. Fevereiro, Outubro e Novembro - 60 pessoas cada 1. Abril e Agosto - 30 pessoas cada 1. Março, Maio e Julho - 20 pessoas cada 1. Junho, Setembro e Dezembro - 45 pessoas cada Quantas pessoas participaram dos meetups das RLadies em 2019? --- class: # Desafio 1 - Resposta Haydée quer contabilizar quantas pessoas participaram dos meetups das RLadies São Paulo em 2019. Ela contabilizou o número de pessoas que participaram em cada evento: 1. Fevereiro, Outubro e Novembro - 60 pessoas cada 1. Abril e Agosto - 30 pessoas cada 1. Março, Maio e Julho - 20 pessoas cada 1. Junho, Setembro e Dezembro - 45 pessoas cada Quantas pessoas participaram dos meetups das RLadies em 2019? ```r 3*60 + 2*30 + 3*20 + 3*45 ``` ``` ## [1] 435 ``` --- class: # O que é um objeto? - Ao se desenvolver um projeto, você irá trabalhar com diversos tipos de arquivos, além de informações que serão repetidas ao longo do script. - Para reutilizar essas informações ao longo do script utilizamos o que chamamos de **objeto** - Um objeto retém e representa um valor ou expressão <img src="img/ran.jpg" width="40%" style="display: block; margin: auto;" /> --- class: # Atribuindo valor a um objeto no R - Para atribuir um valor a um objeto no R, utilizamos o operador **<-** <br></br> - O atalho ALT + **-** gera o operador **<-** <br></br> - Todas as declarações em `R` onde são criados objetos atribuindo-se valores a elas, têm a mesma forma: <center><b>nome_do_objeto <- valor<b></center> - Atalho: `ALT` + `-`: cria o `<-` sinal de atribuição. --- class: # Exemplos ## Objetos e atribuição de valores ```r nome_empregado <- "Tom Cruise de Souza e Silva" nome_empregado ``` ``` ## [1] "Tom Cruise de Souza e Silva" ``` ```r horas_trabalhadas <- 160 horas_trabalhadas ``` ``` ## [1] 160 ``` --- class: # Exemplos ## Objetos e atribuição de valores ```r salario <- 3984.23 salario ``` ``` ## [1] 3984.23 ``` ```r ativo <- TRUE ativo ``` ``` ## [1] TRUE ``` --- class: # Nomes de objetos - Os nomes devem começar com uma letra. Podem conter letras, números, _ e .<br></br> - Recomendação do autor do livro `R` For Data Science: **usar_snake_case**, ou seja, palavras escritas em minúsculo separadas pelo underscore (_).<br></br> - O `R` é *case sensitive*, isto é, faz a diferenciação entre as letras minúsculas e maiúsculas. Portanto, um objeto chamado *teste* é diferente de uma outro objeto chamada *Teste*. --- class: # Desafio 2 1) Crie objetos para os casos abaixo: - Restaurante com valor Rodízio Japonês - Conta a pagar com valor 40,50 - Dinheiro na carteira com valor 60 2) Quanto receberei de troco, se eu pagar a conta do restaurante com o dinheiro que tenho na carteira? Use os objetos criados anteriormente. --- class: # Desafio 2 - Resposta 1) Crie objetos para os casos abaixo: ```r restaurante <- "Rodizio Japones" restaurante ``` ``` ## [1] "Rodizio Japones" ``` ```r conta <- 40.50 conta ``` ``` ## [1] 40.5 ``` ```r dinheiro <- 60 dinheiro ``` ``` ## [1] 60 ``` --- class: # Desafio 2 - Resposta 2) Quanto receberei de troco, se eu pagar a conta do restaurante com o dinheiro que tenho na carteira? Use os objetos criados anteriormente. ```r dinheiro - conta ``` ``` ## [1] 19.5 ``` --- class: # Classes Básicas ou Atômicas do R São os tipos básicos de dados que podem ser representados na linguagem R. É neles que guardamos as informações que necessitamos para um algoritmo. - **Integer**: números inteiros <br></br> - **Numeric**: números racionais <br></br> - **Complex**: números complexos (raramente usados para Análise de Dados) <br></br> - **Logical**: TRUE, FALSE ou NA <br></br> - **Factor**: variavéis categóricas <br></br> - **Character**: texto <br></br> --- class: # Exemplos: integer ```r 10L # Um número inteiro pode ser representado acompanhado de um L ``` ``` ## [1] 10 ``` ```r 2019L ``` ``` ## [1] 2019 ``` --- class: # Exemplos: numeric ```r 10 ``` ``` ## [1] 10 ``` ```r 2019 ``` ``` ## [1] 2019 ``` ```r 5.44 ``` ``` ## [1] 5.44 ``` --- class: # Exemplos: complex ```r 4 + 9i ``` ``` ## [1] 4+9i ``` --- class: # Exemplos: logical ```r TRUE ``` ``` ## [1] TRUE ``` ```r FALSE ``` ``` ## [1] FALSE ``` --- class: # Exemplos: factor ```r escolaridade <- c("Médio", "Superior", "Fundamental", "Fundamental", "Médio") fator <- as.factor(escolaridade) fator ``` ``` ## [1] Médio Superior Fundamental Fundamental Médio ## Levels: Fundamental Médio Superior ``` A função as.factor() criou um objeto do tipo factor. Na linha *Levels* aparecem os rótulos do fator. Essa classe de dados pode ser trabalhada com o pacote **forcats**. --- class: # Exemplos: character ```r "escola" ``` ``` ## [1] "escola" ``` ```r "2019" ``` ``` ## [1] "2019" ``` ```r "I love pinschers." ``` ``` ## [1] "I love pinschers." ``` --- class: # Operações simples com strings ```r animal <- "Camaleao" #letras maiúsculas toupper(animal) ``` ``` ## [1] "CAMALEAO" ``` ```r #letras minúsculas tolower(animal) ``` ``` ## [1] "camaleao" ``` ```r #número de caracteres nchar(animal) ``` ``` ## [1] 8 ``` --- class: # Função class A função **class** mostra a classe de um objeto. ```r nome_filme <- "Bohemian Rhapsody" class(nome_filme) ``` ``` ## [1] "character" ``` ```r ano_inteiro <- 2018L class(ano_inteiro) ``` ``` ## [1] "integer" ``` ```r ano <- 2018 class(ano) ``` ``` ## [1] "numeric" ``` --- class: # Função class ```r motor <- 1.5 class(motor) ``` ``` ## [1] "numeric" ``` ```r passou_enem <- TRUE class(passou_enem) ``` ``` ## [1] "logical" ``` --- class: # Conversão de classes Podemos forçar um objeto a ser de uma classe específica com as funções: - as.character() <br></br> - as.numeric() <br></br> - as.integer() <br></br> - as.logical() <br></br> --- class: # Conversão de classes ** Exemplos de conversão de classes ** ```r vetor <- 0:9 vetor ``` ``` ## [1] 0 1 2 3 4 5 6 7 8 9 ``` ```r class(vetor) ``` ``` ## [1] "integer" ``` ```r vetor_numeric <- as.numeric(vetor) vetor_numeric ``` ``` ## [1] 0 1 2 3 4 5 6 7 8 9 ``` ```r class(vetor_numeric) ``` ``` ## [1] "numeric" ``` --- class: # Conversão de classes ** Exemplos de conversão de classes ** ```r vetor_logical <- as.logical(vetor) vetor_logical ``` ``` ## [1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE ``` ```r class(vetor_logical) ``` ``` ## [1] "logical" ``` --- class: # Desafio 3 Converta o objeto Conta criado anteriormente para character. Agora cheque sua classe. O que acontece com seu valor? Como explica o que aconteceu? --- class: # Desafio 3 - Resposta Converta o objeto Conta criado anteriormente para character. Agora cheque sua classe. O que acontece com seu valor? ```r conta ``` ``` ## [1] 40.5 ``` ```r as.character(conta) ``` ``` ## [1] "40.5" ``` --- class: # Desafio 3 - Resposta Converta o objeto Conta criado anteriormente para character. Agora cheque sua classe. O que acontece com seu valor? ```r conta ``` ``` ## [1] 40.5 ``` ```r class(conta) ``` ``` ## [1] "numeric" ``` ```r as.character(conta) ``` ``` ## [1] "40.5" ``` ```r conta <- as.character(conta) ``` ```r class(conta) ``` ``` ## [1] "character" ``` --- class: # Tipos de objetos Os tipos dos objetos são definidos a partir dos valores armazenados neles: - **Vector**: armazena elementos de mesma classe. <br></br> - **Matrix**: vetores de duas dimensões que armazenam elementos de mesma classe. <br></br> - **List**: tipo especial de vetor que aceita elementos de classes diferentes. <br></br> - **Data.frame**: são tabelas de dados com linhas e colunas, como uma tabela do Excel. Como são listas, essas colunas podem ser de classes diferentes. --- class: # Exemplo: Vector A função c() cria um vetor. ```r semestre1 <- c("janeiro", "fevereiro", "março", "abril", "maio") notas_alunos <- c(5, 6.5, 10, 0.5, 2.75) ``` É possível realizar operações com vetores. ```r vetor1 <- 1:5 vetor1 / 5 # objeto vetor1 dividido por 5 ``` ``` ## [1] 0.2 0.4 0.6 0.8 1.0 ``` ```r vetor2 <- 6:10 vetor1 * vetor2 ``` ``` ## [1] 6 14 24 36 50 ``` --- class: # Exemplo: Matrix A função matrix() cria uma matriz. ```r primeira_matriz <- matrix(1:8, nrow = 2, ncol = 4) primeira_matriz ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] 1 3 5 7 ## [2,] 2 4 6 8 ``` A função dim() retorna a dimensão do objeto (linha e coluna). ```r dim(primeira_matriz) ``` ``` ## [1] 2 4 ``` --- class: # Exemplo: List A função list() cria uma lista. ```r wizards <- list("Harry Potter", 18, TRUE, c("Hermione Granger", "Rony Weasley")) class(wizards) ``` ``` ## [1] "list" ``` A função is.list() verifica se o objeto é ou não uma lista. ```r harry_friends <- c("Hermione Granger", "Rony Weasley") class(harry_friends) ``` ``` ## [1] "character" ``` ```r is.list(harry_friends) ``` ``` ## [1] FALSE ``` --- class: # Exemplo: Data.frame A função head() mostra as primeiras 6 linhas do dataframe. ```r data(iris) df <- iris head(df) ``` ``` ## Sepal.Length Sepal.Width Petal.Length Petal.Width Species ## 1 5.1 3.5 1.4 0.2 setosa ## 2 4.9 3.0 1.4 0.2 setosa ## 3 4.7 3.2 1.3 0.2 setosa ## 4 4.6 3.1 1.5 0.2 setosa ## 5 5.0 3.6 1.4 0.2 setosa ## 6 5.4 3.9 1.7 0.4 setosa ``` --- class: # Funções úteis ##Para trabalhar com dataframes - `tail()`: mostra as últimas 6 linhas. - `names()`: mostra os nomes das colunas. - `View()`: mostra o dataframe. --- class: # Desafio 4 1) Quantas observações tem o data.frame iris?<br></br> 2) Quais são as variáveis do data.frame iris?<br></br> 3) Visualize o dataframe iris. --- class: # Desafio 4 - Resposta 1) Quantas observações tem o data.frame iris?<br></br> ```r tail(df) ``` ``` ## Sepal.Length Sepal.Width Petal.Length Petal.Width Species ## 145 6.7 3.3 5.7 2.5 virginica ## 146 6.7 3.0 5.2 2.3 virginica ## 147 6.3 2.5 5.0 1.9 virginica ## 148 6.5 3.0 5.2 2.0 virginica ## 149 6.2 3.4 5.4 2.3 virginica ## 150 5.9 3.0 5.1 1.8 virginica ``` 2) Quais são as variáveis do data.frame iris? ```r names(df) ``` ``` ## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species" ``` --- class: # Desafio 4 - Resposta 3) Visualize o dataframe iris. ```r View(df) ``` <img src="img/View_iris.png" width="75%" style="display: block; margin: auto;" /> --- class: # Operadores Relacionais - Igual a: **==** <br></br> - Diferente de: **!=** <br></br> - Maior que: **>** <br></br> - Maior ou igual: **>=** <br></br> - Menor que: **<** <br></br> - Menor ou igual: **<=** <br></br> --- class: # Exemplos de Operadores Relacionais Igual a: **==** ```r TRUE == TRUE ``` ``` ## [1] TRUE ``` ```r TRUE == FALSE ``` ``` ## [1] FALSE ``` --- class: # Exemplos de Operadores Relacionais Diferente de **!=** ```r TRUE != TRUE ``` ``` ## [1] FALSE ``` ```r TRUE != FALSE ``` ``` ## [1] TRUE ``` --- class: # Exemplos de Operadores Relacionais Menor de: **<** ```r 3 < 5 ``` ``` ## [1] TRUE ``` Maior ou igual de: **>=** ```r 10 >= 10 ``` ``` ## [1] TRUE ``` Maior de: **>=** ```r 10 > 10 ``` ``` ## [1] FALSE ``` --- class: # Operadores Lógicos - E: **&** <br></br> Será verdadeiro se os dois forem TRUE ```r x <- 5 x >= 3 & x <=7 ``` ``` ## [1] TRUE ``` ```r y <- 2 y >= 3 & y <= 7 ``` ``` ## [1] FALSE ``` --- class: # Operadores Lógicos - OU: **|**<br></br> Será verdadeiro se um dos dois forem TRUE ```r y <- 2 y >= 3 | y <=7 ``` ``` ## [1] TRUE ``` ```r y <- 1 y >= 3 | y == 0 ``` ``` ## [1] FALSE ``` --- class: # Operadores Lógicos - Negação: **!** <br></br> ```r (!x < 4) ``` ``` ## [1] TRUE ``` --- class: # NA Uma característica importante do R que pode dificultar a comparação são os valores ausentes ou **NAs** (não disponíveis). **NA** representa um valor desconhecido. --- class: # NA Quase qualquer operação envolvendo um valor desconhecido também será desconhecido: ```r NA > 10 ``` ``` ## [1] NA ``` ```r 10 == NA ``` ``` ## [1] NA ``` ```r NA + 10 ``` ``` ## [1] NA ``` ```r NA / 2 ``` ``` ## [1] NA ``` --- class: # NA E o mais confuso: ```r NA == NA ``` ``` ## [1] NA ``` <br></br> **is.na()** é a função que testa se um objeto é NA. --- class: # Índices - Indicam a posição do elemento no objeto.<br><br> - Inicia-se a contagem do índice pela posição do primeiro elemento do objeto, ou seja, pelo número 1.<br><br> *Vetores*: característica linear ```r v <- c(10:25) v[2] ``` ``` ## [1] 11 ``` *Data Frames*: o primeiro número indica a linha (observação) e o segundo a coluna (variável). ```r df[145, 2] ``` ``` ## [1] 3.3 ``` --- class: # Desafio 5 1) No data.frame iris, testar se o Petal.Lenght da 5ª observação é igual ao da 6ª observação. E se o Petal.Lenght da 5ª observação é igual ao da 7ª observação.<br></br> 2) A 10ª observação tem Petal.Width maior ou menor que a seguinte (11ª)? E qual é a espécie da menor? --- class: # Desafio 5 - Resposta 1) No data.frame iris, testar se o Petal.Lenght da 5ª observação é igual ao da 6ª observação. E se o Petal.Lenght da 5ª observação é igual ao da 7ª observação. ```r df[5,3] == df[6,3] ``` ``` ## [1] FALSE ``` ```r df[5,3] == df[7,3] ``` ``` ## [1] TRUE ``` --- class: # Desafio 5 - Resposta 2) A 10ª observação tem Petal.Width maior ou menor que a seguinte (11a)? E qual é a espécie da menor? ```r df[10,4] < df[11,4] # Petal.Width da 10ª linha é menor que da 11ª ``` ``` ## [1] TRUE ``` ```r df[10,5] ``` ``` ## [1] setosa ## Levels: setosa versicolor virginica ``` --- class: # Pacotes no R **Pacotes** são coleções de funções, dados e documentação que estendem as capacidades do `R` básico. Eles precisam ser instalados e carregados. <center><img src="img/icon-packages.jpg" style="width: 45%"></center> --- class: ## Instalação de Pacotes: - Via CRAN: install.packages("nome-do-pacote"). ```r install.packages("tidyverse") ``` - Via Github: devtools::install_github("nome-do-repo/nome-do-pacote"). ```r devtools::install_github("tidyverse/dplyr") ``` ## Carregar pacotes: - library(nome-do-pacote) ```r library(tidyverse) ``` --- class: # Dicas sobre Pacotes 1. Você só precisa instalar o pacote uma vez, mas precisa carregá-lo sempre que começar uma nova sessão; 2. Para instalar o pacote use as aspas; 3. Para carregar o pacote, **não** utilize as aspas. --- class: # Pacotes - CRAN Task View Relação de pacotes encontrados no CRAN por áreas de interesse. - [CRAN Task View](https://cran.r-project.org/web/views/) <img src="img/cran_task_view.png" width="100%" style="display: block; margin: auto;" /> --- class: # Vamos nos preparar para a tarde? Para quem está usando o RStudio instalado no computador: - No seu projeto, crie uma pasta chamada `data` - Fazer o download deste arquivo: [`titanic`](https://raw.githubusercontent.com/beatrizmilz/2020-R-Ladies-SP-Basico/master/docs/data/titanic.csv) ou em [bit.ly/titanic-rladies](http://bit.ly/titanic-rladies) - Salve este arquivo na pasta `/data` <br></br> - Instale o pacote `tidyverse`: ```r install.packages("tidyverse") ``` - OBS: Caso esteja usando RStudio Cloud, não é necessário realizar estes passos, pois já foram feitos anteriormente. --- class: # Cronograma da tarde - Introdução ao Pacote Tidyverse - O Operador Pipe - Visualização de Data Frames no RStudio - Introdução ao Pacote dplyr - Para aprender mais --- class: center, middle ## Tidyverse --- class: # 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. <img src="img/Tidyverse_packages.png" width="90%" style="display: block; margin: auto;" /> --- class: # 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 --- class: # O operador %>%, o Pipe Imagine uma receita que tenha as instruções: junte os ingredientes, misture e leve ao forno. Na forma usual do R, essas instruções provavelmente seriam assim: **forno(misture(junte(ingredientes)))** Dessa forma temos que pensar “de dentro para fora”. O primeiro comando que lemos é forno, sendo que essa é a última operação que será realizada. Com o operador pipe seria algo assim: **ingredientes %>% junte %>% misture %>% forno** É mais intuitivo! --- class: # O operador %>%, o Pipe Para ficar mais fácil: pense no Pipe %>% como um operador que efetua as operações à direita nos valores que estão à esquerda. Ou ainda, o operador %>% passa o que está à esquerda como argumento para a operação da direita. **Atalho**: CTRL + SHIFT + M --- class: # Dataframes - Tidy data <img src="img/tidy-1.png" width="100%" style="display: block; margin: auto;" /> Fonte: [Data Science with `R` by Garrett Grolemund](http://garrettgman.github.io/tidying/) --- class: # Importação de arquivos Pacote **readr**: funções para ler arquivos texto - read_csv - read_csv2 - read_delim - read_log - read_rds Pacote **readxl**: função para ler arquivo Excel - read_excel Pacote **haven**: funções para ler outros softwares estatísticos - read_sas - read_spss - read_stata --- class: # E lá vamos nós! <center><img src="img/S5e27_T.V._typing.gif"></center> --- class: # Importação de arquivos - Iremos importar a base [`titanic`](https://raw.githubusercontent.com/beatrizmilz/2020-R-Ladies-SP-Basico/master/docs/data/titanic.csv): ```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") ``` --- class: # Import Dataset - RStudio ## Importar CSV - From Text (readr) - Exemplo: abrindo uma base csv que já está no computador <img src="img/gif-importar-csv.gif" width="95%" style="display: block; margin: auto;" /> --- class: # Import Dataset - RStudio ## Importar excel - From Excel - Exemplo: abrindo uma base excel que está online <img src="img/gif-importarexcel.gif" width="95%" style="display: block; margin: auto;" /> Site dos dados do exemplo: [Execução orçamentária PMSP](http://orcamento.sf.prefeitura.sp.gov.br/orcamento/execucao.php) --- class: # 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, 1... ## $ sobreviveu <chr> "nao", "sim", "sim", "sim", "nao", "nao", "nao", "na... ## $ classe <dbl> 3, 1, 3, 1, 3, 3, 1, 3, 3, 2, 3, 1, 3, 3, 3, 2, 3, 2... ## $ nome <chr> "Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradl... ## $ sexo <chr> "masculino", "feminino", "feminino", "feminino", "ma... ## $ idade <dbl> 22, 38, 26, 35, 35, NA, 54, 2, 27, 14, 4, 58, 20, 39... ## $ irmaos_conjuge <dbl> 1, 1, 0, 1, 0, 0, 0, 3, 0, 1, 1, 0, 0, 1, 0, 0, 4, 0... ## $ pais_criancas <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 5, 0, 0, 1, 0... ## $ passagem <chr> "A/5 21171", "PC 17599", "STON/O2. 3101282", "113803... ## $ tarifa <dbl> 7.2500, 71.2833, 7.9250, 53.1000, 8.0500, 8.4583, 51... ## $ cabine <chr> NA, "C85", NA, "C123", NA, NA, "E46", NA, NA, NA, "G... ## $ embarque <chr> "Southampton", "Cherbourg", "Southampton", "Southamp... ``` --- class: # 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. --- class: # Os 6 verbos do dplyr - **filter**(): seleciona linhas <br></br> - **arrange**(): ordena de acordo com uma ou mais colunas <br></br> - **select**(): seleciona colunas <br></br> - **mutate**(): cria/modifica colunas <br></br> - **summarise**(): sumariza/agrega colunas <br></br> - **group_by**(): agrupa colunas --- class: # filter Selecionar linhas da base de dados. OBS: **Tibble** é uma releitura moderna do data.frame. ```r df_titanic %>% filter(sobreviveu == "sim") # Seleciona os sobreviventes. ``` ``` ## # 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> ``` --- class: # filter ```r # Cria um objeto e atribui a ele as linhas com os sobreviventes. sobreviventes <- df_titanic %>% filter(sobreviveu == "sim") # Crianças com menos de 12 anos que sobreviveram. criancas_sobreviventes <- df_titanic %>% filter(sobreviveu == "sim" & idade < 12) # Embarque realizado nos locais: Southampton ou Queenstow. embarque <- df_titanic %>% filter(embarque == "Southampton" | embarque == "Queenstow") # A instrução acima pode ser reescrita com o operador %in%: embarque <- df_titanic %>% filter(embarque %in% c("Southampton", "Queenstow")) ``` --- class: # filter ```r # Pessoas sem informação de local de embarque. # is.na() - função que retorna TRUE se o valor for NA e FALSE se não for. sem_embarque <- df_titanic %>% filter(is.na(embarque)) # Pessoas que tem "Elizabeth" em qualquer posição do campo nome. # str_detect - função que retorna TRUE se detectou o valor dado e # FALSE, caso não tenha encontrado. nome <- df_titanic %>% filter(str_detect(nome, "Elizabeth")) ``` --- class: # Desafio 1 1) Criar um objeto chamado passageiras que seleciona somente as passageiras. 2) Criar um objeto chamado criancas_Cherbourg que seleciona as crianças com menos de 12 anos que embarcaram na cidade de Cherbourg. --- class: # Desafio 1 - Resposta 1) Criar um objeto chamado passageiras que seleciona somente as passageiras. ```r passageiras <- df_titanic %>% filter(sexo == "feminino") ``` 2) Criar um objeto chamado criancas_Cherbourg que seleciona as crianças com menos de 12 anos que embarcaram na cidade de Cherbourg. ```r criancas_Cherbourg <- df_titanic %>% filter(idade < 12 & embarque == "Cherbourg") ``` --- class: # 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> ``` --- class: # 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> ``` --- class: #arrange - É possível também usar outras funções dentro do arrange. como `is.na` ```r # ordenando pelas variáveis que tem muitos campos vazios ou NA # (neste caso as variáveis são cabine e idade) df_titanic %>% arrange(desc(is.na(idade)), desc(cabine == "")) %>% head() ``` ``` ## # A tibble: 6 x 12 ## id_passageiro sobreviveu classe nome sexo idade irmaos_conjuge pais_criancas ## <dbl> <chr> <dbl> <chr> <chr> <dbl> <dbl> <dbl> ## 1 32 sim 1 Spen~ femi~ NA 1 0 ## 2 56 sim 1 Wool~ masc~ NA 0 0 ## 3 129 sim 3 Pete~ femi~ NA 1 1 ## 4 167 sim 1 Chib~ femi~ NA 0 1 ## 5 186 nao 1 Rood~ masc~ NA 0 0 ## 6 285 nao 1 Smit~ masc~ NA 0 0 ## # ... with 4 more variables: passagem <chr>, tarifa <dbl>, cabine <chr>, ## # embarque <chr> ``` --- class: # 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> ``` --- class: # Desafio 2 1) Ordenar os passageiros por ordem decrescente de classe e nomeie o objeto. 2) Ordenar somente as passageiras por ordem de idade e dê um nome para o objeto. --- class: # Desafio 2 - Resposta 1) Ordenar os passageiros por ordem decrescente de classe e nomeie o objeto. ```r passageiros <- df_titanic %>% arrange(desc(classe)) ``` 2) Ordenar somente as passageiras por ordem de idade e dê um nome para o objeto. ```r mulheres <- df_titanic %>% filter(sexo == "feminino") %>% arrange(idade) ``` --- class: # 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 Southampton ## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) 38 1 Cherbourg ## 3 Heikkinen, Miss. Laina 26 3 Southampton ## 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35 1 Southampton ## 5 Allen, Mr. William Henry 35 3 Southampton ## 6 Moran, Mr. James NA 3 Queenstow ## 7 McCarthy, Mr. Timothy J 54 1 Southampton ## 8 Palsson, Master. Gosta Leonard 2 3 Southampton ## 9 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) 27 3 Southampton ## 10 Nasser, Mrs. Nicholas (Adele Achem) 14 2 Cherbourg ## # ... with 881 more rows ``` --- class: # 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> --- class: # 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 ``` --- class: # 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 tarifa ## <chr> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <dbl> ## 1 nao 3 masc~ 22 1 0 A/5 211~ 7.25 ## 2 sim 1 femi~ 38 1 0 PC 17599 71.3 ## 3 sim 3 femi~ 26 0 0 STON/O2~ 7.92 ## 4 sim 1 femi~ 35 1 0 113803 53.1 ## 5 nao 3 masc~ 35 0 0 373450 8.05 ## 6 nao 3 masc~ NA 0 0 330877 8.46 ## 7 nao 1 masc~ 54 0 0 17463 51.9 ## 8 nao 3 masc~ 2 3 1 349909 21.1 ## 9 sim 3 femi~ 27 0 2 347742 11.1 ## 10 sim 2 femi~ 14 1 0 237736 30.1 ## # ... with 881 more rows, and 2 more variables: cabine <chr>, embarque <chr> ``` --- class: # Desafio 3 1) Criar um objeto para salvar o resultado com as colunas nome, tarifa e classe. 2) Mostrar uma tabela com as tarifas maiores que 50 por ordem decrescente de tarifa e ordem crescente de classe. A tabela não deverá conter os campos irmaos_conjuge, pais_criancas e passagem. --- class: # Desafio 3 - Resposta 1) Criar um objeto para salvar o resultado com as colunas nome, tarifa e classe. ```r tarifa <- df_titanic %>% select(nome, tarifa, classe) ``` 2) Mostrar uma tabela com as tarifas maiores que 50 por ordem decrescente de tarifa e ordem crescente de classe. A tabela não deverá conter os campos irmaos_conjuge, pais_criancas e passagem. ```r tarifa_classe <- df_titanic %>% filter(tarifa > 50) %>% select(-irmaos_conjuge, -starts_with("p")) %>% arrange(desc(tarifa), classe) ``` --- class: # 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 # Altera a coluna tarifa para o valor da tarifa em reais. tarifa_conversao <- df_titanic %>% mutate(tarifa = tarifa * 4.93) # Retorna a coluna tarifa para o valor da época. tarifa_conversao <- df_titanic %>% mutate(tarifa = tarifa / 4.93) ``` --- class: # mutate ```r # Cria no dataset uma nova variável chamada tarifa_reais. tarifa_conversao <- df_titanic %>% mutate(tarifa_real = tarifa * 4.93) tarifa_conversao ``` ``` ## # A tibble: 891 x 13 ## id_passageiro sobreviveu classe nome sexo idade irmaos_conjuge ## <dbl> <chr> <dbl> <chr> <chr> <dbl> <dbl> ## 1 1 nao 3 Brau~ masc~ 22 1 ## 2 2 sim 1 Cumi~ femi~ 38 1 ## 3 3 sim 3 Heik~ femi~ 26 0 ## 4 4 sim 1 Futr~ femi~ 35 1 ## 5 5 nao 3 Alle~ masc~ 35 0 ## 6 6 nao 3 Mora~ masc~ NA 0 ## 7 7 nao 1 McCa~ masc~ 54 0 ## 8 8 nao 3 Pals~ masc~ 2 3 ## 9 9 sim 3 John~ femi~ 27 0 ## 10 10 sim 2 Nass~ femi~ 14 1 ## # ... with 881 more rows, and 6 more variables: pais_criancas <dbl>, ## # passagem <chr>, tarifa <dbl>, cabine <chr>, embarque <chr>, ## # tarifa_real <dbl> ``` --- class: # Desafio 4 Criar uma tabela com um novo campo que contenha a tarifa em dólar seguindo essa cotação: 1£ = $ 1.31. Classifique por ordem decrescente de tarifa. --- class: # Desafio 4 - Resposta Criar uma tabela com um novo campo que contenha a tarifa em dólar seguindo essa cotação: 1£ = $ 1.31. Classifique por ordem decrescente de tarifa. ```r tarifa_conversao <- df_titanic %>% mutate(tarifa_dolar = tarifa * 1.31) %>% arrange(desc(tarifa)) ``` --- class: # 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 ``` --- class: # summarize ```r # Calcula: número de mulheres, mediana geral da tarifa e número de passageiros. # No caso abaixo a função sum() retorna o número de mulheres. # A função n() mostra o número de linhas (em cada grupo) e # costuma ser bastante usada com o summarize. df_titanic %>% summarize( mulheres = sum(sexo == "feminino", na.rm = TRUE), mediana_tarifa = median(tarifa, na.rm = TRUE), num_passageiros = n() ) ``` ``` ## # A tibble: 1 x 3 ## mulheres mediana_tarifa num_passageiros ## <int> <dbl> <int> ## 1 314 14.5 891 ``` --- class: # summarize ```r # Filtra os passageiros homens e calcula a mediana da tarifa. df_titanic %>% filter(sexo == "masculino") %>% summarize( mediana_tarifa = median(tarifa, na.rm = TRUE) ) ``` ``` ## # A tibble: 1 x 1 ## mediana_tarifa ## <dbl> ## 1 10.5 ``` --- class: # Desafio 5 1) Calcular a média da tarifa. 2) Filtrar as passageiras mulheres e calcular a mediana da tarifa. --- class: # Desafio 5 - Resposta 1) Calcular a média da tarifa. ```r media_tarifa <- df_titanic %>% summarize(mean(tarifa, na.rm=TRUE)) ``` 2) Filtrar as passageiras mulheres e calcular a mediana da tarifa. ```r mulheres_tarifa <- df_titanic %>% filter(sexo == "feminino") %>% summarize( mediana_tarifa = median(tarifa, na.rm = TRUE) ) ``` --- class: # 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). 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 ``` --- class: # group_by + summarize ```r # Agrupa pelo local de embarque e calcula a mediana da tarifa de cada grupo. df_titanic %>% group_by(embarque) %>% summarize(mediana_tarifa = median(tarifa, na.rm = TRUE)) ``` ``` ## # A tibble: 4 x 2 ## embarque mediana_tarifa ## <chr> <dbl> ## 1 Cherbourg 29.7 ## 2 Queenstow 7.75 ## 3 Southampton 13 ## 4 <NA> 80 ``` --- class: # Desafios 6 1) Criar uma tabela com a quantidade de pessoas por classe. 2) Criar uma tabela com a mediana da tarifa por sexo. --- class: # Desafio 6 - Resposta 1) Criar uma tabela com a quantidade de pessoas por classe. ```r df_titanic %>% group_by(classe) %>% summarize(qtd_classe = n()) ``` ``` ## # A tibble: 3 x 2 ## classe qtd_classe ## <dbl> <int> ## 1 1 216 ## 2 2 184 ## 3 3 491 ``` --- class: # Desafio 6 - Resposta 2) Criar uma tabela com a mediana da tarifa por sexo. ```r df_titanic %>% group_by(sexo) %>% summarize(mediana_tarifa = median(tarifa, na.rm = TRUE)) ``` ``` ## # A tibble: 2 x 2 ## sexo mediana_tarifa ## <chr> <dbl> ## 1 feminino 23 ## 2 masculino 10.5 ``` --- class: middle <center><img src="img/if_you_want_to_go_fast_go_alone.jpg" style="width: 50%"></center> --- class: # Para aprender mais - [Repositório RLadies São Paulo](https://github.com/rladies/meetup-presentations_sao-paulo) <br></br> - [Livro `R` for Data Science](https://r4ds.had.co.nz) <br></br> - [Software Carpentry](https://software-carpentry.org/lessons/) <br></br> - [Material do Curso-R](https://www.curso-r.com/material/) <br></br> - [R-Bloggers](https://www.r-bloggers.com) <br></br> --- class: # Referências - https://r4ds.had.co.nz - https://www.curso-r.com/material/ - https://www.tidyverse.org - https://software-carpentry.org/lessons/ - 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/ - https://bookdown.org/wevsena/curso_r_tce/curso_r_tce.html - https://rstudio-pubs-static.s3.amazonaws.com/279878_c7634fb5fe9e40b7abc7c35aa724a2a0.html --- class: # Referências - https://analisereal.com/tag/introducao-a-analise-de-dados-com-o-r-2/ - http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.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! ### 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 [Xaringan](https://github.com/yihui/xaringan), com o tema `metropolis` modificado por [Bea Milz](https://beatrizmilz.com).