07/02/2021 11:18 - As mensagens e as chamadas são protegidas com a criptografia de ponta a ponta e ficam somente entre você e os participantes desta conversa. Nem mesmo o WhatsApp pode ler ou ouvi-las. Toque para saber mais. 07/02/2021 11:18 - Você criou o grupo "Rstats". 07/02/2021 11:18 - Você removeu Letícia Sabbatini 07/02/2021 11:22 - Você mudou a imagem do grupo 07/02/2021 11:55 - ‎+55 21 98527-3167 entrou usando o link de convite deste grupo 07/02/2021 11:59 - ‎Manoela Mayrink entrou usando o link de convite deste grupo 07/02/2021 11:59 - Manoela Mayrink: 👀 07/02/2021 12:09 - viktor: Ah não! De novo não! 😂 07/02/2021 12:12 - Manoela Mayrink: 😂😂😂😂 07/02/2021 12:21 - ‎+55 21 97027-9905 entrou usando o link de convite deste grupo 07/02/2021 13:20 - ‎+55 21 99893-7881 entrou usando o link de convite deste grupo 07/02/2021 13:32 - ‎+55 21 97008-5878 entrou usando o link de convite deste grupo 07/02/2021 14:39 - ‎+55 21 97446-8227 entrou usando o link de convite deste grupo 07/02/2021 15:16 - ‎+55 21 96697-9379 entrou usando o link de convite deste grupo 07/02/2021 15:42 - ‎+55 21 99904-5344 entrou usando o link de convite deste grupo 07/02/2021 21:48 - ‎+55 21 99176-7877 entrou usando o link de convite deste grupo 08/02/2021 11:16 - ‎+55 21 98479-8364 entrou usando o link de convite deste grupo 08/02/2021 11:52 - ‎+55 21 98234-6638 entrou usando o link de convite deste grupo 08/02/2021 13:14 - ‎+55 21 99520-0045 entrou usando o link de convite deste grupo 08/02/2021 18:38 - ‎+55 21 97623-1677 entrou usando o link de convite deste grupo 08/02/2021 20:50 - ‎+55 21 99779-8710 entrou usando o link de convite deste grupo 09/02/2021 09:44 - ‎+55 21 96597-2261 entrou usando o link de convite deste grupo 09/02/2021 10:16 - viktor: Bom dia R lovers. Temos um encontro marcado, hoje, logo mais às 14h. Envio o link mais próximo do horário 😉 09/02/2021 10:34 - +55 21 97027-9905: 09/02/2021 11:49 - ‎Jeferson UFF entrou usando o link de convite deste grupo 09/02/2021 12:51 - ‎+55 11 96110-9418 entrou usando o link de convite deste grupo 09/02/2021 13:16 - ‎+55 21 98731-7975 entrou usando o link de convite deste grupo 09/02/2021 13:49 - viktor: https://meet.google.com/hpo-qoyk-xia 👉🏽 Link para nossa primeira aula (começamos em 10min) 09/02/2021 13:59 - ‎+55 21 99291-6514 entrou usando o link de convite deste grupo 09/02/2021 13:59 - ‎Isis Lorena entrou usando o link de convite deste grupo 09/02/2021 14:00 - ‎+55 11 98373-5115 entrou usando o link de convite deste grupo 09/02/2021 14:16 - viktor: Óbvio q minha conexão já começou a falhar 09/02/2021 14:16 - viktor: Tentando voltar 09/02/2021 14:16 - Manoela Mayrink: Hahahahahahahaha 09/02/2021 14:17 - Manoela Mayrink: 09/02/2021 14:17 - +55 21 98234-6638: Essa aula vai ficar salva? Minha internet tá fora do ar, não tô conseguindo entrar ): 09/02/2021 14:17 - Manoela Mayrink: Nem o Viktor no momento rsrs 09/02/2021 14:19 - +55 21 97008-5878: Ele não vai gravar, não 09/02/2021 17:57 - ‎+55 21 99801-8179 entrou usando o link de convite deste grupo 09/02/2021 18:25 - Você mudou a descrição do grupo 09/02/2021 18:25 - viktor: Gente, LINK NA BIO 09/02/2021 18:26 - +55 21 97027-9905: vlw 09/02/2021 18:26 - viktor: Coloquei na descrição do grupo os links para o programa do curso (rpubs) e o GitHub com os scripts aula a aula. Baixem o script da aula de hj, testem tudo e coloquem as dúvidas por aqui 09/02/2021 18:27 - viktor: Espero que tenham curtido e que tenhamos um semestre proveitoso pela frente 😉😘 09/02/2021 18:27 - +55 21 97027-9905: to exatamente assim apos a aula 09/02/2021 18:27 - +55 21 97027-9905: 09/02/2021 18:28 - +55 21 97027-9905: meu pobre cérebro nunca tinha encontrado nada igual 09/02/2021 18:28 - viktor: 09/02/2021 18:28 - +55 21 97027-9905: mas vamos de prática 09/02/2021 18:28 - Manoela Mayrink: 09/02/2021 18:28 - +55 21 97027-9905: 09/02/2021 18:30 - +55 11 96110-9418: 09/02/2021 18:30 - +55 11 96110-9418: Meu cérebro derreteu 09/02/2021 18:33 - viktor: Vai piorar muito ainda rsrs 09/02/2021 18:35 - +55 21 97027-9905: nossa se eu conseguir dominar o básico já vai ser vitória pra mim o resto enfrento c mt medicação 🥰🙏🏻 09/02/2021 18:38 - +55 11 96110-9418: Não sei o que farei. Kkkkkk 09/02/2021 18:50 - viktor: Ayó te ajuda 11/02/2021 13:00 - viktor: 11/02/2021 13:01 - viktor: Agradecimentos na tese de um cientista de dados 11/02/2021 13:03 - +55 21 97008-5878: 11/02/2021 13:04 - Manoela Mayrink: 11/02/2021 13:06 - +55 21 97027-9905: dei um risinho fino vou admitir 11/02/2021 13:06 - +55 21 97027-9905: mas realmente o homem cientista deve parar ! 11/02/2021 13:09 - viktor: 17/02/2021 23:15 - Manoela Mayrink: https://twitter.com/coleciona_dor/status/1362054779086725120?s=19 17/02/2021 23:34 - viktor: E vai piorar muito qndo o Serpro for privatizado 🤷🏽‍♂️ 18/02/2021 18:19 - ‎+55 21 98956-2539 entrou usando o link de convite deste grupo 22/02/2021 11:34 - +55 21 97027-9905: Essa mensagem foi apagada 22/02/2021 11:37 - ‎+55 21 99904-5344 saiu 23/02/2021 12:05 - viktor: Olá Jovens. Escrevo para lembrá-los a todos e todas que hoje temos um encontro assíncrono por aqui. A partir das 14h começo a conversar com vocês aqui mesmo no zap, para tirar dúvidas e avançar com alguns conteúdos da nossa oficina. Portanto, aqueles e aquelas que puderem acompanhar com seus respectivos computadores e o R Studio em tempo real, serão todos bem-vindos. Os que não puderem tomem nota e experimentem os comandos tão logo qnto possível 😉 23/02/2021 14:00 - viktor: Oi Gente. Boa tarde 23/02/2021 14:02 - viktor: Vou dar sequência às nossas conversas por aqui. Se puderem me dar um sinal de vida e estabelecer alguma via de diálogo, agradeço sempre, porque afinal dar aula por whatsapp é sempre um inferno se não há interação rsrs. Fiquem à vontade para levantar dúvidas, perguntar coisas etc. Vou fazer uma breve racapitulação do q fizemos na última aula e espero que tenham conseguido praticar nesse meio tempo... 23/02/2021 14:04 - +55 21 98234-6638: Boa tarde! ☺️ 23/02/2021 14:04 - +55 21 98527-3167: boa tarde, prof 23/02/2021 14:05 - +55 21 99520-0045: boa tarde! 23/02/2021 14:05 - +55 21 99779-8710: boa 23/02/2021 14:05 - viktor: 😊 23/02/2021 14:05 - viktor: A propósito, parabéns @5521993144599. Muitas felicidades 🎉🎉 23/02/2021 14:05 - +55 11 96110-9418: Boa tarde 23/02/2021 14:06 - +55 21 98956-2539: Boa tarde :) 23/02/2021 14:06 - +55 21 97446-8227: Boa tarde!! 23/02/2021 14:07 - viktor: Bom, na nossa aula passada, nós instalamos o R e o R Studio e começamos a praticar alguns comandos da linguagem R, o chamado "R Base". Fizemos algumas operações bem básicas inserindo variáveis na memória do computador e fazendo algumas contas com operadores matemáticos e lógicos no R 23/02/2021 14:07 - viktor: Os comandos todos estão salvos aqui nesse arquivo: https://github.com/ombudsmanviktor/workshop_rstats/blob/main/aula2/aula2.R -- mas nós não chegamos a concluir todos. Por isso, hoje vou repassar alguns dos comandos ainda nesse mesmo script, para entendermos um pouco mais sobre o q estamos fazendo 23/02/2021 14:08 - +55 21 97027-9905: eu n poderei participar de nada hj, sinto muito 23/02/2021 14:08 - viktor: Sem problemas Mari. Acompanhe o diálogo mais tarde. Por isso, é uma aula assíncrona 23/02/2021 14:09 - +55 21 96697-9379: Boa tarde!!! 23/02/2021 14:09 - +55 21 97008-5878: Boa tarde! ✨ 23/02/2021 14:10 - viktor: Como vocês já puderam notar, há pelo menos duas formas diferentes de usar o R Studio. Uma delas é por linha de comando/prompt e a outra é digitando os comandos todos de uma vez na área de scripts do R. A principal vantagem do script é q podemos digitar tudo e executar sucessivamente vários comandos, sem a necessidade de darmos atrás de 23/02/2021 14:10 - viktor: Os scripts em R são salvos todos em um arquivo de texto comum. Mas ao invés de ter a extensão .txt eles têm a extensão .R como nesse link q enviei acima para vocês 23/02/2021 14:11 - viktor: Sempre que quiserem abrir um arquivo .R basta dar um duplo clique ou Abrir Com... R Studio e ele automaticamente abrirá todos os comandos na área de script de vocês 23/02/2021 14:12 - viktor: Então, essa é a minha tela no momento: 23/02/2021 14:12 - viktor: 23/02/2021 14:12 - viktor: (OBS.: Eu tenho alguns outros scripts abertos além do aula2.R) 23/02/2021 14:13 - Jeferson UFF: Obrigado, professor! ❤️ 23/02/2021 14:13 - Jeferson UFF: Boa tarde gente 23/02/2021 14:13 - viktor: 😊 23/02/2021 14:15 - viktor: Sempre que eu uso um # no início da minha linha, o R entende que aquele é um comentário e não um comando. Vocês podem ver q o R Studio usa um tom de verde para indicar a diferença entre comentários, um tom preto para comandos e um tom azul para números. Isso facilita a nossa leitura... 23/02/2021 14:16 - viktor: O R serve para trabalharmos com diferentes tipos de variáveis (falarei já já sobre isso) e executa diferentes tipos de ações. Entre as ações q ele executa, estão contas matemáticas p.ex., como testamos na última aula 23/02/2021 14:16 - viktor: Além disso, ele é muito bom para trabalhar com bancos de dados, q é o q faremos a maior parte do tempo no nosso curso 23/02/2021 14:17 - viktor: Por isso, testamos bastante como fazemos para inserir novas variáveis no R na aula passada e continuaremos fazendo um pouco disso hoje 23/02/2021 14:18 - viktor: Se não estou enganado, na última aula, terminamos esse script na linha 63. É a partir daí q voltarei hoje 23/02/2021 14:18 - viktor: Linha 63: 23/02/2021 14:18 - viktor: 23/02/2021 14:19 - viktor: A numeração das linhas serve para nos guiar quando há algum erro ou algo do gênero 23/02/2021 14:19 - viktor: Até aqui nós inserimos variáveis simples, com uma única linha na memória do computador 23/02/2021 14:21 - viktor: Quando rodo um comando como: *nota <- 9.0* O R entende que eu estou inserindo um número (9.0) como uma variável de ambiente e que devo chamar essa variável de *nota*. Mas essa variável é uma variável simples, ela contém apenas um número e nada mais. Por isso, agora vamos começar a aprender variáveis um pouquinho mais complexas que isso, como *vetores* 23/02/2021 14:22 - viktor: O que são vetores? 23/02/2021 14:22 - viktor: Bom, eu deixei uns comentários no nosso script para tentar esclarecer um pouco do jargão do R para todos nós 23/02/2021 14:23 - viktor: O R entende como vetores "matrizes unidimensionais que podem conter números inteiros, números reais(ponto flutuante com dupla precisão), complexos, caracteres(strings) ou valores lógicos" 23/02/2021 14:23 - viktor: Ainda assim explicação complexa rsrs 23/02/2021 14:24 - viktor: (Essa definição está no livro do Jackson Aquino, "R para cientistas sociais") 23/02/2021 14:24 - viktor: Na prática, um vetor é nada mais do que uma coluna. Sim, uma coluna de dados. Agora, ao invés de termos uma variável com uma só linha, temos uma variável com múltiplas linhas 23/02/2021 14:25 - viktor: Então, o comando *notas <- (c(6.0, 7.1, 5.5, 3.0, 10.0, 100.0, 6.5, 8.2, 2.9, 3.5, 9.9,* *9.1, 8.2, 7.6, 9.9, 10.0, 6.7, 4.9, 10.0, 6.8, 6.0))* Vai inserir na memória do seu computador uma coluna com várias notas diferentes, uma para cada aluno 23/02/2021 14:26 - viktor: Experimentem rodar a linha 68 e logo após a linha 70 e vocês verão essa coluna 23/02/2021 14:26 - viktor: 23/02/2021 14:27 - viktor: Na linha 71, eu estou inserindo um outro vetor. Agora, não com números, mas com textos, os nomes dos alunos. Por isso, para o R identificar q são textos, eu uso aspas (duplas ou simples) em torno de cada nome 23/02/2021 14:28 - viktor: Melhor dizendo, eu estaria inserindo um outro vetor se estivesse usando: *nomes <- (c("João", "Maria", "Joaquim", "Ana", "Enzo", "Valentina", "Júlia", "Lucas", "Beatriz", "Carol", "José", "Daniela", "Daniel", "Manuela", "Luiz", "Fátima", "Gilberto", "Roberta", "Otávio", "Josias", "Helena"))* 23/02/2021 14:29 - viktor: Mas, aqui, estou basicamente alterando mesmo o nome de cada linha e transformando esse nome num "nome" rsrs 23/02/2021 14:30 - viktor: Olhem o q acontece com meu vetor qndo rodo as linhas 71 e 73: 23/02/2021 14:30 - viktor: 23/02/2021 14:30 - viktor: Na linha 74, quero resgatar apenas a nota do *João* 23/02/2021 14:31 - viktor: Na linha 75, quero saber quem tem (TRUE ou FALSE) nota maior ou igual a 6 23/02/2021 14:31 - viktor: E na linha 76, quais foram as notas e os alunos com nota maior ou igual a 6 23/02/2021 14:32 - viktor: Difícil até aqui? 23/02/2021 14:32 - +55 21 97008-5878: Por enquanto, tudo ok 23/02/2021 14:32 - viktor: 🙌🏼 23/02/2021 14:32 - viktor: Vamos complicar mais então rsrs 23/02/2021 14:33 - +55 21 96697-9379: como faz pra ir até essas colunas??? (não abri ainda o R, mas não tava a mesma coisa que o seu) 23/02/2021 14:33 - +55 21 97008-5878: 23/02/2021 14:34 - viktor: Use *View(notas)* e veja o que aparece para você 23/02/2021 14:34 - +55 21 96697-9379: ta bom!! 23/02/2021 14:35 - viktor: Nas linhas 78 e 80, eu estou inserindo dois vetores diferentes e independentes entre si. Um vetor só com as notas dos alunos e um vetor só com os nomes deles. A ordem precisa ser a mesma. Ou seja, se 6.1 é a segunda nota e foi Maria quem tirou 6.1, Maria precisa estar na segunda linha do meu vetor de nomes 23/02/2021 14:35 - viktor: Os comandos são esses aqui: 23/02/2021 14:36 - viktor: *notas <- (c(6.0, 7.1, 5.5, 3.0, 10.0, 100.0, 6.5, 8.2, 2.9, 3.5, 9.9,* *9.1, 8.2, 7.6, 9.9, 10.0, 6.7, 4.9, 10.0, 6.8, 6.0))* *nomes <- (c("João", "Maria", "Joaquim", "Ana", "Enzo", "Valentina", "Júlia", "Lucas", "Beatriz", "Carol", "José", "Daniela", "Daniel", "Manuela", "Luiz", "Fátima", "Gilberto", "Roberta", "Otávio", "Josias", "Helena"))* 23/02/2021 14:37 - viktor: A função *c( )*, como vimos na aula passada, é uma função que "combina" múltiplos valores, e, portanto, nos ajuda a criar um vetor 23/02/2021 14:37 - viktor: 👆🏼 Para texto, eu preciso sempre colocar aspas. Mas para números, não 23/02/2021 14:38 - +55 21 97008-5878: Pera, então se eu colocar o nome da variável e outra variável entre parênteses ela forma uma coluna só? 🤔 Q 23/02/2021 14:39 - viktor: Nós vamos juntar essas duas colunas logo na sequência. Esse é justamente o nosso exercício aqui. Por enqnto, temos duas colunas independentes entre si 23/02/2021 14:39 - viktor: 23/02/2021 14:39 - +55 21 97008-5878: 23/02/2021 14:40 - viktor: Isso. O seu R Studio está exibindo como *lista* e não como *dataframe*, que é algo sobre o q falamos a seguir, ainda hoje. Mas está tudo certinho 23/02/2021 14:41 - viktor: Com exceção, é claro, dos acentos... Você deve ter notado q seus acentos estão cagados né @5521970085878 23/02/2021 14:41 - +55 21 97008-5878: Sim... 23/02/2021 14:42 - viktor: O problema dos acentos não tem a ver diretamente com o R mas com os diferentes sistemas operacionais q usamos. Cada sistema operacional tem uma codificação (encoding) diferente 23/02/2021 14:43 - viktor: O Windows geralmente usa uma codificação chamada *latin1*. E o Unix/MacOS usam uma codificação chamada *UTF-8* 23/02/2021 14:44 - viktor: O UTF-8 é uma codificação mais universal, q trabalha com diferentes alfabetos, além do alfabeto latino, e, portanto, mais amigável para linguagem de programação. Mas o Windows não lida bem com ela. Por isso, qndo eu salvo algo na minha máquina em UTF-8 e passo para vocês, os acentos vêm cagados, pq eu estou em UTF-8 e vocês estão provavelmente em latin1 23/02/2021 14:44 - +55 21 97008-5878: Eu não entendi pq tem uma variável chamada "notas" e depois tem uma "names" com notas entre parênteses 23/02/2021 14:45 - +55 21 97008-5878: Aaaah, faz sentido. Tem como converter de um para outro ou vai ficar assim mesmo? 23/02/2021 14:45 - viktor: 23/02/2021 14:46 - +55 21 97008-5878: Foi! 23/02/2021 14:47 - viktor: *names()* é uma função, não uma variável. Então, qndo chamo a função *names()*, eu estou dizendo ao R: "por favor, nomeie as linhas do vetor *notas* com os nomes que estou te passando. No primeiro exercício, foi isso o q fizemos. Criamos um vetor e renomeamos as linhas desse vetor. Agora, nós estamos fazendo outro exercício: estamos criando dois vetores e queremos unir esses dois vetores para criar uma tabela 23/02/2021 14:47 - +55 21 97008-5878: 23/02/2021 14:48 - viktor: 🤩🤩 23/02/2021 14:48 - viktor: 23/02/2021 14:48 - +55 21 97008-5878: Show! 23/02/2021 14:49 - +55 21 97008-5878: Aaaaah 🤭 23/02/2021 14:50 - viktor: Bom, eu tenho dois vetores criados no meu ambiente. São duas colunas de dados. Mas, separadamente, elas não me servem de nada. Eu quero uni-las numa tabela mais fácil de ler. Como faço isso? 23/02/2021 14:51 - viktor: *boletim <- cbind(nomes,notas)* Onde *cbind()* é a mesma função *c()* que antes usávamos para combinar valores, só que usada agora para combinar vetores 23/02/2021 14:51 - viktor: 23/02/2021 14:52 - +55 21 97008-5878: 23/02/2021 14:52 - +55 21 97008-5878: 23/02/2021 14:53 - viktor: Aê! Note que o R discrimina esse tipo de dado. Ele não colocou o *boletim* junto de *nomes* e *notas* 23/02/2021 14:53 - viktor: Exato! 23/02/2021 14:53 - viktor: Isso é porque temos vários tipos de conjuntos de dados no R. Vamos hoje aprender um pouquinho mais sobre isso 23/02/2021 14:53 - +55 21 97008-5878: Pq antes eu não via a variável como coluna? Tinha como mudar o modo de apresentação? 23/02/2021 14:54 - viktor: É justamente o que vamos aprender agora rsrs 23/02/2021 14:54 - viktor: Bom, o primeiro tipo de conjunto de dados que aprendemos é o *vetor* 23/02/2021 14:55 - viktor: O vetor é uma coluna (ou, na definição que indiquei acima, bem mais pomposa, uma "matriz unidimensional" rsrs) 23/02/2021 14:56 - viktor: Mas existem outros tipos de conjuntos de dados no R 23/02/2021 14:56 - viktor: O primeiro deles é uma matriz (não-unidimensional) 23/02/2021 14:56 - viktor: Uma matriz é um tipo de conjunto de dados em que eu tenho múltiplas linhas e múltiplas colunas 23/02/2021 14:57 - viktor: E geralmente as matrizes nos apontam para correlações entre os dados 23/02/2021 14:58 - viktor: Por exemplo, quando jogamos Batalha Naval, temos que pensar o espaço geográfico como uma matriz: "A5!" "Acertou um submarino!" 23/02/2021 14:58 - viktor: A5 = linha 5 da coluna A 23/02/2021 14:58 - viktor: Isso é uma matriz 23/02/2021 14:59 - viktor: O R distingue dois tipos de matrizes diferentes, e um deles nós vamos usar muito no nosso curso: a matriz comum e o que o R chama de *dataframe* 23/02/2021 15:00 - viktor: *Dataframe* é uma matriz organizada por colunas. As colunas são as variáveis e as linhas são as observações dos nossos casos 23/02/2021 15:00 - viktor: Por exemplo, *boletim* é um *dataframe* 23/02/2021 15:02 - viktor: No *boletim*, eu tenho duas variáveis (*nome* e *nota*) combinadas. Se a variável *nome* é igual a João, então, a nota é 6.0. Se a variável *nome* é Maria, então, a nota é 7.1. Da mesma forma, se a variável *nota* é 5.5, então, o nome é Joaquim... E por aí vai... Essas duas variáveis compõem o meu *dataframe* 23/02/2021 15:05 - viktor: Há ainda um terceiro tipo muito comum de conjunto de dados, chamado *lista*. A *lista* é um conjunto de dados aninhados, ou seja, hierarquicamente dispostos. É como normalmente os sistemas operacionais organizam os seus arquivos, dentro de pastas ou diretórios... Esse tipo de conjunto de dados é muito eficiente para algumas operações, como dados semanticamente estruturados (arquivos em formato XML usam geralmente essa estrutura), mas às vezes são mais difíceis de serem lidos e interpretados de forma humana 23/02/2021 15:06 - viktor: Eu posso converter esses conjuntos de dados nos formatos q eu quiser. Nas linhas 84 a 87, há algumas funções para conversão entre tipos de conjuntos de dados 23/02/2021 15:07 - viktor: 23/02/2021 15:07 - viktor: 23/02/2021 15:09 - +55 21 97008-5878: Então temos vetor, matriz e lista com o tipos de conjunto de dados. Para construir um vetor é só criar uma variável com uma função de conjunto? Ou não? (Tá tudo enrolando um pouco na cabeça) 23/02/2021 15:10 - viktor: Eu disse que íamos complicar um pouco rsrs 23/02/2021 15:11 - viktor: Temos: vetor, matriz, dataframe e lista. Esses são os quatro tipos principais. Sendo q dataframe é uma espécie de derivado da matriz. Você pode entender ambos como a mesma coisa por enqnto 23/02/2021 15:12 - viktor: Para construir um vetor, basta combinarmos múltiplos valores. Para construirmos uma matriz, basta combinarmos múltiplos vetores 23/02/2021 15:12 - +55 21 97008-5878: Eu rodei a linha 85 e depois a linha 83 para visualizar e continua em dataframe... 23/02/2021 15:13 - viktor: Um vetor é o mesmo que uma variável. Ou seja, se eu tenho dois valores possíveis (0 e 1), eu tenho um vetor (ou uma variável) 23/02/2021 15:13 - +55 21 97008-5878: Tendi 23/02/2021 15:13 - +55 21 97008-5878: Mds 23/02/2021 15:14 - viktor: Observe a linha 85: *boletim_lista <- as.list(boletim)* Eu fiz aqui uma pequena mudança. Ao invés de chamar a variável pelo mesmo nome (boletim), eu a chamei de boletim_lista. Então, agora, ao invés de dar *View(boletim)*, você precisa dar *View(boletim_lista)* 23/02/2021 15:15 - viktor: Mudei o nome justamente para diferenciarmos melhor o boletim em formato de matriz e o boletim em formato de lista rsrs 23/02/2021 15:15 - +55 21 97008-5878: Ok ok 23/02/2021 15:16 - +55 21 96697-9379: 23/02/2021 15:17 - viktor: Você misturou *names* (a função) com *nomes* (a variável que criamos) hehehe 23/02/2021 15:18 - viktor: Aí qndo você pediu pro R combinar *names* com *nota*, ele tentou usar a função *names* e não a variável *nomes* 23/02/2021 15:18 - viktor: E obviamente cagou tudo 23/02/2021 15:19 - +55 21 96697-9379: Que confusão que eu fiz kkkkkkkkkkk 23/02/2021 15:19 - +55 21 96697-9379: Entendi 23/02/2021 15:19 - +55 21 96697-9379: Pelo menos apareceu a tabela hahaha 23/02/2021 15:20 - viktor: Sim. Mas se você voltar alguns passos e refizer os comandos com *nomes*, tudo dará certinho. Essa é a vantagem de usarmos os scripts e não a linha de comando. Com os scripts, conseguimos identificar a falha com mais facilidade 23/02/2021 15:20 - +55 21 96697-9379: ahh sim..vou tentar aqui de novo então 23/02/2021 15:21 - viktor: Bom, esses são os conjuntos de dados com q o R trabalha. Por enqnto, talvez vocês ainda não estejam visualizando bem a aplicação desses conjuntos de dados, mas já já entenderão melhor na prática como eles funcionam. Vamos passar agora aos tipos de variáveis diferentes do R, outra noção básica fundamental 23/02/2021 15:21 - viktor: Qq dúvida, me fale @5521966979379 23/02/2021 15:22 - viktor: Nas linhas 89 a 116 no nosso script, eu procurei descrever (a partir do livro do Jakson Aquino mais uma vez) os principais tipos de variáveis do R. Vou aqui reproduzir essas definições 23/02/2021 15:22 - +55 21 97008-5878: Faltou esse Tibble 🤔 Tá antes de tipos de variável 23/02/2021 15:24 - viktor: Ah sim. Eu não quis confundir mais a cabeça de vocês agora rsrs. Tibble é um tipo específico de dataframe. É um dataframe criado para quem lida diretamente com ciência de dados, como nós faremos aqui. E a principal vantagem dele é que ele organiza melhor visualmente as informações pra gente no console 23/02/2021 15:25 - viktor: 23/02/2021 15:25 - viktor: 23/02/2021 15:26 - viktor: Quais as diferenças? 23/02/2021 15:26 - +55 21 97008-5878: Não sei kkkkkkkk 23/02/2021 15:26 - viktor: Simples: duas diferenças pequenas mas importantes 23/02/2021 15:27 - +55 21 96697-9379: 23/02/2021 15:27 - viktor: Primeira: o tibble já me traz a informação de antemão de qual é a extensão da minha matriz. Ele diz pra mim: 21 x 2. Ou seja, 21 linhas e 2 colunas. Pode parecer bobo, mas imagine qndo você estiver trabalhando com um dataframe de 3000 colunas por 6500 linhas... 23/02/2021 15:29 - viktor: Segunda diferença: o tibble já me dá, de cara, a informação sobre o tipo de variável em cada coluna. Note aquele ** abaixo de cada nome de coluna. Essa informação me indica que ambas as colunas são compostas de caracteres, ou seja, texto. De novo, é uma bobagem, mas é muito útil qndo precisamos saber se estamos lidando com uma data, com um operador lógico ou simplesmente com texto... O tibble facilita isso... 23/02/2021 15:30 - viktor: Era para colocar *nomes* rsrs 23/02/2021 15:30 - +55 21 97008-5878: Entendi! Bem legal 23/02/2021 15:31 - +55 21 96697-9379: Putz 🤦🏽‍♂️🤦🏽‍♂️🤦🏽‍♂️🤦🏽‍♂️ 23/02/2021 15:31 - +55 21 96697-9379: Foi mal kkkk 23/02/2021 15:31 - viktor: Rode os seguintes comandos @5521966979379 (um depois do outro) *notas <- (c(6.0, 7.1, 5.5, 3.0, 10.0, 100.0, 6.5, 8.2, 2.9, 3.5, 9.9, 9.1, 8.2, 7.6, 9.9, 10.0, 6.7, 4.9, 10.0, 6.8, 6.0))* *nomes <- (c("João", "Maria", "Joaquim", "Ana", "Enzo", "Valentina", "Júlia", "Lucas", "Beatriz", "Carol", "José", "Daniela", "Daniel", "Manuela", "Luiz", "Fátima", "Gilberto", "Roberta", "Otávio", "Josias", "Helena"))* *boletim <- cbind(nomes,notas)* 23/02/2021 15:32 - viktor: Esse é o gancho para falarmos dos tipos de variáveis do R... 23/02/2021 15:32 - +55 21 96697-9379: 23/02/2021 15:33 - viktor: 23/02/2021 15:33 - +55 21 96697-9379: 23/02/2021 15:35 - viktor: O R compreende os seguintes tipos de variáveis: Numéricas (*numeric*): Números inteiros ou reais, como idade, renda, número de filhos. Datas (*Date*): São um tipo especial de variável numérica. Categóricas (*factor*): Variáveis qualitativas, ou seja, características dos indivíduos para as quais não é possível atribuir um valor numérico, como sexo, religião, estado civil, opinião sobre algum tema. É possível agrupar os indivíduos em categorias e contar quantos indivíduos pertencem a cada categoria, mas se, por exemplo, um indivíduo afirma ser católico, e outro, protestante, não podemos, com base nessas afirmações, considerar um mais religioso do que o outro. Categóricas ordenáveis (*ordered*): Tipo de variável categórica cujas categorias podem ser hierarquizáveis, como grau de escolaridade, alguns tipos de respostas a perguntas de questionário. Se à pergunta “Qual o papel do governo?”, as opções de resposta forem “O governo deve mandar em tudo”, “O governo deve controlar algumas coisas” e “Não precisamos de governo”, poderíamos considerar aqueles que optaram pela primeira opção adeptos de uma ideologia mais estatizante do que aqueles que escolheram a terceira opção. Texto (*character*): Características puramente individuais que não podem ser utilizadas para categorizar os indivíduos. Geralmente aparecem nos bancos de dados apenas para ajudar em análises qualitativas e não estatísticas. Exemplo: o nome dos candidatos num banco de dados de resultados eleitorais. Em alguns casos, os textos são passíveis de categorização, como as respostas a uma pergunta aberta. Neste caso, seria preciso manualmente recodificar as respostas abertas numa nova variável contendo um número limitado de categorias. Booleanas (*logical*): Variáveis cujos valores podem ser VERDADEIRO ou FALSO; no R, TRUE ou FALSE. 23/02/2021 15:36 - viktor: Variáveis numéricas, como o nome diz, são números. Mas, como vimos na aula passada, eu posso inserir números como números ou como texto no R. Dependendo da maneira como chamo esses dados, o R pode interpretar ou não minha variável numérica como numérica 23/02/2021 15:37 - viktor: Se eu coloco um número entre aspas, por exemplo, automaticamente, o R lê esse número como texto 23/02/2021 15:37 - viktor: E texto é um outro tipo de variável 23/02/2021 15:37 - viktor: Portanto, não adianta eu tentar somar texto ou multiplicar texto, q o R não vai entender o q estou fazendo 23/02/2021 15:39 - +55 21 96697-9379: João = nota 6 seria uma matriz, enquanto João e nota 6 separadamente seriam vetores. É isso??? 23/02/2021 15:39 - viktor: A mesma coisa vale para *Date*. Se eu insiro um ano como 2021 no R sem informar a ele q é uma data, ele pode considerar q esse valor é um número ou até um texto. E, dependendo da situação, pode dar zebra o q estou tentando fazer 23/02/2021 15:44 - viktor: Nope. Se você digitar (sem acento, porque o R não entende acento no nome de variáveis): *Joao = 6* Ou (que é a mesma coisa): *Joao <- 6* Você estará criando uma variável chamada *Joao* e dizendo q o valor dessa variável é 6. É apenas uma variável (ou um valor) Um vetor só existe qndo você tem múltiplos valores. Então você teria que dizer algo como: *Joao <- c(6,8)* Q seria o equivalente a dizer q a sua variável Joao compreende os valores 6 e 8. Obviamente, isso não casa bem com o nosso exemplo, pq nenhum aluno tira duas notas numa mesma disciplina rsrs. Por isso, o q fizemos foi criar uma variável com nomes: *nomes <- c("João","Maria")* E uma outra variável com notas: *notas <- c(6,8)* E depois uni-las... para então criarmos uma matriz: *boletim <- cbind(nomes,notas)* 23/02/2021 15:46 - viktor: A variável *nomes*, no exemplo acima, é um vetor, porque comporta mais de um valor ("João" e "Maria"). E a variável *notas* também, porque também comporta mais de um valor (6 e 8). Já *boletim* é uma matriz, porque comporta mais de um vetor (*nomes* e *notas*) 23/02/2021 15:47 - +55 21 97008-5878: Então como é que especifica a variável? 👀 23/02/2021 15:47 - +55 21 96697-9379: Entendi!! 23/02/2021 15:48 - viktor: Boa! Vamos exercitar isso agora! Um bom teste para você começar a entender isso é rodar o comando na linha 130 23/02/2021 15:49 - +55 21 97008-5878: Deu "número 2010" 👀 23/02/2021 15:49 - viktor: Doido não? 23/02/2021 15:50 - viktor: Vamos lá: na linha 120 eu tenho seguinte comando: *numero <- 1:10* 23/02/2021 15:50 - viktor: Como já vimos, qndo eu digito *1:10*, o R entende que ele deve me retornar uma sequência numérica, de 1 a 10 23/02/2021 15:51 - viktor: Na linha 121, eu uso a função *class()* para tentar compreender qual o tipo de variável da variável *numero* q eu acabei de criar 23/02/2021 15:52 - viktor: E na linha 122, eu uso a função *summary()* para tentar conhecer as estatísticas descritivas básicas dessa variável 23/02/2021 15:52 - viktor: 23/02/2021 15:53 - viktor: A função *class()* me retornou o seguinte: "esta variável compreende um conjunto de números inteiros (integer)" 23/02/2021 15:54 - +55 21 96697-9379: 23/02/2021 15:54 - viktor: A função *summary()* me retornou uma série de estatísticas sobre essa sequência de 1 a 10. Por exemplo: o número mínimo da sequência é 1, o número máximo é 10. A média aritmética (mean) é 5.5 23/02/2021 15:55 - +55 21 97008-5878: Faltou o "número" dentro dos parênteses de class e summary 23/02/2021 15:56 - +55 21 97008-5878: Sem acento 23/02/2021 15:56 - +55 21 96697-9379: Ah tá 23/02/2021 15:56 - viktor: É que você está rodando as funções sem designar uma variável. Desculpe, quando eu me refiro a uma função por aqui, uso sempre o nome da função e parênteses, como em *class()*. Mas para aplicarmos essa função, precisamos indicar uma variável, como *class(numero)* 23/02/2021 15:56 - viktor: Isso! 23/02/2021 15:57 - +55 21 96697-9379: Tudo bem Agora deu [1] "integer" 23/02/2021 15:57 - +55 21 96697-9379: Eu coloquei a variável de 1 até 10 23/02/2021 15:57 - viktor: Isso aí. Ele está dizendo "este é um número inteiro ou um conjunto de números inteiros" 23/02/2021 15:58 - viktor: Agora rode *summary(numero)* 23/02/2021 15:58 - +55 21 96697-9379: 23/02/2021 15:58 - viktor: Perfeito! 23/02/2021 15:58 - viktor: 👆🏼👆🏼 23/02/2021 15:59 - viktor: Vamos agora substituir essa sequência de 1 a 10 por um número apenas na nossa variável *numero* 23/02/2021 15:59 - viktor: *numero <- 1* 23/02/2021 16:00 - viktor: E depois novamente: *class(numero)* 23/02/2021 16:00 - viktor: O q ele retornou? 23/02/2021 16:00 - +55 21 97008-5878: Numeric 23/02/2021 16:01 - viktor: Isso! Esta é uma variável numérica apenas. (Ok. Integer tb é um tipo de variável numérica, que não comporta números decimais) 23/02/2021 16:01 - viktor: E agora: *numero <- "1"* 23/02/2021 16:01 - viktor: Qual a classe disso? 23/02/2021 16:02 - +55 21 96697-9379: pra mim tb 23/02/2021 16:02 - +55 21 97008-5878: Character 23/02/2021 16:02 - viktor: Perfeito. Logo, aprendemos que, qndo usamos as aspas, o R entende números como texto 23/02/2021 16:03 - +55 21 96697-9379: não aparece mais nada dps dessa função 23/02/2021 16:03 - viktor: Rode: *numero <- "1"* E depois: *class(numero)* 23/02/2021 16:04 - viktor: Deve aparecer *character* para você 23/02/2021 16:04 - +55 21 96697-9379: sim, apareceu agora 23/02/2021 16:04 - viktor: É isso 👆🏼👆🏼 23/02/2021 16:05 - +55 21 96697-9379: ahhh simmm 23/02/2021 16:05 - viktor: Outro tipo de variável diferente: *numero <- 1 == 1* *class(numero)* O que aparece? 23/02/2021 16:05 - +55 21 97008-5878: True 23/02/2021 16:06 - +55 21 97008-5878: Mas aparece no ambiente, que louco 23/02/2021 16:06 - +55 21 96697-9379: pra mim apareceu logical 23/02/2021 16:06 - +55 21 97008-5878: Não rodei o class kkkkk 23/02/2021 16:06 - +55 21 96697-9379: ahhh no numero apareceu o TRUE tb 23/02/2021 16:07 - +55 21 97008-5878: Agora deu logical 23/02/2021 16:07 - +55 21 96697-9379: aqui foi no console 23/02/2021 16:07 - viktor: É isso 😊 O q estamos fazendo aqui? Vou explicar: 23/02/2021 16:07 - +55 21 96697-9379: e aqui foi no values 23/02/2021 16:08 - viktor: (1) "R, por favor, crie uma variável chamada *numero*, para mim, e coloque nessa variável o valor *1 == 1*, ou seja, "um é igual a um" 23/02/2021 16:09 - viktor: (2) Por que eu preciso de dois *==*? Pq *=* para o R é o mesmo que *<-*. Então, para diferenciar, quando se trata de um operador lógico e não de um comando do R, eu uso *==*. Ou seja, neste exemplo, estou dizendo 1 é igual a 1 23/02/2021 16:10 - viktor: (3) Como esta é uma operação lógica, quando eu rodo *class(numero)*, ele precisa me retornar *logical*, ou seja, "esta é uma variável lógica, Viktor" 23/02/2021 16:11 - viktor: (4) E como 1 é mesmo igual 1, o valor que ele armazena na memória do computador, em resposta a esta operação lógica, é *TRUE*, ou seja, "sim, 1 é igual a 1 mesmo, então, é verdadeira essa afirmação" 23/02/2021 16:11 - viktor: Deu para entender? 23/02/2021 16:11 - +55 21 97008-5878: Mas não como armazenar a operação em si? Só a resposta? 23/02/2021 16:11 - +55 21 97008-5878: eem como * 23/02/2021 16:12 - +55 21 97008-5878: tem como* (difícil rs) 23/02/2021 16:12 - viktor: hehehe 23/02/2021 16:12 - viktor: Não, como se trata de uma operação, ele não armazena a operação em si, apenas o resultado. É como uma calculadora 23/02/2021 16:12 - viktor: A mesma coisa acontece no exemplo seguinte 23/02/2021 16:13 - +55 21 96697-9379: então essa afirmação que 1 é igual a 1 foi respondida como verdade pq vc criou a lógica ne?? 23/02/2021 16:13 - viktor: Aquele que eu pedi para você rodar antes 23/02/2021 16:13 - viktor: Exato 23/02/2021 16:13 - viktor: Rodem agora: *numero <- 2021-02-09* 23/02/2021 16:13 - viktor: E depois: *numero* 23/02/2021 16:14 - +55 21 96697-9379: achei que poderia ser do sistema R mesmo 23/02/2021 16:15 - +55 21 96697-9379: deu [1]2010 23/02/2021 16:15 - viktor: Ah, entendi o que você quis dizer. Quem calcula o resultado não sou eu, é o R!!! Experimente roda: *numero <- 1 == 2* E veja o que ele vai responder. Ele provavelmente dirá que é *FALSE*, porque, ora bolas, 1 não é igual a 2 23/02/2021 16:16 - viktor: Isso! Pq nesse exemplo deu 2010?? 23/02/2021 16:16 - +55 21 97008-5878: Pq ele entende como subtração 23/02/2021 16:16 - viktor: Perfeito!! 23/02/2021 16:17 - +55 21 96697-9379: 😱😱😱😱😱 não imaginava 23/02/2021 16:17 - viktor: A gente lê e entende de cara q é uma data. Mas o R precisa de uma dica para isso. Se não, ele interpreta essa expressão como uma conta matemática (e armazena só o resultado) 23/02/2021 16:17 - +55 21 96697-9379: deu false mesmo 23/02/2021 16:18 - viktor: Primeira forma de dizer a ele q não é um número, nós já sabemos qual é: colocar aspas: *numero <- "2021-02-09"* Se rodarmos logo a seguir *class(numero)* Ele retornará q é *character* o tipo desta variável, pq, afinal, ele entendeu como texto e não como uma conta de subtração 23/02/2021 16:19 - viktor: 🤩🤩 23/02/2021 16:20 - viktor: Mas se quisermos mesmo q ele entenda como data, precisamos forçar um pouquinho mais: *numero <- as.Date("2021-02-09")* Agora sim, qndo rodarmos *class(numero)* ele dirá *Date* 23/02/2021 16:21 - viktor: Tudo ok até aqui? 23/02/2021 16:22 - viktor: Quase quase acabando por hoje 😊 23/02/2021 16:22 - +55 21 97008-5878: Sim, tudo bem 23/02/2021 16:22 - viktor: Ótimo! 23/02/2021 16:23 - viktor: Existe um outro tipo de variável no R q é parecida com texto mas não exatamente igual. Ele chama de factor. É o q normalmente em português chamamos de variável categórica 23/02/2021 16:24 - viktor: Ou seja, é um tipo de variável em q eu atribuo uma interpretação qualitativa sobre os meus dados 23/02/2021 16:24 - viktor: Se eu digo q alguém é branco, pardo ou preto, eu estou estabelecendo categorias 23/02/2021 16:24 - viktor: Se digo q é alto ou baixo, gordo ou magro, binário ou não-binário, em todos esses casos, estou lidando com *factors* 23/02/2021 16:25 - +55 21 96697-9379: tudo ok, professor!!! 😀 23/02/2021 16:27 - viktor: Se eu rodar esse comando aqui *tamanho <- factor(c("pequeno", "grande", "grande", "pequeno", "medio"))* O R entenderá q pequeno, medio e grande não são simplesmente textos mas níveis da minha variável categórica Por isso, qndo rodo apenas: *tamanho* Ele vai me retornar quais são esses níveis. E, qndo rodo *class(tamanho)* Ele vai me dizer q é *factor* 23/02/2021 16:28 - viktor: E eu posso também determinar a ordem dos meus níveis, pq, afinal, nós sabemos q pequeno é menor que médio e médio é menor q grande: *tamanho <- factor(c("pequeno", "grande", "grande", "pequeno", "medio"),* *levels = c("pequeno", "medio", "grande"), ordered = TRUE)* 23/02/2021 16:29 - +55 21 97008-5878: 23/02/2021 16:30 - viktor: Nesse primeiro exemplo, é aleatório. Calhou de a ordem alfabética ser a mesma q a ordem dos fatores hehehe (G < M < P) 23/02/2021 16:30 - +55 21 97008-5878: Ah kkkkkkkk 23/02/2021 16:30 - viktor: Nesse segundo exemplo, nós indicamos a ordem a ele 23/02/2021 16:31 - +55 21 97008-5878: Bem maneiro 23/02/2021 16:31 - +55 21 97008-5878: E na classe também aparece que tá na ordem 23/02/2021 16:32 - viktor: Exatamente! 23/02/2021 16:33 - +55 21 96697-9379: eu já tava me perguntando disso kkkk 23/02/2021 16:34 - viktor: Vou deixar para vocês estudarem em casa o exercício sobre médias e medianas, para vocês testarem e depois me dizerem onde está o problema rsrs. Está no nosso script nas linhas 146 a 167 23/02/2021 16:35 - viktor: E quero fazer dois últimos exercícios com vocês aqui 23/02/2021 16:35 - viktor: O primeiro é de instalação de pacotes no R 23/02/2021 16:35 - viktor: E o segundo de exportação de dados 23/02/2021 16:35 - viktor: Podemos? 23/02/2021 16:35 - +55 21 97008-5878: Podemos 23/02/2021 16:36 - +55 21 96697-9379: podemos 23/02/2021 16:37 - viktor: Ótimo! Como falei com vocês antes, o R tem uma linguagem base e uma série de pacotes (ou plugins) que funcionam como extensões das suas funcionalidades. Em vários momentos, nós vamos recorrer a esses pacotes para lidar com os dados, pq eles facilitam muito a nossa vida. Por exemplo, se eu quero fazer um gráfico bonitão e vistoso, eu posso usar o R base simples e puro, mas é MUITO mais fácil usar o pacote ggplot2 para isso, q é simplesmente o melhor software de visualização de dados no mercado hoje 23/02/2021 16:39 - viktor: O ggplot2 e outros vários pacotes q usaremos nesse curso frequentemente conversam entre si e desenvolvem uma linguagem própria, com sintaxes parecidas etc. O maior e mais importante conjunto de pacotes do R para ciência de dados é o chamado Tidyverse 23/02/2021 16:40 - viktor: O Tidyverse é composto pelo ggplot2 (visualização de dados), pelo dplyr (manipulação de dados), pelo stringr (manipulação de texto), e mais uma série de outros pacotes, todos super úteis para nós 23/02/2021 16:40 - viktor: Na próxima aula (síncrona!! UFA), vamos aprender um pouco mais sobre o dplyr 23/02/2021 16:40 - viktor: Mas antes precisamos aprender a instalar pacotes no nosso R 23/02/2021 16:41 - viktor: Toda vez que vamos usar um pacote novo, o R nos requer dois passos: primeiro você instala e depois você requisita esse pacote 23/02/2021 16:41 - viktor: A instalação só precisa ser feita uma única vez 23/02/2021 16:41 - viktor: Se você instalou um pacote, não precisa instalá-lo novamente, a menos q mude de computador ou algo assim 23/02/2021 16:42 - viktor: Mas toda vez q você fecha o R e abre novamente, você precisa requisitar novamente o pacote q vai usar 23/02/2021 16:42 - ‎+55 21 99176-7877 saiu 23/02/2021 16:42 - +55 21 97008-5878: Que triste 23/02/2021 16:43 - +55 21 96697-9379: como assim requisitar??? 23/02/2021 16:43 - viktor: É bem simples na verdade, nada demais. E não demora muito 23/02/2021 16:43 - viktor: Vamos ver como funciona: 23/02/2021 16:43 - viktor: Para instalar o pacote *dplyr*, rodem o comando: *install.packages("dplyr")* 23/02/2021 16:44 - +55 21 97008-5878: Eita 23/02/2021 16:44 - +55 21 97008-5878: Aparece muita coisa louca 23/02/2021 16:45 - viktor: hahahahaha 23/02/2021 16:45 - viktor: 23/02/2021 16:45 - +55 21 97008-5878: Eu *acho* que deu certo 23/02/2021 16:46 - viktor: Como sei q funcionou? Simples: se não funcionar, ele vai retornar para mim uma mensagem de ERRO. Simples assim 23/02/2021 16:46 - +55 21 97008-5878: Então deu kkkkkkk 23/02/2021 16:46 - viktor: Algumas vezes, não é o nosso caso agora, a instalação de um pacote requer a instalação prévia de um outro pacote. Aí ele retorna um ERRO dizendo isso pra gente p.ex. 23/02/2021 16:46 - +55 21 96697-9379: simples kkkkkkkkkkkkk 23/02/2021 16:47 - viktor: Eu também posso instalar pacotes de um jeito fácil e visual: 23/02/2021 16:47 - viktor: 23/02/2021 16:47 - viktor: Nessa aba *Packages*, basta clicar em *Install* e escrever o nome do pacote 23/02/2021 16:47 - viktor: Ele até autocompleta pra gente 23/02/2021 16:48 - viktor: Tentem instalar o ggplot2 dessa forma 23/02/2021 16:49 - +55 21 97008-5878: Foi 23/02/2021 16:50 - viktor: Ótimo! Pacotes instalados. Como requisitá-los? 23/02/2021 16:50 - viktor: Usem o comando *library(dplyr)* Para requisitar a biblioteca (ou pacote) dplyr 23/02/2021 16:50 - +55 21 96697-9379: 23/02/2021 16:51 - viktor: Tente ggplot2 23/02/2021 16:51 - +55 21 97008-5878: 23/02/2021 16:52 - viktor: É isso. Não se preocupe com as mensagens em vermelho. A menos que apareça ERRO, não há nenhum erro aí rsrs 23/02/2021 16:52 - +55 21 97008-5878: Vermelho assusta kkkkkkkk 23/02/2021 16:53 - +55 21 96697-9379: 23/02/2021 16:53 - +55 21 97008-5878: Isso aqui agora, @5521966979379 23/02/2021 16:53 - viktor: Sim. Mas é basicamente um alerta nesse caso. Ele está te dizendo q algumas das funções do dplyr têm o mesmo nome do R Base. Então, você precisa arrumar um modo de diferenciá-las. Não é nenhum problema pra gente agora. E por isso ele não classifica como ERRO 23/02/2021 16:53 - +55 21 96697-9379: Mas onde acho esse comando??? 23/02/2021 16:54 - +55 21 97008-5878: Eu escrevi 23/02/2021 16:54 - viktor: Sim. Eu fugi um pouquinho do nosso script rsrs. Mas é a mesma sequência de comandos q está nas linhas 180 a 183 23/02/2021 16:55 - viktor: Ali estamos instalando o ggplot2, o tidyverse, o dplyr e o tidyr, vários pacotes q usaremos 23/02/2021 16:55 - viktor: O Tidyverse engloba todos eles na vdd 23/02/2021 16:55 - viktor: Então se eu instalo o Tidyverse e requisito o Tidyverse, não preciso ficar instalando ou requisitando um por um 23/02/2021 16:55 - +55 21 96697-9379: Aí digita no console do R mesmo né? 23/02/2021 16:56 - viktor: Isso 23/02/2021 16:56 - +55 21 97008-5878: Já posso instalar então? 23/02/2021 16:56 - viktor: Pode sim 23/02/2021 16:56 - viktor: *install.packages()* e *library()* então são duas funções que usaremos MUITO no nosso curso, para instalar e requisitar os pacotes q usaremos 23/02/2021 16:57 - viktor: 23/02/2021 16:58 - +55 21 97008-5878: Ah, então é isso! Pensei que estava mostrando só que tenho instalado 23/02/2021 16:58 - viktor: Tudo o q está instalado aparece na lista e o q está em uso no momento aparece ticado 23/02/2021 16:59 - viktor: Na próxima aula, começamos a partir desses comandos, já para instalar e usar o pacote dplyr!! 23/02/2021 16:59 - viktor: Agora... 23/02/2021 16:59 - viktor: ÚLTIMO EXERCÍCIO 23/02/2021 16:59 - viktor: JURO 23/02/2021 16:59 - viktor: Vamos exportar os dados q inserimos no R 23/02/2021 16:59 - +55 21 99520-0045: 23/02/2021 17:00 - viktor: Você pode instalar @5521995200045. Mas, em princípio, não é um ERRO, só um alerta mesmo. Aparentemente a instalação funcionou normalmente 23/02/2021 17:01 - +55 21 96697-9379: 23/02/2021 17:01 - +55 21 97008-5878: A instalação desse TidyVerse ainda tá rolando 😬 23/02/2021 17:01 - +55 21 99520-0045: tranquilo, valeu 23/02/2021 17:01 - viktor: É grande, demora um pouquinho mais 23/02/2021 17:01 - viktor: Linha 183 cometi um erro de digitação no script rsrs 23/02/2021 17:02 - viktor: O correto é *library(tidyverse)* 23/02/2021 17:02 - +55 21 96697-9379: Opssss 🤣🤣🤣🤣 23/02/2021 17:02 - viktor: Faltou um S 23/02/2021 17:02 - +55 21 97008-5878: Foi 🥳 23/02/2021 17:03 - viktor: ATENÇÃO para o ÚLTIMO EXERCÍCIO de hoje rsrsrs 23/02/2021 17:03 - viktor: Linha 193 23/02/2021 17:03 - +55 21 97008-5878: 23/02/2021 17:03 - viktor: *write.csv(boletim,"~/Downloads/boletim.csv", fileEncoding = "UTF-8")* (não rodem ainda) 23/02/2021 17:04 - viktor: Não se preocupe. É novamente uma sobreposição com o R Base. Mas não é um erro não. Tudo ok 23/02/2021 17:05 - viktor: Ele está dizendo: "olha, tem uma função chamada *filter()* aqui no dplyr tem o mesmo nome no R Base. Então, qndo você for usar a função *filter()* do R Base, você precisa dizer q é do R Base e não do dplyr ok?" 23/02/2021 17:05 - +55 21 97008-5878: Ah, blz! 23/02/2021 17:06 - viktor: Voltando então. Linha 193 23/02/2021 17:06 - viktor: *ATENÇÃO* para um detalhe importante 23/02/2021 17:06 - viktor: Eu uso MacOS aqui, q é um sistema baseado no Unix, como falei a vocês. Vocês, na maioria, usam Windows. Então, vocês precisam alterar um parâmetro nesse comando antes de executá-lo 23/02/2021 17:07 - viktor: "~/Downloads/boletim.csv" é o path onde eu quero q o R salve o arquivo que vou exportar. No meu sistema operacional, isso vai salvar o arquivo diretamente na minha pasta de Downloads 23/02/2021 17:07 - viktor: Mas no sistema operacional de vocês é diferente 23/02/2021 17:08 - viktor: O Windows usa um sistema de pastas q não apenas inverte a ordem das barras como tem nomes específicos para a hierarquia de pastas 23/02/2021 17:10 - viktor: No Windows, vocês precisam procurar o caminho correto para a pasta em q querem salvar esse arquivo 23/02/2021 17:10 - viktor: Por exemplo, uma possibilidade é algo como: *C:\Usuarios\nomedousuario\Meus Documentos\boletim.csv* 23/02/2021 17:10 - viktor: Onde numedousuario é o nome do usuário no computador de vocês 23/02/2021 17:11 - viktor: Substituam então *~/Downloads/boletim.csv* pelo caminho da pasta de preferência de vocês e rodem o comando da linha 193 23/02/2021 17:11 - viktor: E me digam o resultado rsrs 23/02/2021 17:12 - +55 21 99520-0045: mudo o fileEncoding pra latin1 também? 23/02/2021 17:12 - viktor: Boa! Testem as duas opções! 23/02/2021 17:13 - +55 21 97008-5878: latin1 tudo minúsculo mesmo? Ou não tem diferença? 23/02/2021 17:14 - viktor: *Latin-1* ou *ISO-8859-1* 23/02/2021 17:14 - viktor: Minúscula e maiúscula fazem diferença sempre no R 23/02/2021 17:15 - viktor: Conseguiram? 23/02/2021 17:15 - +55 21 97008-5878: Mudei aqui 23/02/2021 17:15 - viktor: Por aqui, tenho um lindo arquivo CSV 23/02/2021 17:15 - viktor: 23/02/2021 17:15 - +55 21 97008-5878: Deu erro 23/02/2021 17:15 - +55 21 99520-0045: 23/02/2021 17:17 - +55 21 97008-5878: 23/02/2021 17:17 - viktor: Né isso não. É q ele está encrencando pq \F é um comando no R tb. Tentem usar as barras simples do Unix (ao invés da contrabarra do Windows) 23/02/2021 17:17 - +55 21 97008-5878: Ou só copiei o caminho que estava lá na pasta 23/02/2021 17:17 - +55 21 97008-5878: Q 23/02/2021 17:17 - viktor: / = barra simples \ = contrabarra 23/02/2021 17:17 - +55 21 97008-5878: Ah 23/02/2021 17:18 - +55 21 99520-0045: 23/02/2021 17:19 - +55 21 96697-9379: 23/02/2021 17:19 - +55 21 97008-5878: Deu não 23/02/2021 17:19 - viktor: Ele está dizendo q você já está em Latin-1. Tente rodar esse comando sem parâmetro de encoding 23/02/2021 17:20 - +55 21 99520-0045: foi!! 23/02/2021 17:20 - +55 21 99520-0045: abriu no excel 23/02/2021 17:21 - +55 21 99520-0045: 23/02/2021 17:21 - viktor: Nope @5521966979379. Rode o seguinte: *write.csv(boletim,"C:/Usuarios/EWERTON/Downloads/boletim.csv", fileEncoding = "UTF-8")* 23/02/2021 17:22 - +55 21 97008-5878: Mesmo quando troquei a barra não foi, ficou até pior 23/02/2021 17:22 - +55 21 96697-9379: 23/02/2021 17:22 - viktor: AÊÊ!!! Ainda está um pouquinho cagado, pq o Excel precisa saber q esse arquivo é um CSV para lê-lo direito. Repare q ele não criou uma tabela certinha. Isso é pq arquivos CSV precisam ser importados para o Excel. Mas, sobre isso, falamos mais adiante rsrs. Aqui, por enquanto, deu tudo CERTO 🤩 23/02/2021 17:23 - viktor: Esse diretório q você me passou o caminho existe mesmo? Não está faltando algum acento ou alguma pasta a ser criada? 23/02/2021 17:23 - viktor: Qual o erro @5521970085878​? 23/02/2021 17:24 - +55 21 97008-5878: Esse aqui 23/02/2021 17:24 - +55 21 97008-5878: Nem sei o que são dígitos hexadecimais em cadeia kkkkkkkkkk 23/02/2021 17:24 - viktor: Esse aqui tá usando a contrabarra. Você já tentou com a barra simples? 23/02/2021 17:25 - +55 21 97008-5878: Já sim 23/02/2021 17:25 - +55 21 97008-5878: Também não foi 23/02/2021 17:25 - viktor: E qual o erro com a barra simples no lugar da contrabarra? rsrs 23/02/2021 17:26 - +55 21 97008-5878: 23/02/2021 17:26 - viktor: hahahaha Ok, não vou comentar essa esquizofrenia 23/02/2021 17:26 - viktor: Mas tá falando o nome de um arquivo no final do caminho aí 23/02/2021 17:27 - viktor: /boletim.csv no final 23/02/2021 17:27 - viktor: Depois de Exercício R 23/02/2021 17:28 - +55 21 97008-5878: Deu a mesma coisa 23/02/2021 17:29 - +55 21 97008-5878: Do negócio de hexadecimal 23/02/2021 17:29 - viktor: Manda o erro 23/02/2021 17:29 - +55 21 97008-5878: Mesmo que esse aqui 23/02/2021 17:29 - viktor: Mas esse aqui é o erro da contrabarra. Se você está usando a barra simples agora, não pode dar esse erro uai 23/02/2021 17:29 - +55 21 96697-9379: 23/02/2021 17:30 - +55 21 97008-5878: Mudei a barra agora e deu outro erro 😂 23/02/2021 17:30 - viktor: Aqui tem um *>* a mais no início da linha. Tira esse símbolo q vai! 😊 23/02/2021 17:31 - viktor: Manda o erro q eu consigo ver o q é 23/02/2021 17:31 - +55 21 97008-5878: 23/02/2021 17:32 - viktor: Mesmo q aconteceu com @5521995200045 antes. Você já está usando Latin-1. Então ele diz q não consegue converter para o q você já está usando. Retire esse parâmetro de fileEncoding do comando e rode de novo 23/02/2021 17:32 - +55 21 97008-5878: SUCESSO AMÉM 23/02/2021 17:33 - +55 21 97008-5878: 23/02/2021 17:34 - viktor: 23/02/2021 17:35 - viktor: Faltando apenas @5521966979379 para termos 100% de sucesso hoje rsrsrs 23/02/2021 17:36 - +55 21 96697-9379: 23/02/2021 17:37 - viktor: Pelo q estou entendendo, ele está dizendo q alguma dessas pastas não existe. Você tem mesmo uma pasta chamada Downloads dentro da sua pasta Ewerton? 23/02/2021 17:38 - +55 21 96697-9379: Tem Só que essa pasta pode ser acessada tb separadamente 23/02/2021 17:38 - +55 21 96697-9379: Tem que ser exatamente nessa pasta C? 23/02/2021 17:38 - +55 21 96697-9379: Ou pode ser outras? 23/02/2021 17:39 - +55 21 96697-9379: 23/02/2021 17:39 - viktor: Não necessariamente. Você pode salvar em qq lugar, inclusive HDs externos 23/02/2021 17:39 - viktor: Usuários tem acento rsrs 23/02/2021 17:39 - +55 21 96697-9379: Ahh sim Vou tentar em outra então 23/02/2021 17:39 - +55 21 96697-9379: Será que é por isso?? Kkk 23/02/2021 17:40 - viktor: Tente colocar o acento. O R distingue acentuação 23/02/2021 17:40 - +55 21 96697-9379: Erro de novo 23/02/2021 17:41 - viktor: Tente outra pasta então e vamos ver se funciona. Talvez esta tenha alguma restrição de escrita 23/02/2021 17:42 - +55 21 99520-0045: 23/02/2021 17:42 - +55 21 97008-5878: Vamos ver importação hoje ainda ou só aula que vem? 23/02/2021 17:42 - +55 21 99520-0045: só vai precisar trocar as barras 23/02/2021 17:42 - +55 21 99520-0045: caso você esteja escrevendo cada diretório por vez, @5521966979379 23/02/2021 17:42 - viktor: Aula q vem! Já fritamos muito por hoje! rsrsrs 23/02/2021 17:43 - viktor: Boa! 23/02/2021 17:43 - +55 21 97008-5878: Ótima aula! Até semana que vem ✨ 23/02/2021 17:43 - viktor: 😘😘 23/02/2021 17:44 - +55 21 96697-9379: Como assim?? Onde? 23/02/2021 17:46 - +55 21 99520-0045: abre a pasta que você quer que o boletim seja instalado. nela, você clica com o botão direito e vai aparecer essas opções. escolhe copiar endereço como texto e joga no RStudio. Vai ter que trocar as barras e adicionar /boletim.csv no final do endereço 23/02/2021 17:46 - +55 21 99520-0045: indo pelo explorador de arquivos do windows mesmo 23/02/2021 17:48 - +55 21 96697-9379: 23/02/2021 17:48 - +55 21 96697-9379: É aqui?? 23/02/2021 17:48 - +55 21 96697-9379: Achei esse arquivo na pasta documentos 23/02/2021 17:48 - viktor: Olhaí o arquivo salvo! hahahaha 23/02/2021 17:49 - +55 21 99520-0045: já conseguiu instalar? 23/02/2021 17:49 - +55 21 96697-9379: Então instalou? Kkkkkkkk 23/02/2021 17:49 - viktor: Os dados foram exportados sim 23/02/2021 17:49 - viktor: Você pode pedir para abrir esse arquivo com o Bloco de Notas ou com o Excel 23/02/2021 17:50 - viktor: E você vai ver o conteúdo mais ou menos parecido com o q mostramos aqui nas nossas telas 23/02/2021 17:50 - +55 21 96697-9379: 23/02/2021 17:50 - viktor: (Só precisa saber depois q pasta é essa q você salvou esse arquivo hahaha) 23/02/2021 17:50 - viktor: É isso. Perfeito! 23/02/2021 17:51 - +55 21 96697-9379: 23/02/2021 17:51 - viktor: Isso. Depois use o truque do @5521995200045 para descobrir o caminho direitinho q leva a ela 23/02/2021 17:52 - viktor: Missão cumprida por hoje, pessoal! Na semana que vem, temos uma *aula síncrona* para explorarmos um pouquinho mais do R 23/02/2021 17:52 - viktor: Obrigado demais @5521970085878 @5521966979379 e @5521995200045 pela companhia ❤️❤️ 23/02/2021 17:52 - +55 21 96697-9379: Beleza. Vou continuar tentando aqui..obrigado, professor!!! Obrigado pela dica, @5521995200045 !! 23/02/2021 17:53 - viktor: Qualquer dúvida restante, estou por aqui. Aos demais, que não conseguiram nos acompanhar em tempo real, pratiquem, por favor, para podermos avançar com segurança de que não tem ninguém perdido por aí entre nós!! 23/02/2021 17:54 - +55 21 99520-0045: valeu!! boa tarde, gente ☺️ 23/02/2021 17:54 - +55 21 96697-9379: 23/02/2021 17:54 - +55 21 97008-5878: 23/02/2021 17:54 - +55 21 99520-0045: Viktor, esqueci de avisar, mas o Twitter retornou meu formulário já, também não fui aprovado 23/02/2021 17:54 - +55 21 97008-5878: Eles te retornaram por email? 23/02/2021 17:55 - +55 21 99520-0045: simm 23/02/2021 17:55 - +55 21 99520-0045: no mesmo dia 23/02/2021 17:55 - viktor: Tudo bem, sem problemas. Eles são meio chatos às vezes. Usaremos um token nosso para brincar por aqui e depois vocês tentar conseguir autorização com outra conta solicitando novamente 23/02/2021 17:55 - +55 21 97008-5878: Vish, não recebi resposta até agora kkkkkk 23/02/2021 17:55 - viktor: Não se preocupem se não rolar. Temos plano B. Mas vamos manter os dedos cruzados para aqueles q ainda estão sendo avaliados hehe 23/02/2021 17:56 - +55 21 99520-0045: pediram 2 ou 3 vezes a parte dos links do formulário 23/02/2021 17:56 - +55 21 99520-0045: no final até o linkedin eu tava mandando 23/02/2021 17:57 - viktor: hahahaha Povo chato mesmo, q se há de fazer 🤷🏽‍♂️ 23/02/2021 17:57 - viktor: Enqnto isso, fornecem tokens a rodo por aí para o povo bolsonarista q cria perfis fakes 23/02/2021 17:58 - +55 21 97008-5878: 23/02/2021 18:01 - +55 21 96697-9379: 23/02/2021 18:02 - +55 21 96697-9379: Será que são as aspas??? 23/02/2021 18:03 - viktor: É o *>* q você tá copiando da linha anterior. Retira ele q vai 23/02/2021 18:06 - +55 21 96697-9379: 23/02/2021 18:06 - +55 21 96697-9379: Não sei mais o que faço 23/02/2021 18:09 - viktor: Esse é um outro erro @5521966979379. Não se desespere rsrs 23/02/2021 18:10 - viktor: O q está faltando agora é o C:/ antes de Bibliotecas 23/02/2021 18:11 - viktor: Ele está informando q essa pasta q você está indicando não existe. Então precisamos saber pq ele está dizendo isso. Minha impressão inicial é q está faltando esse C:/ aí no início. Teste e veja se funciona 23/02/2021 18:12 - +55 21 96697-9379: 23/02/2021 18:16 - viktor: Ele ainda diz q essa pasta não existe... Preciso ver as pastas no seu computador para entender melhor o problema, desculpe. Vamos fazer o seguinte: na próxima semana, no início da aula, você compartilha sua tela conosco e tentamos resolver juntos, pode ser? 23/02/2021 18:17 - +55 21 96697-9379: Ta bom, professor 23/02/2021 18:18 - viktor: Provavelmente é alguma bobagenzinha de nome de pasta e subpasta. Mas como não estou familiarizado com o seu computador não tenho como chutar uma pasta de cabeça aqui... 23/02/2021 18:18 - viktor: Daí semana q vem fazemos isso. Me cobre! 23/02/2021 18:55 - +55 21 96697-9379: Cobro sim!!rs 24/02/2021 19:50 - ‎+55 21 97027-9905 saiu 28/02/2021 15:29 - viktor: Queridos e queridas, como nós aprendemos, até aqui, uma série de comandos diferentes, para organizar melhor nossa aprendizagem, eu dividi em dois scripts o que vimos até aqui. No link abaixo, vocês podem acessar o script da aula2 e o script da aula3 separadamente, com tudo o que vimos nas nossas primeiras aulas. Na terça que vem, teremos mais uma aula síncrona, e vou adicionar em breve um script para nos guiar na aula4 também. Vocês podem baixar e acompanhar tudo o que fizemos acessando a pasta de nosso curso no gitHUB: https://github.com/ombudsmanviktor/workshop_rstats -- Não esqueçam de treinar os comandos em casa nesse meio tempo! 😉 Bom domingo a todos e todas! 28/02/2021 17:28 - +55 21 99291-6514: valeu, viktor! vai ajudar muito :D 28/02/2021 22:59 - +55 21 99779-8710: Valeeeu, Viktor 01/03/2021 10:09 - viktor: Outro material útil também para quem está aprendendo são as chamadas "cheatsheets" (colas) que o povo de programação prepara. Envio por aqui três versões diferentes. Uma para o R Base, uma para o R Studio (IDE) e uma última com a tradução em português da explicação sobre vários comandos 01/03/2021 10:09 - viktor: 01/03/2021 10:10 - viktor: 01/03/2021 10:10 - viktor: 01/03/2021 10:20 - +55 21 99291-6514: perfeito 01/03/2021 10:43 - +55 11 98373-5115: Muito bom, obrigada por compartilhar professor. 01/03/2021 10:46 - Isis Lorena: Valeu, Viktor! 01/03/2021 17:15 - Manoela Mayrink: Acabei agora de ver a aula da terça passada e tô até suando aqui kkkkkk 01/03/2021 17:17 - viktor: 🤷🏽‍♂️ 01/03/2021 17:18 - Manoela Mayrink: Muita emoção 01/03/2021 17:19 - Manoela Mayrink: Porém entendi melhor do que a apresentação da dissertação do meu namorado na filosofia, que tá rolando agorq 01/03/2021 17:19 - Manoela Mayrink: Esta transcende demais minha mente kkkkkk 01/03/2021 17:20 - viktor: Filosofia e R têm um grau de dificuldade próximo, mas R empolga mais rsrs 01/03/2021 17:20 - Manoela Mayrink: Eu tava tentando fazer os dois ao mesmo tempo. 01/03/2021 17:20 - Manoela Mayrink: 01/03/2021 17:20 - viktor: Realmente aí é difícil 02/03/2021 09:12 - viktor: Bom dia pessoal. Logo mais às 14h temos mais um encontro síncrono do nosso curso. Não percam. Hoje a brincadeira começa a ficar séria 😊 02/03/2021 09:35 - Manoela Mayrink: 02/03/2021 09:41 - +55 21 97008-5878: 02/03/2021 09:43 - viktor: Affe vocês me desanimam rsrs 02/03/2021 09:43 - +55 21 99291-6514: 02/03/2021 09:51 - viktor: 🙄🙄 02/03/2021 10:39 - +55 21 99893-7881: Professor, fui abrir o RStudio para repassar o que a gente viu, porém, quando eu escrevo os comandos no script não aparece na caixinha de baixo, o console, e eu não tenho a mínima ideia de como fazer isso funcionar. 02/03/2021 10:41 - viktor: Manda prints 02/03/2021 10:44 - +55 21 99893-7881: 02/03/2021 10:45 - viktor: Tudo certinho aparentemente @5521998937881 . Pouse o cursor sobre uma das linhas do script e clique em Executar/Run (ou aperte as teclas CRTL+ENTER) e o comando será executado. Qndo o comando for executado, a saída será gerada no seu Console logo abaixo 02/03/2021 10:46 - +55 21 99893-7881: Agora foi 02/03/2021 10:46 - +55 21 99893-7881: Obrigada 02/03/2021 10:46 - viktor: 🤩🤩 02/03/2021 12:18 - Manoela Mayrink: Pergunta polêmica: quanto tempo deve durar a aula hoje? Pra eu organizar minha vida aqui kkkkk 02/03/2021 12:57 - viktor: Isso só depende de vocês, nunca de mim rsrs 02/03/2021 12:58 - viktor: Temos algo em torno de cinco ou seis funções importantes para aprender hoje 02/03/2021 13:11 - Manoela Mayrink: Hahahahahaha beleza 02/03/2021 13:59 - viktor: https://meet.google.com/mhg-eqno-xxm *Aula 4* sala aberta 02/03/2021 15:09 - Manoela Mayrink: Meu compuyador deu um ruim doido aqui e travou tudo 02/03/2021 15:09 - Manoela Mayrink: Em breve volto rs 02/03/2021 15:42 - +55 21 96697-9379: 02/03/2021 15:42 - +55 21 96697-9379: 02/03/2021 15:45 - +55 21 96697-9379: 02/03/2021 16:23 - +55 21 97008-5878: 02/03/2021 16:24 - +55 21 97008-5878: 02/03/2021 16:25 - +55 21 99520-0045: 02/03/2021 16:25 - +55 21 99520-0045: 02/03/2021 16:25 - +55 21 98956-2539: 02/03/2021 16:25 - +55 11 98373-5115: 02/03/2021 16:25 - Isis Lorena: esse erro tmb tá dando aqui 02/03/2021 16:25 - Manoela Mayrink: 02/03/2021 16:26 - +55 21 99801-8179: 02/03/2021 16:26 - +55 21 96697-9379: 02/03/2021 16:27 - +55 21 96697-9379: 180 02/03/2021 16:28 - Manoela Mayrink: 😭 02/03/2021 16:29 - +55 21 99779-8710: 02/03/2021 16:30 - Manoela Mayrink: O meu segue tbm nesse mesmo erro para semprw 02/03/2021 16:31 - +55 21 98956-2539: Coloquei o 1 no console e deu esse erro :/ 02/03/2021 16:31 - +55 21 99520-0045: o meu continua esse erro também, já testei todos os números 02/03/2021 16:32 - +55 21 99520-0045: 02/03/2021 16:39 - viktor: 02/03/2021 16:43 - +55 21 99520-0045: 02/03/2021 16:54 - +55 21 99291-6514: 02/03/2021 17:00 - +55 21 96697-9379: 02/03/2021 17:00 - +55 21 96697-9379: Na questão 1 02/03/2021 17:13 - +55 21 96697-9379: 02/03/2021 17:18 - +55 21 96697-9379: 02/03/2021 17:19 - viktor: Isso é um csv 02/03/2021 17:19 - viktor: É um xls 03/03/2021 09:29 - viktor: Pessoal, acho que respondi todo mundo que tinha me escrito ontem e hoje com os exercícios. Se alguém não foi respondido, por favor, me avise. Aguardo ainda as respostas dos exercícios dos que não me entregaram até a próxima semana 😉 04/03/2021 09:48 - Manoela Mayrink: https://twitter.com/_fiquemsabendo/status/1367432418706219009?s=19 04/03/2021 12:05 - +55 21 97008-5878: 04/03/2021 12:07 - viktor: Ele está indicando um erro no pacote Tibble (que é um pacote do Tidyverse). Tente reinstalar o Tidyverse e ver se funciona 04/03/2021 12:17 - +55 21 97008-5878: Funcionou! Obrigada ✨ 04/03/2021 12:18 - viktor: 🤩🤩 05/03/2021 12:28 - Manoela Mayrink: Dica de pesquisa no R: https://www.atlas.jor.br/plataforma/api/ 09/03/2021 08:11 - viktor: Você apagou essa mensagem 09/03/2021 08:15 - viktor: Queridos e queridas, hoje temos mais uma aula assíncrona no período da tarde. Entrarei em contato com vocês por aqui logo mais. Por enquanto, deixo-os com algumas sugestões de gabarito para os exercícios que vimos na última aula: https://github.com/ombudsmanviktor/workshop_rstats/tree/main/aula4 Para aqueles que tentaram fazer o exercício: percebi algumas dificuldades comuns, que são, é claro, normais, para quem está iniciando. Mas, no geral, foram todos muito bem. Recomendações gerais: (1) Evitem utilizar acentos e caracteres especiais nos nomes das variáveis. Pode funcionar em um primeiro momento, mas pode dar zebra em outro, porque nem sempre o R lida bem com isso. Depende das configurações da sua máquina. E é sempre melhor termos um script q possa ser lido em qualquer lugar. (2) Evitem utilizar constantes numéricas nas suas variáveis. Sempre que possível, utilizem fórmulas. Se eu quero saber as cidades que têm população acima da média, não preciso saber a média de antemão, porque ela pode variar em função das populações de cada cidade. Por isso, nesses casos, o melhor é sempre inserir o cálculo da média na fórmula geral. (3) Salvem seus scripts sempre com nomedoarquivo.R ao invés de nomedoarquivo.txt. Assim, quando você me passarem os arquivos, o R já identifica se tratar de um script e abre automaticamente. Hoje, avançaremos um pouquinho mais, com novos verbos e funções no R 😊 09/03/2021 08:29 - +55 21 96697-9379: Professor, ainda posso mandar o meu script? Só não consegui responder a última questão 09/03/2021 08:39 - viktor: Se quiser um feedback, pode mandar sim. Mas, como já enviei o gabarito a vocês, estou considerando o prazo de entrega para fins de avaliação encerrado. Logo mais à tarde te respondo direitinho 09/03/2021 08:43 - +55 21 96697-9379: Vou mandar..achava que a entrega era até o horário da aula rsrs 09/03/2021 09:29 - ‎+55 21 99893-7881 saiu 09/03/2021 09:48 - Manoela Mayrink: 😭😭😭😭😭😭😭 09/03/2021 13:28 - viktor: Gente, talvez eu me atrase uns 15min ou 20min, porque precisei levar minha esposa para fazer uma pequena cirurgia hoje (ela está bem!). Já voltamos e vou tomar banho e almoçar aqui rapidão. Na sequência, começo a postar aqui alguns orientações gerais para a aula de hoje blz 09/03/2021 13:37 - +55 21 97008-5878: Tudo bem, professor! Melhoras para ela ✨ 09/03/2021 14:18 - viktor: ❤️ Obrigado Nat! 09/03/2021 14:19 - viktor: Vamos lá pessoal? Um olho na aula e outro no Supremo nesse momento 😊 09/03/2021 14:19 - viktor: Nosso script de hoje já está disponível em: https://github.com/ombudsmanviktor/workshop_rstats/blob/main/aula5/aula5.R 09/03/2021 14:23 - viktor: Eu estava conversando ontem com o @5521989562539 e ele me sugeriu fazermos alguns vídeos de tutorial para as aulas assíncronas. Hoje, infelizmente, não tive tempo para isso. Mas, se vocês acharem que vale a pena, na próxima aula assíncrona (daqui a 15 dias), eu posso preparar alguns vídeos curtinhos com o R Studio aberto, para vocês acompanharem os principais comandos. Por favor, não me peçam para aparecer nos vídeos e nem para fazer coisas rebuscadas com edição e tal. A ideia é apenas termos vídeos curtos mesmo, com o basicão da aula 09/03/2021 14:24 - viktor: Mas, hoje, vamos ainda seguir com alguns comandos do dplyr. Principalmente para trabalhar com dados relacionais, unir bancos de dados etc. Por isso, o script tem muitas explicações em texto, para vocês acompanharem. Algumas delas, vou reproduzir por aqui 09/03/2021 14:26 - +55 21 98956-2539: 😍 09/03/2021 14:26 - +55 21 97008-5878: Seria bem legal 09/03/2021 14:27 - viktor: Blz, levarei em consideração isso para a próxima. Temos ainda uma aula de revisão também no meio do curso. Então, repassaremos tudo o q vimos até aqui nela tb 09/03/2021 14:27 - viktor: Sobre hoje: 09/03/2021 14:28 - viktor: *O que são dados relacionais?* Dados relacionais são dados que estão em relação com outros, na mesma tabela ou em outra tabela. Muitas vezes, encontramos um conjunto de tabelas que dispõem de colunas relacionadas com outras colunas. Isso é muito comum p.ex. qndo estamos lidando com análise de redes sociais: 09/03/2021 14:29 - viktor: Você apagou essa mensagem 09/03/2021 14:29 - viktor: 09/03/2021 14:30 - viktor: 👆🏼Essa resolução está menos pior 09/03/2021 14:31 - viktor: Nesse grafo, por exemplo, eu monitorei 48h da votação do Senado que afastou Dilma do cargo de presidente, em abril de 2016 09/03/2021 14:31 - viktor: Os pontos amarelos são posts na fanpage do PMDB naquela ocasião 09/03/2021 14:32 - viktor: Os pontos verdes e vermelhos são pessoas que comentaram nesses posts com o sticker de vômito (os chamados vomitaços) 09/03/2021 14:32 - viktor: São 540 mil vômitos. Os pontos vermelhos são usuários q vomitaram mais de 100 vezes cada. O usuário que vomitou mais vezes em um post do PMDB vomitou 768 vezes 09/03/2021 14:33 - viktor: Reparem: os vômitos são dados relacionais, porque quem vomita está comentando em algum post. Há, portanto, uma origem (SOURCE) e um destino (TARGET) 09/03/2021 14:34 - viktor: Dessa forma, dados relacionais são dados que estão em relação uns com os outros. Outro exemplo: 09/03/2021 14:35 - viktor: 09/03/2021 14:36 - viktor: 👆🏼 Um gestor de uma biblioteca, para controlar os fluxos de empréstimo de livros de seu acervo, precisa de um banco de dados razoavelmente complexo, com muitos dados relacionais 09/03/2021 14:37 - viktor: Notem: uma tabela é responsável por guardar todos os dados dos livros; outra tabela é responsável por armazenar os empréstimos; outra, pelo cadastro de membros/sócios; e por aí vai... 09/03/2021 14:38 - viktor: Cada tabela tem um conjunto de metadados (ID_Livro, ISBN, Autor, Ano, Editora etc etc) 09/03/2021 14:39 - viktor: Alguns metadados "conversam" entre si, porque estão presentes em mais de uma tabela 09/03/2021 14:39 - viktor: É o que chamamos de *chaves* do nosso banco de dados 09/03/2021 14:39 - viktor: As chaves são identificadores únicos, que não se repetem 09/03/2021 14:41 - viktor: Dois livros podem ter o mesmo título, a mesma editora, ou serem publicados no mesmo ano. Por isso, precisamos muitas vezes de uma *chave*, isto é, um ID, para cada livro, que não se repita, e que nos permita identificar esse livro em nossa base 09/03/2021 14:43 - viktor: As chaves podem ser primárias ou estrangeiras. As chaves primárias são chaves que se referem à uma mesma tabela de dados. As chaves estrangeiras são chaves que são "emprestadas" de outra tabela. Por exemplo, para termos os dados de um empréstimo preenchidos, precisamos saber *que livro* foi emprestado, *para quem* ele foi emprestado, e *de que* biblioteca veio. Todas essas são chaves estrangeiras da nossa tabela de dados EMPRESTIMO 09/03/2021 14:44 - viktor: Hoje, nós vamos aprender a lidar com esse tipo de informação, isto é, unir tabelas com dados que se relacionam, criar identificadores numéricos, e por aí vai... Prontos? 09/03/2021 14:45 - +55 21 97008-5878: Pronta 😬 09/03/2021 14:46 - viktor: 😊 09/03/2021 14:46 - viktor: A primeira coisa que vamos aprender é a criar identificadores únicos em uma tabela que não possui esses IDs 09/03/2021 14:46 - +55 21 96697-9379: pronto 09/03/2021 14:47 - viktor: No nosso script de hoje, na linha 61, nós começamos com esse exercício (não se preocupem com as linhas anteriores, porque, como eu disse antes, esse script tem muitos comentários explicativos para vocês se guiarem) 09/03/2021 14:48 - viktor: Na linha 61, nós usamos aquele pacote com dados sobre pinguins para criar um novo dataframe: *pinguins <- penguins %>% select(species, island, body_mass_g, sex)* 09/03/2021 14:49 - viktor: 09/03/2021 14:50 - viktor: Notem que esse dataframe possui quatro variáveis (espécie, ilha, massa corporal e sexo), mas nenhuma delas é um identificador único. Nós queremos inserir um ID nela. Como fazemos? 09/03/2021 14:52 - viktor: Há duas formas diferentes. A primeira delas é mais "artesanal". Ela exige que a gente saiba quantas observações tem o nosso dataframe. Por isso, na linha 63, a gente roda um *count()* e, na sequência, já sabendo que temos 344 observações, a gente cria uma nova coluna com uma sequência numérica, de 1 a 344 09/03/2021 14:52 - viktor: *count(pinguins)* *pinguins <- pinguins %>%* *mutate(id_pinguim = seq(1:344))* 09/03/2021 14:53 - viktor: Mas, como vimos no nosso exercício da aula passada, é sempre melhor não dependermos de constantes, trabalharmos apenas com variáveis no nosso script... 09/03/2021 14:54 - viktor: Por isso, na linha 67, há outra alternativa para gerar essa mesma coluna, que simplesmente atribui o número da linha como ID daquela observação (*row_number*): *pinguins <- pinguins %>%* *mutate(id_pinguim = row_number())* 09/03/2021 14:55 - viktor: Agora, meu dataframe tem um identificador único numérico para cada linha: 09/03/2021 14:55 - viktor: 09/03/2021 14:56 - +55 21 96697-9379: tá dizendo pra mim que não é possível encontrar a função "%%" 09/03/2021 14:56 - viktor: Sim. Estou testando vocês para ver se estão todos atentos rsrs. Caso esse erro apareça, é sinal de q vocês ainda precisam requisitar os pacotes que estão usando. Vocês não fizeram isso hoje ainda! 09/03/2021 14:57 - +55 21 97008-5878: Não entendi esse row_number. E meu dataframe ja está com uma coluna de números (a primeira), não dá para usar ela? 09/03/2021 14:57 - viktor: Na linha 9, vocês encontram os pacotes: *library(dplyr)* *library(magick)* *library(palmerpenguins)* 09/03/2021 14:57 - +55 21 96697-9379: ah ta kkkkk 09/03/2021 14:58 - viktor: Esse segundo, caso vocês não tenham ainda, precisa ser instalado: *install.packages(magick)* 09/03/2021 14:59 - +55 21 99801-8179: Pra mim não abriu o dataframe 09/03/2021 15:00 - viktor: *row_number()* simplesmente atribui o número da linha como valor em uma coluna. Ele vai basicamente numerar a sua tabela, só isso mesmo... E, sim, quando você pede para o R Studio exibir seu dataframe, ele normalmente apresenta uma numeração ao lado, para facilitar a sua visualização. Mas esses números não fazem parte da sua tabela. Estão ali só para te guiar mesmo. Por isso, se queremos trabalhar com dados relacionais, precisamos fazer com q esses números sejam incorporados na nossa tabela, como uma variável 09/03/2021 15:00 - viktor: O que houve? 09/03/2021 15:02 - +55 21 99801-8179: Eu requisitei o pacote, mas não lembro como ele vira uma variável 09/03/2021 15:03 - +55 21 96697-9379: o dplyr tá dando erro pra mim 09/03/2021 15:03 - +55 21 96697-9379: o magick funcionou normalmente 09/03/2021 15:04 - viktor: Rode esses comandos: *library(palmerpenguins)* *pinguins <- penguins %>% select(species, island, body_mass_g, sex)* e veja se um dataframe chamado pinguins vai aparecer no seu ambiente (environment) 09/03/2021 15:04 - viktor: 09/03/2021 15:04 - viktor: Qual erro? 09/03/2021 15:05 - +55 21 96697-9379: Erro: package or namespace load failed for ‘dplyr’ in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]): there is no package called ‘tibble’ 09/03/2021 15:05 - viktor: Rode: *library(tidyverse)* 09/03/2021 15:06 - viktor: Tudo certo @5521970085878 @5521966979379 @5521998018179​? 09/03/2021 15:07 - +55 21 96697-9379: Erro: package or namespace load failed for ‘tidyverse’ in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]): there is no package called ‘tibble’ Além disso: Warning message: package ‘tidyverse’ was built under R version 4.0.4 09/03/2021 15:07 - +55 21 97008-5878: Sim 09/03/2021 15:07 - +55 21 99801-8179: meu R travou rs 09/03/2021 15:08 - viktor: Normal. Todo santo dia passo por isso quanto estou mexendo com um banco grande rsrs. Só fechar e começar de novo 09/03/2021 15:09 - viktor: Tenta: *install.packages("tidyverse", type="binary")* e depois *library(tidyverse)* 09/03/2021 15:10 - viktor: Aguardando vocês para seguirmos, porque os próximos passos são ""complexos"" rsrs 09/03/2021 15:10 - +55 21 99801-8179: 09/03/2021 15:11 - viktor: Pela imagem, ele ainda está pensando. Porque o prompt *>* ainda não voltou ao normal. Veja qual mensagem ele vai dar qndo responder 09/03/2021 15:13 - +55 21 96697-9379: pra mim tá a mesma coisa 09/03/2021 15:13 - +55 21 99801-8179: óh céus! ele demora a pensar.. ok, vou esperar 09/03/2021 15:13 - +55 21 96697-9379: isso eu consegui fazer 09/03/2021 15:14 - viktor: Então tudo ok! Rode os comandos seguintes, nas linhas 61 e 67 09/03/2021 15:15 - viktor: Pode ser falta de memória. Qndo o R trava, às vezes o computador não limpa a memória decentemente e tudo fica um pouco mais lento. Se continuar assim, é preciso rebootar o computador. Ocorre de vez em qndo, infelizmente 09/03/2021 15:16 - +55 21 96697-9379: a linha 61 foi, agora o 67 não 09/03/2021 15:16 - viktor: O q houve? 09/03/2021 15:16 - +55 21 96697-9379: ahhh foi sim 09/03/2021 15:16 - viktor: 🙌🏼 09/03/2021 15:16 - +55 21 96697-9379: vi aqui os números na id 09/03/2021 15:16 - +55 21 96697-9379: é pq não avisou no console 09/03/2021 15:17 - +55 21 96697-9379: achei que nao tivesse ido 09/03/2021 15:17 - viktor: Ótimo 09/03/2021 15:17 - viktor: @5521998018179 vou avançar um pouquinho e você me diz depois como está sua situação então rsrs 09/03/2021 15:17 - +55 21 99801-8179: Ok 09/03/2021 15:19 - viktor: Bom, na aula passada, vimos vários verbos diferentes (arrange, group_by, mutate, filter, select, summarise). Na aula de hoje, veremos basicamente um só verbo, ou melhor, uma família de verbos. Os *joins* 09/03/2021 15:20 - viktor: Join é uma família de funções utilizada para unir tabelas de dados relacionais. E existem vários tipos de joins diferentes, cada um faz uma ação diferente, embora um deles seja o mais utilizado de todos, o *left_join()* 09/03/2021 15:21 - viktor: Mas aqui vamos aprender um por um 09/03/2021 15:22 - viktor: Existem dois tipos de *joins* diferentes, os *mutating joins* e os *filtering joins*. Os mutating joins criam colunas novas e os filtering joins excluem colunas ou filtram 09/03/2021 15:22 - viktor: 09/03/2021 15:24 - viktor: Existem quatro tipos de *mutating joins*: o *inner_join()*, o *left_join()*, o *right_join()* e o *full_join()* 09/03/2021 15:24 - viktor: Cada um faz uma junção diferente, que vamos experimentar aqui 09/03/2021 15:24 - viktor: 09/03/2021 15:25 - viktor: Para testar essas ações, vamos primeiro criar alguns dataframes novos, de exemplo pra gente 09/03/2021 15:25 - viktor: Rodem as linhas 105 e 110: 09/03/2021 15:26 - viktor: *# Primeiro dataframe: somente os pinguins encontrados na ilha Torgersen* *pinguins1 <- pinguins %>%* *select(id_pinguim, species, island) %>%* *filter(island == "Torgersen")* 09/03/2021 15:26 - viktor: *# Segundo dataframe: somente os pinguins machos* *pinguins2 <- pinguins %>%* *select(id_pinguim, body_mass_g, sex) %>%* *filter(sex == "male")* 09/03/2021 15:27 - viktor: No dataframe *pinguins1*, somente com pinguins da ilha Torgersen, ao invés do total de 344 pinguins do dataframe original, passamos a ter somente 52. E temos basicamente três variáveis diferentes: id_pinguim, species e island 09/03/2021 15:29 - viktor: Já no dataframe *pinguins2*, somente com pinguins machos (independentemente da ilha), temos 168 pinguins. E esse dataframe não tem as mesmas variáveis que o anterior. São três variáveis: id_pinguim, body_mass_g, e sex 09/03/2021 15:29 - viktor: Logo, há pinguins que estão em *pinguins1* E em *pinguins2*, há pinguins que estão somente em *pinguins1*, há pinguins que estão somente em *pinguins2*, e há ainda pinguins que não estão em nenhum dos dois dataframes 09/03/2021 15:30 - viktor: Mas, nós queremos unir esses dois dataframes! 09/03/2021 15:31 - viktor: Até porque há variáveis em uma tabela que não estão na outra. E queremos unificar também essas variáveis. Por isso, vamos usar as nossas *mutating joins* 09/03/2021 15:33 - viktor: No primeiro exemplo, *inner_join()*, eu tenho uma espécie de interseção entre os meus conjuntos. As duas tabelas serão unificadas considerando os pinguins que são machos E que foram encontrados na ilha Torgersen 09/03/2021 15:33 - viktor: # Inner join: somente os pinguins machos (df2) E encontrados na ilha Torgersen (df1) *pinguins_innerjoin <- pinguins1 %>% inner_join(pinguins2, by = "id_pinguim")* 09/03/2021 15:33 - viktor: 09/03/2021 15:35 - viktor: Nesse comando, *inner_join()* precisa indicar o dataframe1, o dataframe2 e o argumento pelo qual as tabelas serão unificadas (nesse caso, nossa chave primária *id_pinguim*) 09/03/2021 15:35 - viktor: Deu para entender? 09/03/2021 15:36 - +55 21 97008-5878: Acho que sim (pelo menos na teoria rs) 09/03/2021 15:36 - +55 21 96697-9379: sim 09/03/2021 15:37 - viktor: Ótimo. Os outros comandos são todos parecidos. Mas os resultados são diferentes 09/03/2021 15:37 - viktor: # Left join: somente os pinguins encontrados na ilha Torgersen (df1), machos (df2) ou não *pinguins_leftjoin <- pinguins1 %>% left_join(pinguins2, by = "id_pinguim")* 09/03/2021 15:38 - viktor: Com *left_join()*, eu estou priorizando o meu dataframe1 em relação ao dataframe2. Ou seja, o dataframe que está à esquerda (left). Por isso, o resultado vai preservar todos os pinguins da ilha Torgersen, sejam machos ou não 09/03/2021 15:40 - viktor: 09/03/2021 15:42 - viktor: Com *right_join()*, o que ocorre é exatamente o contrário. O dataframe2 (que aparece à direita no comando) é o que é preservado. Então, o resultado é uma nova tabela em q temos os pinguins machos encontrados ou não na ilha Torgersen 09/03/2021 15:42 - viktor: # Right join: somente os pinguins machos (df2), encontrados na ilha Torgersen (df1) ou não *pinguins_rightjoin <- pinguins1 %>% right_join(pinguins2, by = "id_pinguim")* 09/03/2021 15:43 - viktor: 09/03/2021 15:45 - viktor: Com *full_join()*, nós unimos os dois dataframes pinguins1 e pinguins2, em todas as suas variáveis e com todas as suas observações 09/03/2021 15:45 - viktor: # Full join: pinguins machos (df2) ou não, encontrados na ilha Torgersen (df1) ou não *pinguins_fulljoin <- pinguins1 %>% full_join(pinguins2, by = "id_pinguim")* 09/03/2021 15:46 - viktor: 09/03/2021 15:48 - viktor: Pergunta 1: Por que há NAs se no nosso dataframe original *pinguins* todas as variáveis encontram valores definidos? Resposta: Quando nós filtramos esse dataframe original e criamos dois dataframes novas (pinguins1 e pinguins2), esses valores se perderam. Por isso, quando mesclamos essas bases, não temos registro desses valores e o R utiliza NA para preenchê-los... 09/03/2021 15:50 - +55 21 96697-9379: pq esses valores se perdem? 09/03/2021 15:51 - viktor: Pergunta 2: Vocês notaram que temos 197 observações no dataframe criado com *full_join()*? Por que são 197 observações? Resposta: Simples. No dataframe pinguins1, temos 168 observações, no dataframe pinguins2, temos 52 observações. 168+52 = 220. Mas lembrem-se de que temos 23 observações em comum entre esses dois dataframes (vimos isso com o *inner_join()*). Logo, 168+52-23=197 09/03/2021 15:51 - viktor: Porque, para todos os efeitos, quando filtramos uma tabela de dados, estamos dizendo ao R: "só essas variáveis aqui nos interessam, pode esquecer o resto quando for criar essa nova tabela" 09/03/2021 15:52 - +55 21 96697-9379: ah sim..é pq eu vi que o R não esqueceu das espécies e do peso em algumas tabelas (acho que foi no dataframe 1 e 2 que vi) 09/03/2021 15:53 - +55 21 96697-9379: esse 197 seria qual valor??? não entendi 09/03/2021 15:54 - viktor: Ele preservou só o q pedimos para preservar: nós criamos um dataframe somente com as variáveis espécie e ilha e somente da ilha Torgersen (pinguins1). E outro dataframe somente com as variáveis sexo e massa corporal e somente com pinguins machos (pinguins2) 09/03/2021 15:55 - viktor: 52 (de pinguins1) + 168 (de pinguins2) - 23 (que estão tanto em pinguins1 quanto em pinguins2, portanto, são uma interseção) 09/03/2021 15:55 - viktor: Uma representação visual fácil para entender esses comandos: 09/03/2021 15:56 - viktor: 09/03/2021 15:57 - viktor: *inner_join()* = interseção *full_join()* = união *left_join()* = prioridade para dataframe à esquerda (dataframe1) *right_join()* = prioridade para dataframe à direita (dataframe2) 09/03/2021 15:57 - +55 21 96697-9379: ahhh sim..como nos outros dataframes a espécie e a massa não vão importar pq não foram pedidos, em alguns IDs esses valores desaparecem. é isso? 09/03/2021 15:57 - viktor: EXATAMENTE 09/03/2021 15:57 - +55 21 96697-9379: entendi 09/03/2021 15:58 - viktor: Dúvidas até aqui? 09/03/2021 15:58 - +55 21 97008-5878: Não, tudo certo 09/03/2021 15:59 - viktor: Perfeito. Vamos agora para os *filtering joins* 09/03/2021 16:00 - viktor: Que são de dois tipos: *semi_join()* e *anti_join()* 09/03/2021 16:01 - viktor: 09/03/2021 16:01 - viktor: # Semi join: somente os pinguins machos (df2) E encontrados na ilha Torgersen (df1), mas sem adicionar novas variáveis ao df1 *pinguins_semijoin <- pinguins1 %>% semi_join(pinguins2, by = "id_pinguim")* 09/03/2021 16:02 - viktor: *semi_join()* é bem parecido com *inner_join()*. Ele calcula também uma interseção entre ambos os dataframes. Mas, em vez de adicionar novas variáveis, ele mantém as variáveis da tabela à esquerda 09/03/2021 16:03 - viktor: 09/03/2021 16:05 - viktor: E *anti_join()* é o extremo oposto de *semi_join()*. Ele pega o que não consta da interseção entre os dois dataframes: 09/03/2021 16:05 - viktor: # Anti join: somente os pinguins NÃO machos (!= df2) E encontrados na ilha Torgersen (df1), mas sem adicionar novas variáveis ao df1 *pinguins_antijoin <- pinguins1 %>% anti_join(pinguins2, by = "id_pinguim")* 09/03/2021 16:07 - viktor: Visualmente, a representação é mais ou menos essa: 09/03/2021 16:07 - viktor: 09/03/2021 16:09 - viktor: Se estiver tudo ok até aqui para vocês, passamos às últimas duas funções de hoje, antes de fazermos nossos exercícios 09/03/2021 16:09 - +55 21 97008-5878: Tudo ok 09/03/2021 16:11 - viktor: Ótimo! As duas últimas funções de hoje, embora também unifiquem tabelas de dados relacionais, não têm "join" no nome, mas "bind" (unir). São a *bind_rows()* e a *bind_cols()* 09/03/2021 16:11 - +55 21 96697-9379: pq especificamente ele faz uma coluna com os pinguins que não são machos? como ele entende que o 'anti' tá pedindo isso? é por conta da função do filtro lá do dataframe2??? 09/03/2021 16:13 - viktor: Os pinguins machos são o meu dataframe pinguins2. O *anti_join()* vai me dar como resposta tudo o que não estiver contigo no dataframe2. Como ele sabe que este é o dataframe2? Simples, no comando que eu digitei, eu incluí o dataframe2 como argumento da minha função e coloquei o dataframe1 do lado de fora: *pinguins1 %>% anti_join(pinguins2, by = "id_pinguim")* 09/03/2021 16:14 - viktor: 09/03/2021 16:14 - +55 21 96697-9379: saquei 09/03/2021 16:15 - viktor: *bind_rows()* e *bind_cols()*: 09/03/2021 16:15 - viktor: 09/03/2021 16:15 - viktor: Esses são bem fáceis de entender 09/03/2021 16:16 - viktor: *bind_rows()* vai colar um dataframe em cima do outro e preservar apenas a linha de cabeçalho 09/03/2021 16:17 - viktor: *bind_cols()* vai colar um dataframe ao lado do outro e preservar o cabeçalho de ambos (isto é, o nome das colunas) 09/03/2021 16:18 - viktor: Para testar esses dois últimos verbos, vamos criar novos dataframes a partir do original. Rodem as linhas 167, 172 e 176: # Terceiro dataframe: somente os pinguins encontrados na ilha Biscoe *pinguins3 <- pinguins %>%* *select(id_pinguim, species, island) %>%* *filter(island == "Biscoe")* # Quarto dataframe: todos os pinguins somente por id e espécie *pinguins4 <- pinguins %>%* *select(id_pinguim, species)* # Quinto dataframe: todos os pinguins somente por ilha e sexo *pinguins5 <- pinguins %>%* *select(island, sex)* 09/03/2021 16:21 - viktor: E, agora, para testar *bind_rows()* primeiro, vou tentar colar o dataframe pinguins1 sobre o dataframe pinguins3 *pinguins_bindrows <- pinguins1 %>% bind_rows(pinguins3)* O dataframe pinguins1 e o dataframe pinguins3 têm EXATAMENTE as mesmas variáveis, os títulos das colunas são os mesmos. Por isso, quando eu colar um sobre o outro, o R reconhecerá esses títulos e vai perceber que são dataframes semelhantes. A única diferença entre os dois é q pinguins1 têm pinguins encontrados na ilha Torgersen e pinguins3 tem pinguins encontrados na ilha Biscoe 09/03/2021 16:22 - viktor: 09/03/2021 16:22 - +55 21 97008-5878: Qual a diferença do full join (acho que é esse) para o bind_cols? 09/03/2021 16:24 - viktor: Boas questões vocês estão me fazendo hoje! *full_join()* simplesmente une os dataframes com variáveis diferentes a partir de uma chave primária. *bind_rows()* cola uma tabela sobre a outra. Bind_rows não precisa de uma chave primária na verdade. E é exatamente por isso q ela não é uma *join*. Ela só precisa q as suas tabelas sejam semelhantes. Full_join não precisa q as suas tabelas sejam semelhantes, precisa apenas de uma chave primária q lhe permita reconhecer a relação entre aqueles dados (e foi por isso q criamos uma variável chamada id_pinguim) 09/03/2021 16:25 - viktor: Deu para entender? 09/03/2021 16:26 - +55 21 97008-5878: Mais ou menos kkkkkk 09/03/2021 16:26 - +55 21 96697-9379: o full_join() é mais específica pra juntar ne? tanto que ela esquece algumas coisas do ID, como espécies...pelo que eu entendi é isso? 09/03/2021 16:27 - viktor: Vou tentar criar uma representação gráfica aqui rapidão 09/03/2021 16:28 - +55 21 97008-5878: Li várias vezes e agora tá fazendo mais sentido 09/03/2021 16:33 - viktor: Vamos lá, criei umas tabelinhas aqui para tentar explicar mais visualmente essa diferença: 09/03/2021 16:33 - viktor: Primeiro, *bind_rows()*: 09/03/2021 16:34 - viktor: 09/03/2021 16:34 - viktor: Uma tabela é colada sobre a outra. Ambas precisam ter o mesmo número de colunas e os mesmos cabeçalhos. O cabeçalho da segunda coluna é eliminado e as duas tabelas são coladas uma sobre a outra 09/03/2021 16:35 - viktor: Agora, *full_join()*: 09/03/2021 16:35 - viktor: 09/03/2021 16:36 - viktor: Eu tenho uma tabela com as colunas *cinza e verde* e outra tabela com as colunas *cinza e vermelho*. Full_join vai unificar essas tabelas com base na coluna *cinza* (minha chave primária), que é a mesma para ambas 09/03/2021 16:37 - viktor: Melhorou? 09/03/2021 16:37 - viktor: (Esses dados nas tabelas que preparei aqui são apenas fictícios. Fiz só para gerar uma representação gráfica mesmo) 09/03/2021 16:38 - +55 21 97008-5878: Muito! Mas e a bind_cols? Ela se unifica a partir do que? 09/03/2021 16:40 - viktor: Ótima pergunta de novo! *bind_cols()* apenas unifica as tabelas lateralmente. Ela não precisa também de uma chave primária. Então, desde que você tenha duas tabelas com o mesmo número de observações, ela vai justapor esses dados: 09/03/2021 16:40 - viktor: 09/03/2021 16:42 - viktor: *bind_cols()* não precisa de uma chave primária. Ela apenas cola os dados. Então, ela não garante, na real, que a ordem dos dados esteja correta. Quem precisa garantir isso é você. É preciso tomar muito cuidado com bind_cols pq essa operação pode simplesmente cagar as suas tabelas, já q não há uma chave primária para garantir q os dados relacionais estão ajustados 09/03/2021 16:42 - +55 21 97008-5878: Entendi! Obrigada 09/03/2021 16:44 - viktor: Perfeito! Essas são as funções de hoje então. Agora é hora de praticar!! rsrs 09/03/2021 16:45 - viktor: No script que preparei para vocês, temos três exercícios. Para cada exercício, vocês vão precisar importar dados que eu coloquei lá na nossa pastinha do gitHUB. São, na verdade, tabelas que filtrei diretamente daquela base com que trabalhamos na semana passada, de candidatos às eleições de 2018, do TSE 09/03/2021 16:46 - viktor: Vocês vão rodar os comandos para importar essas tabelas (com *read.csv*), e, em seguida, vão tentar responder os exercícios propostos 09/03/2021 16:48 - viktor: Mesmo esquema da semana passada: vocês vão me enviar os scripts R com os comandos que utilizaram para responder os exercícios e eu vou comparar com o nosso gabarito aqui e dar feedback individualizado a cada um. Vocês podem me enviar os scripts por WhatsApp em privado ou por email, o que preferirem. E têm até segunda-feira que vem para me enviar suas respostas. Valendo ponto, é claro! 😉 09/03/2021 16:48 - viktor: Divirtam-se!! 💃🏼💃🏼 09/03/2021 16:49 - +55 21 97008-5878: Tudo bem! 09/03/2021 16:52 - viktor: Na próxima semana, temos mais uma aula síncrona e vamos começar a explorar outros dois pacotes do tidyverse, o *tidyr* e o *stringr*. E, depois, daqui a 15 dias, temos uma primeira recapitulação de tudo o que vimos até aqui, em uma aula assíncrona. Aí, eu vou tentar preparar uns videozinhos para vocês, como @5521989562539 pediu 😉 09/03/2021 16:52 - viktor: Nesse meio tempo, é claro, QUALQUER dúvida, entrem em contato, no grupo ou em privado. Estou aqui para ajudá-los no que estiver a meu alcance 😊 09/03/2021 16:52 - viktor: 😘😘 09/03/2021 16:53 - +55 21 97008-5878: Obrigada! ☺️ 15/03/2021 11:09 - Manoela Mayrink: Ai meu pai lá vou eu 15/03/2021 11:37 - viktor: Já respondi todas as dúvidas desesperadas do fds rsrs 15/03/2021 11:37 - Manoela Mayrink: Tô fazendo agora 15/03/2021 11:37 - Manoela Mayrink: Calma 15/03/2021 11:37 - Manoela Mayrink: Nao manda gabarito 15/03/2021 11:37 - Manoela Mayrink: Pq eu tô lutando bravamente 15/03/2021 11:37 - viktor: 🤭🤭 15/03/2021 11:38 - +55 21 99291-6514: ontem eu fiquei tanto tempo travado no segundo exercício que esqueci de fazer o resto 16/03/2021 11:01 - ‎Dand entrou usando o link de convite deste grupo 16/03/2021 11:04 - viktor: Queridos e Queridas, segue o link para o gabarito dos exercícios da última semana: https://github.com/ombudsmanviktor/workshop_rstats/blob/main/aula5/aula5_exercicios.R 16/03/2021 11:06 - viktor: Como temos uma aula de revisão prevista para a próxima semana, estou pensando em apenas produzir alguns vídeos com tutoriais sobre esses exercícios das últimas semanas, explicando o caminho que fiz, pois vi que temos algumas dúvidas por aqui. Se tiverem outras dificuldades, me apontem, que já coloco tb nos vídeos da semana q vem 16/03/2021 11:07 - viktor: O script da aula de hoje está disponível aqui: https://github.com/ombudsmanviktor/workshop_rstats/blob/main/aula6/aula6.R logo mais às tarde passo o link da sala do Meet 16/03/2021 11:08 - Manoela Mayrink: Boa! 16/03/2021 11:08 - +55 21 98731-7975: Show!! 16/03/2021 13:58 - viktor: https://meet.google.com/eah-ngoe-oyz Link da aula de hoje 16/03/2021 14:02 - Manoela Mayrink: Indo 16/03/2021 14:16 - Manoela Mayrink: Meu computador simplesmente nao quer. Assim que eu conseguir fazer tudo funcionar engato aqui 21/03/2021 13:55 - viktor: Gente, conforme prometido, e por sugestão de @5521989562539, nesta semana, ao invés de fazermos aula assíncrona com acompanhamento síncrono aqui no WhatsApp, faremos apenas uma revisão de alguns exercícios por vídeo. Por isso, preparei três vídeos em formato de tutorial para vocês treinarem. Todos eles revisam as mesmas funções que vimos até aqui nas nossas aulas e seguem a mesma estrutura dos nossos exercícios. Nos dois últimos, por exemplo, estou apenas comentando passo a passo os gabaritos dos exercícios. Nada muitos sofisticado, portanto. Mas acredito que podem ser úteis por trazerem informação visual a vocês. Vou deixar os links aqui, então, adiantando os conteúdos dessa semana. Se tiverem dúvidas gerais, fiquem à vontade para tirar aqui no grupo mesmo 21/03/2021 13:56 - viktor: https://classroom.google.com/c/MjYxMjQ1MjQ3MDYy/p/MzAyNjQwODIwOTQ5/details *Vídeo 1* Pipes e piping, ou como escrever código de forma simples e elegante 21/03/2021 13:57 - viktor: https://classroom.google.com/c/MjYxMjQ1MjQ3MDYy/p/MzAyNjQwODIwOTY0/details *Vídeo 2* Revisão das principais funções do pacote dplyr (gabarito dos exercícios da aula 4) 21/03/2021 13:57 - viktor: https://classroom.google.com/c/MjYxMjQ1MjQ3MDYy/p/MzAyNjQwMzczNjc0/details *Vídeo 3* Revisão das principais funções join (gabarito dos exercícios da aula 5) 21/03/2021 13:58 - viktor: Terça-feira, portanto, não temos aula por WhatsApp!! Apenas os vídeos que já adiantei aqui 21/03/2021 13:58 - viktor: Qualquer dúvida, não hesitem em perguntar 21/03/2021 13:58 - viktor: Divirtam-se!! 21/03/2021 14:04 - Manoela Mayrink: 21/03/2021 14:14 - +55 21 99291-6514: 22/03/2021 13:57 - Manoela Mayrink: Gente, uma dúvida.importante 22/03/2021 13:57 - Manoela Mayrink: As notas dos exercicios compoem a nota final? Ou sao extras 22/03/2021 13:58 - Manoela Mayrink: Quero saber o quao envolvida no caos eu estou 22/03/2021 20:37 - viktor: Ainda estou pensando aqui como vou fazer isso. Acho q só decidirei na última hora mesmo, para forçar vocês a se manterem na linha rsrsrs 22/03/2021 20:42 - Manoela Mayrink: 👀 23/03/2021 10:48 - viktor: Bom dia gente. Respondi a todos os que me enviaram os exercícios com sugestões e correções 23/03/2021 10:48 - viktor: O gabarito já se encontra disponível em nosso gitHUB: https://github.com/ombudsmanviktor/workshop_rstats/blob/main/aula6/aula6_exercicios.R 23/03/2021 10:49 - viktor: Lembrando que hoje a aula será apenas em vídeo pré-gravado. Os links estão aqui em cima: 23/03/2021 10:49 - viktor: 👆🏼 24/03/2021 19:58 - viktor: Por gentileza, comentem depois se os tutoriais em vídeo foram úteis ou não 24/03/2021 20:03 - +55 21 97008-5878: Foi ótimo! Vou tirar uma dúvida depois 25/03/2021 15:29 - viktor: 🤩🤩