Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 2 Sumário Apresentação .............................................................................................................................................. 5 UNIDADE 1: Introdução à Ciência de Dados e ao Ambiente R ....................................................................... 6 1.1 Considerações Iniciais ........................................................................................................................ 6 1.2 Introdução à Ciência de Dados ........................................................................................................... 6 1.3 Áreas de Aplicação da Ciência de Dados ............................................................................................. 7 1.4 Fluxo de Trabalho na Ciência de Dados ............................................................................................... 8 1.5 Roteiro ..............................................................................................................................................10 1.5.1 Pré-requisitos .............................................................................................................................10 1.5.2 Recursos usados no módulo .......................................................................................................10 1.5.3 Assuntos abordados no módulo..................................................................................................10 1.6 Introdução ao Ambiente R.................................................................................................................11 1.6.1 A Ferramenta RStudio ................................................................................................................12 1.6.2 Como buscar Ajuda? ...................................................................................................................13 1.6.3 Conceitos Básicos .......................................................................................................................14 1.6.4 Objetos (Variáveis) .....................................................................................................................16 1.6.5 Funções ......................................................................................................................................17 1.6.6 Pacotes.......................................................................................................................................18 1.6.7 Boas Práticas ..............................................................................................................................18 1.6.8 Tipos de Variáveis .......................................................................................................................19 1.6.9 Estrutura Condicional .................................................................................................................22 1.6.10 Estrutura de Repetição .............................................................................................................23 1.7 Considerações Finais .........................................................................................................................24 UNIDADE 2: Exploração de Dados com a Ferramenta R ...............................................................................25 2.1 Considerações Iniciais .......................................................................................................................25 2.2 Importação/Leitura dos Dados ..........................................................................................................25 2.2.1 Tipos de Estruturas de Dados .....................................................................................................25 2.2.2 Definindo o Local dos Dados .......................................................................................................26 2.2.3 Pacote para leitura dos dados .....................................................................................................26 2.3 Limpeza dos Dados ............................................................................................................................29 2.3.1 O Pacote tidyr ...........................................................................................................................30 2.4 Transformação dos Dados .................................................................................................................34 2.4.1 Valores faltantes e o “NA” ..........................................................................................................34 2.4.2 Transformação de dados com o Pacote dplyr.............................................................................36 2.5 Escrita dos dados e Leitura em outras fontes .....................................................................................39 3 2.5.1 Escrevendo arquivos no formato csv ..........................................................................................39 2.5.2 Escrevendo arquivos no formato RData ....................................................................................39 2.5.3 Escrevendo outros tipos de arquivos ..........................................................................................40 2.5.4 Obtendo dados de outras fontes ................................................................................................41 2.6 Considerações Finais .........................................................................................................................42 UNIDADE 3: Modelagem de Dados com a Ferramenta R – Análise de Regressão Linear ...............................43 3.1 Considerações Iniciais .......................................................................................................................43 3.2 Análise de Regressão .........................................................................................................................43 3.3 Análise de Regressão Linear ..............................................................................................................44 3.3.1 Entendendo o conjunto de dados ...............................................................................................45 3.4 Análise de Regressão Simples (ou de um Fator) .................................................................................47 3.4.1 Visualizando os dados.................................................................................................................47 3.4.2 A função do modelo linear ..........................................................................................................49 3.4.3 A Análise de Correlação (R) .........................................................................................................51 3.4.4 Avaliando a qualidade do modelo ...............................................................................................52 3.4.5 Análise dos residuais ..................................................................................................................54 3.5 Análise de Regressão Múltipla (ou de múltiplos Fator) ......................................................................56 3.5.1 Visualizando o relacionamento nos dados ..................................................................................56 3.5.2 Identificando preditores em potencial ........................................................................................57 3.5.3 O processo de eliminação reversa ..............................................................................................59 3.5.4 A análise dos residuais ................................................................................................................62 3.6 Considerações Finais .........................................................................................................................65UNIDADE 4: Modelagem de Dados com a Ferramenta R – Análise de Redes Sociais ....................................66 4.1 Considerações Iniciais .......................................................................................................................66 4.2 Histórico da Análise de Redes Sociais e suas definições .....................................................................66 4.3 Teoria dos Grafos ..............................................................................................................................67 4.3.1 Identificando arestas importantes ..............................................................................................69 4.3.2 Identificando vértices importantes – Métricas de Centralidade ..................................................70 4.3.3 Identificando vértices influentes – Hub e Authority .....................................................................73 4.3.4 Caracterizando a Estrutura do Grafo – Coesão ............................................................................74 4.4 Análise de Redes Sociais com o Ambiente R ......................................................................................77 4.4.1 Importando as informações da rede (nós e links) ........................................................................77 4.4.2 Criando objetos do tipo grafo (rede) ...........................................................................................78 4.4.3 Visualizando a rede ....................................................................................................................80 4.4.4 Calculando as Métricas de Análise de Redes Sociais ....................................................................85 4.5 Considerações Finais .........................................................................................................................91 UNIDADE 5 - Visualização e Comunicação dos Dados ..................................................................................92 4 5.1 Considerações Iniciais .......................................................................................................................92 5.2 RMarkdown ......................................................................................................................................92 5.2.1 Estrutura de um arquivo RMarkdown .........................................................................................93 5.2.2 Renderizando um documentos ...................................................................................................95 5.2.3 Sintaxe .......................................................................................................................................96 5.2.4 Opções de chunk ........................................................................................................................97 5.3 Visualização de gráficos com o pacote ggplot2.................................................................................98 5.3.1 Mapeamento estéticos .............................................................................................................100 5.3.2 Objetos geométricos ................................................................................................................100 5.3.3 Escalas ......................................................................................................................................102 5.3.4 Tipos de Gráficos ......................................................................................................................104 5.4 Considerações Finais .......................................................................................................................114 Referências ...............................................................................................................................................115 5 Apresentação Prezado aluno, é uma grande satisfação contar com você para este módulo da especialização sobre o qual tratare- mos sobre a Ciência de Dados e técnicas computacionais importantes que servirão de apoio para a análise de tais dados. Meu nome é Rogério Ferreira, sou professor da área de Ciência da Computação há dez anos. Sou Bacharel em Informática pela Universidade Estadual de Maringá (UEM), Mestre em Ciência da Computação (UEM) na área de Engenharia de Software, com ênfase na em Arquitetura de Linha de Produto para Sistemas Embarcados, e atualmente sou doutorando em Ciência da Computação e Matemática Computacional na Universidade de São Paulo (USP), com tese na área de Social Learning Analytics, uma área específica da ciência de dados que visa analisar dados relacionados à educação. Caso queira entrar em contato comigo, fique à vontade para me escrever no e-mail rogeriofrr@gmail.com. Aos longo dos próximos capítulos, vamos introduzir o que é ciência de dados e qual as competên- cias exigidas para um cientista de dados na atualidade. Vamos aprender a usar o R, um ambiente computacional e uma linguagem de programação que vem se destacando quando o assunto é ma- nipulação, análise e visualização gráfica de dados. Aprenderemos como ler, transformar, modelar e visualizar os dados, de modo a permitir que as conclusões do cientista de dados sejam facilmente comunicadas a terceiros. Ciência de Dados é um assunto fascinante! Vai ser um prazer tê-lo conosco nos próximos capítulos, para aprender mais sobre as técnicas computacionais utilizadas nessa ciência. mailto:rogeriofrr@gmail.com 6 UNIDADE 1: Introdução à Ciência de Dados e ao Ambiente R 1.1 Considerações Iniciais Neste primeiro capítulo, vamos iniciar os estudos sobre Ciência de Dados e as ferramentas compu- tacionais que servem de apoio para analisar tais dados. Na seção 1.2 discutiremos o que é Big Data, Ciência de Dados e qual a importância destes dois conceitos em um cenário como o atual, em que a cada dia se produz um volume maior de dados, sobre as mais diferentes áreas do conhe- cimento humano. Na seção 1.3 estudaremos algumas das inúmeras áreas em que a ciência de dados pode ser aplicada e alguns exemplos de dados que podem ser analisados. Na seção 1.4 vamos aprender o fluxo de trabalho em ciência de dados, ou seja, quais são as etapas que um cientista de dados deve aprender e executar para realizar a análise de um conjunto de dados. Na seção 1.5 vamos apresentar o roteiro deste módulo, ou seja, quais assuntos serão estudados na sequência deste capítulo e nos capítulos seguintes. Na seção 1.6 vamos aprender os conceitos fundamentais do ambiente R e da ferramenta RStudio, utilizados ao longo deste módulo. Por fim, a seção 1.7 faz as considerações finais do capítulo. 1.2 Introdução à Ciência de Dados Antes de falarmos especificamente sobre Ciência de Dados, precisamos introduzir o con- ceito de Big Data. Embora, normalmente, o termo Big Data esteja associado a grandes volumes de dados, sua definição formal é dada por um conjunto de cinco Vs: são dados produzidos com Vo- lume, Velocidade, Variedade, Veracidade e Valor. Em outras palavras, Big Data é o fenômeno em que dados são produzidos em vários formatos e armazenados em uma grande quantidade de for- matos e equipamentos. Esse fenômeno fica mais compreensível quando falamos em números: um smartphone de hoje tem maior capacidade que o melhor computador existente em 1985; hoje exis- tem mais de seis bilhões de pessoas com acesso a telefones celulares; mais de 1,7 bilhões de pessoas no mundo estão usando redes sociais; um disco para armazenar todas as músicas exis- tentes no mundo custa cerca de US$600,00; quase três milhões de e-mails são enviados a cadas segundo; cem horas de vídeos são carregados no Youtube por minuto; quinhentos milhões de tweets são publicados por dia no Twitter; e 100 terabytes de dados são carregados por dia no Fa- cebook (AMARAL, 2016).Reflita! Analise a quantidade de informações digitais que você produz em um único dia: e-mails enviados, vídeos assistidos no Youtube, postagens em redes sociais, fotos e arquivos armazenados na nuvem, informações sobre sua localização captadas e armazenadas em seu celular, buscas feitas no Google, compras realizadas na Internet. Agora multiplique essa quantidade de dados por alguns bilhões, considerando a quantidade de pessoas no mundo que produzem as mesmas infor- mações. É um volume de dados inimaginável, nunca antes produzido pela humanidade que vem sendo diariamente armazenado e está disponível para análise pelas grandes corporações. Do ponto de vista tecnológico, o elemento principal associado ao Big Data é o registro de qualquer fenômeno em dados. Estes dados são persistidos e armazenados para reprodução ou análise, imediata ou não. Em outras palavras, o registro eletrônico de um fenômeno qualquer pode ser registrado e ter seus dados armazenados, como o movimento do telefone celular, o acionamento 7 do freio do veículo, uma fotografia do céu ou a gravação da câmera de segurança. Com a capaci- dade cada vez maior de armazenar dados de forma indiscriminada, eventos que há tempos atrás não tinham os seus dados armazenados, como o registro de um veículo monitorado por satélite, agora são registrados, caso os dados referentes a ele precisem ser inspecionados no futuro. Uma vez que existe uma infinidade de dados armazenados e disponíveis, surgiu a necessi- dade de transformar esses dados em informação e conhecimento. E é justamente esta a atribuição de um cientista de dados: um profissional altamente qualificado que tem por objetivo sistemático a descoberta e extração de conhecimento de vastos conjuntos de dados. Este contexto reflete a rea- lidade muitas empresas e organizações que necessitam gerir grandes e heterogêneos volumes de dados de diferentes fluxos de informação. Neste cenário, a área de Ciência de Dados incorpora uma variedade de campos de outras áreas da ciência, como Mineração de Dados, Aprendizagem de Máquina, Análise Preditiva, Matemática, Estatística e Linguagens de Programação, com o obje- tivo de criar e implementar uma nova geração de teorias e ferramentas computacionais para dar apoio ao processo de decisão. Em resumo, a Ciência de Dados (ou Data Science) é um campo interdisciplinar para o de- senvolvimento de sistemas de software e respectivas soluções para a extração de conhecimento em grandes volumes de dados (AMARAL, 2016). 1.3 Áreas de Aplicação da Ciência de Dados O grande volume de dados que vem sendo sistematicamente registrado e acumulado desde as últimas décadas tornou-se uma tendência e certamente irá continuar. O processo de digitalização nas organizações está em curso, daí a importância de obter informação útil e conhecimento para as organizações com base neste crescente volume de dados digitais. A necessidade e a evolução das técnicas de análise de dados têm por base o processo de digitalização ocorrido nos últimos anos. As áreas e tecnologias apresentadas nas próximas seções têm um papel fundamental no processo de análise sistemática dos grandes volumes de dados, com vista a encontrar soluções de software para mitigar e transformar os volumes de dados em informação e conhecimento útil para as empresas. Marketing e Gestão de Vendas: na área de marketing, destaca-se a evolução das ferra- mentas de Gestão de Relacionamento com o Cliente (Customer Relationship Management – CRM), as quais aplicam técnicas de mineração de dados para identificar e verificar diferentes grupos de clientes, a fim de efetuar previsões e antecipar o seu comportamento. Esta abordagem teve um crescimento exponencial com o fenômeno das redes sociais e da respectiva presença massiva dos clientes nestes ambientes virtuais. Neste cenário, leituras e regras simples como “se o cliente com- pra o produto X, também poderá comprar os produtos Y e Z”, são sistematicamente definidas. O entendimento desses padrões de comportamento são fundamentais para o setor de marketing das empresas. Economia e Finanças: atualmente, podemos considerar que as empresas financeiras (glo- bais) têm por base a aplicação de algoritmos e técnicas de mineração de dados na definição de planos de investimento e financiamento de projetos em diferentes áreas de negócio, assim como para a gestão de portfólios financeiros. Contudo, geralmente este conhecimento (algoritmos e mi- neração de dados) não é disponibilizado para terceiros, normalmente são protegidos e considera- dos como ativos de conhecimento das organizações. Análise de Crédito e Detecção de Fraudes: a análise de crédito tem sido uma das áreas com maior visibilidade de aplicação da ciência de dados. Sistemas de software analisam o risco 8 para atribuição de contratos de crédito a particulares e empresas. Estas tecnologias são aplicadas no âmbito de sistemas de apoio à decisão, no sentido de diminuir a incerteza no processo de deci- são e aprovação de créditos. Além disso, instituições bancárias e financeiras utilizam sistemas de software para monitorar fraudes de cartões de crédito por meio da análise de dados de milhões de contas bancárias. Telecomunicações: a área de telecomunicações é fértil no âmbito da produção massiva e sistemática de dados. Nesse sentido, as tecnologias de análise de dados têm sido amplamente aplicadas na gestão e digitalização dos dados criados, consumidos e disseminados nas redes glo- bais de telecomunicações. Um dos principais problemas que podem ser enfrentados é a otimização da rede de telecomunicações. As empresas têm a opção de combinar seu conhecimento do desem- penho da rede com dados internos (como as taxas de uso dos clientes) e dados externos (como as tendências sazonais) para redirecionar os recursos (como ofertas ou investimentos de capital) para determinados pontos da rede. Internet das Coisas (Internet of Things – IoT): a Internet das coisas é um conjunto de objetos (coisas) incorporados com sensores conectados à Internet. As previsões para 2020 apon- tam que a quantidade de dispositivos IoT será da ordem de 25 bilhões, enquanto a quantidade de dispositivos tradicionais de computação (smartphones, tablets entre outros dispositivos móveis) ul- trapassará a ordem de 20 bilhões (VASCONCELOS e BARÃO, 2017). Neste contexto, é previsível um investimento massivo nos próximos anos para analisar os dados gerados por estes dispositivos. As organizações empresariais vão ser as que mais irão adotar as soluções de IoT. Tais soluções serão aplicadas para redução de custos operacionais, para o incremento da produtividade, assim como a criação de novos mercados e desenvolvimento de novas soluções e propostas de valor para as organizações. Indústria 4.0: o termo Indústria 4.0 é recente e apresenta uma combinação entre indústria e IoT. A aplicação de técnicas da ciência de dados permite avaliar requisitos inerentes à instalação e utilização da IoT em máquinas industriais. Os dados são recolhidos e avaliados com base em implementações de vários tipos de sensores, tendo em conta a área industrial e de negócio, bem como pela utilização de equipamentos específicos de IoT. Os testes são efetuados com o recurso à aplicação de software funcional e de apoio à decisão em ambiente laboratorial. A indústria 4.0 tem adicionalmente como objetivo a análise da produtividade dos colaboradores associados a diferentes máquinas e processos industriais. Reflita! Esses são apenas alguns exemplos de áreas do conhecimento humano em que a ciência de dados pode ser aplicada. Agora, reflita sobre outras áreas que produzem e armazenam uma grande quantidade de dados que podem ser analisados, como: buscas na Internet, sistemas de recomendação (como filmes na Netflix, por exemplo), reconhecimento facial, sistemas de transporte e logística, saúde, sistemas de comparação de preços, entreoutros. 1.4 Fluxo de Trabalho na Ciência de Dados Como vimos anteriormente, a ciência de dados é um campo multidisciplinar e extremamente abrangente. O nosso objetivo aqui é fornecer uma sólida fundamentação nos conceitos e ferramen- tas mais importantes que você irá usar ao longo da análise de um conjunto de dados. Não existe apenas uma forma de estruturar e aplicar os conhecimentos da Ciência de Dados. A forma de apli- cação varia bastante conforme a necessidade do projeto ou do objetivo que se busca alcançar. Neste módulo, usaremos o modelo de fluxo de trabalho (workflow) mostrado na Figura 1.1, bastante 9 utilizado e sugerido por WICKHAM e GROLEMUND (2017). Os autores propõem o uso do ambiente R para o fluxo de trabalho. Aprenderemos sobre tal ambiente na Seção 1.6. A primeira atividade do fluxo de trabalho é a Importação dos seus dados para o ambiente R. Isso normalmente significa que você precisa obter os dados armazenados em um arquivo, banco de dados ou site da Web e os carrega em um conjunto de dados no ambiente R. Depois de importar seus dados, a próxima atividade é a Limpeza dos dados. Limpar os seus dados significa armazená-los de uma forma consistente e que corresponda à semântica do conjunto de dados com a maneira como ele é armazenado. Em resumo, quando seu os dados são “limpos”, cada coluna é uma variável e cada linha é uma observação. Os dados “arrumados” são importantes porque a estrutura consistente permite que você se concentre apenas em questões sobre o enten- dimento e análise dos dados. Depois de ter feito a limpeza dos dados, a próxima atividade é a de Transformação. A transformação inclui concentrar-se nas observações de interesse (como todas as pessoas de uma cidade ou todos os dados do ano anterior), criando novas variáveis que são funções de variáveis existentes (como de velocidade e tempo) e calculando um conjunto de estatísticas (como contagens ou médias). Frequentemente, as atividades de limpeza e transformação quando realizadas em con- junto são chamadas de “disputas”, porque limpar e transformar seus dados de uma forma que seja natural para trabalhar, com frequência parece uma briga. Uma vez que você tenha dados organizados com as variáveis necessárias para realizar as suas análises, existem duas atividades principais de geração de conhecimento: a visualização e a modelagem. Ambas têm pontos fortes e fracos complementares, de modo que qualquer análise real irá interagir entre elas muitas vezes. A Visualização é uma atividade fundamentalmente humana. Uma boa visualização dos da- dos trará conclusões que você não esperava ou levantará novas questões sobre os dados. Uma boa visualização também pode sugerir que você está fazendo a pergunta errada ou precisa coletar dados diferentes. As diferentes formas de visualizar os dados podem surpreendê-lo, mas elas não são a forma mais adequada para fazer conclusões porque exigem que um ser humano as interprete. A Modelagem é uma atividade complementar à visualização. Depois de ter elaborado suas perguntas em relação aos dados com precisão suficiente, você pode usar um modelo para res- pondê-las. Os modelos são uma ferramenta fundamentalmente matemática ou computacional, en- tão eles geralmente representam bem o comportamento dos dados. Mas todo modelo faz suposi- ções e, por sua própria natureza, um modelo não pode questionar suas próprias suposições. Isso significa que um modelo não pode, fundamentalmente, surpreendê-lo. É necessário interpretar ade- quadamente se determinado modelo é uma boa representação dos dados. FIGURA 1.1: FLUXO DE TRABALHO PARA A CIÊNCIA DE DADOS, PROPOSTO POR WICKHAM E GROLEMUND (2017) 10 A transformação, visualização e a modelagem são as três etapas fundamentais para propor- cionar o completo Entendimento dos Dados. No fluxo de trabalho proposto, essas atividades po- dem ser executadas de forma iterativa, até que as conclusões obtidas pelo cientista de dados sejam satisfatórias. Feito isso, o último passo no fluxo de trabalho é a Comunicação, uma atividade crítica de qualquer projeto de análise de dados. Não importa quão bem os modelos e as visualizações criadas o levaram a entender os dados, é de fundamental importância a criação de relatórios ou formas complementares de visualização que permitam comunicar as conclusões sobre os dados a terceiros, de forma fácil e intuitiva. 1.5 Roteiro Nesta seção iremos apresentar o conteúdo que estudaremos em cada capítulo do módulo. 1.5.1 Pré-requisitos Os únicos conhecimentos necessários que você precisará ter para compreender o conteúdo estudado neste módulo são alguns conceitos de estatística descritiva, entre eles: Média Mediana Variância Desvio padrão Distribuição normal Quartis Esses conceitos não serão abordados aqui pois provavelmente você estudou um módulo específico sobre estatística básica para a ciência de dados, em que todos esses assuntos foram abordados. 1.5.2 Recursos usados no módulo Outro tema importante são os recursos que você irá utilizar ao longo do módulo. Em várias aulas, irei solicitar que você importe algum arquivo ou execute algum script já pronto para agilizar o andamento dos estudos. Todos esses recursos estão compactados em uma pasta que você pode baixar no seguinte link: https://bit.ly/31kU3lx. Recomendo que logo no início, você salve esse ar- quivo e descompacte-o em alguma pasta no seu computador. Durante o módulo, sempre que eu solicitar que você utilize algum arquivo, você pode buscá-lo nessa pasta. 1.5.3 Assuntos abordados no módulo Este primeiro capítulo é uma introdução ao assunto ciência de dados. Já discutimos o que é Big Data, Ciência de Dados, áreas de aplicação, o fluxo de trabalho de um cientista de dados e quais são os pré-requisitos necessários para este módulo. Nas próximas seções, faremos uma in- trodução ao Ambiente R, que será a ferramenta usada ao longo do módulo para analisar os dados. https://bit.ly/31kU3lx 11 Caso você não conheça ou não tenha familiaridade com o R, aproveite as próximas seções para aprender os conceitos básicos desta ferramenta, que é uma das mais importantes (se não a mais importante) quanto se trata de análise de dados. A partir do próximo capítulo, começaremos a dis- cutir as atividades que devem ser executadas por um cientista de dados para que ele possa exercer bem o seu trabalho, tomando como base o fluxo de trabalho proposto na Figura 1.1. No Capítulo 2 iremos aprender sobre a arte de preparar os dados de forma a viabilizar sua visualização e modelagem, o que inclui as atividades de importação, limpeza e transformação dos dados. As três etapas que compõem essa preparação serão estudadas em detalhes: a leitura ou importação dos dados para o Ambiente R; a limpeza dos dados que visa garantir a consistência dos mesmos; e a transformação dos dados, cujo intuito é reordenar, resumir ou renomear os dados para facilitar as etapas seguintes. No Capítulo 3, uma vez que nós entendemos os processos para realizar a importação/leitura dos dados, sua limpeza e transformação, começaremos a discutir a atividade de modelagem dos dados. Por questões didáticas, vamos abordar primeiro a modelagem de dados, e posteriormente a visualização destes. O objetivo de um modelo de dados é fornecer um resumo simples, em baixa dimensão, do conjunto de dados. Idealmente, o modelo irá representar “sinais” verdadeiros (isto é, padrões gerados pela situação que está sendo estudada), e ignorar o "ruído" (ou seja, variação aleatória em que você não está interessado) dos dados em questão. Neste capítulo, estudaremos modelos estatísticos para a análise de dados e aprenderemos os recursos básicos da Ferramenta R que podem nos auxiliar a compreender melhor tais modelos. No Capítulo 4 estudaremos a Análise de Redes Sociais (Social Network Analysis – SNA), uma série de técnicascujo objetivo é a modelagem, a formulação e a solução de problemas que possuem uma estrutura de rede, sendo que tal estrutura normalmente é representada por meio de um grafo. Nesse capítulo, nosso objetivo é sensibilizar o cientista de dados sobre a importância de possuir essa competência, pois a análise de redes sociais possui uma série de aplicações práticas, que vão desde o projeto de redes de telecomunicações até às plataformas de mídias sociais (como Facebook e Twitter) que usam elementos deste tipo de análise na recomendação de amigos, entre outros processos. Por fim, no Capítulo 5 estudaremos as etapas finais do fluxo de trabalho de um cientista de dados: a visualização e a comunicação dos dados. Como discutimos antes brevemente, não importa quão complexa seja a sua análise, uma das etapas mais importantes é disponibilizar os resultados da análise em relatórios e formas de visualização que permitam comunicá-los a terceiros de forma intuitiva. Essa é a última (e não menos importante) etapa da análise de dados. 1.6 Introdução ao Ambiente R R é uma linguagem de programação estatística que vem passando por diversas evoluções e se tornando cada vez mais uma linguagem de amplos objetivos. Podemos entender o R também como um conjunto de pacotes e ferramentas estatísticas, munido de funções que facilitam sua uti- lização, desde a criação de simples rotinas até análises de dados complexas, com visualizações bem detalhadas. Segue alguns motivos para aprender R: é completamente gratuita e de livre distribuição; a curva de aprendizado é bastante amigável, sendo muito fácil de se aprender; a enorme quantidade de tutoriais e ajuda disponíveis gratuitamente na Internet; é excelente para criar rotinas e sistematizar tarefas repetitivas; 12 é amplamente utilizado pela comunidade acadêmica e pelo mercado; a quantidade enorme de pacotes, para diversos tipos de necessidades; é uma ótima ferramenta para criar relatórios e gráficos. 1.6.1 A Ferramenta RStudio O ambiente R nativo se apresenta como uma simples “tela escura”, com uma linha para inserir comandos. Isso é um pouco assustador para quem está começando e bastante improdutivo para quem já faz uso intensivo da ferramenta. Felizmente, existem diversas ferramentas gráficas que apoiam o uso mais intuitivo do R, como a ferramenta RStudio, que utilizaremos durante todo o curso. Entenda o RStudio como uma interface gráfica com diversas funcionalidades que melhoram ainda mais o uso e aprendizado do R. Na prática, o RStudio facilita muito o dia a dia de trabalho do cientista de dados. Portanto, desde já, ao falarmos em R, falaremos automaticamente no RStudio. Apesar de ser também uma ferramenta de uso comercial, você pode baixar e instalar facilmente a versão gratuita do RStudio, para diferentes sistemas operacionais no seguinte link: https://www.rstu- dio.com/products/rstudio/download. A Figura 1.2 mostra a interface do RStudio. Repare que ela é divida em quatro partes prin- cipais: 1) Editor de Código - no editor de código, você poderá escrever e editar os scripts. Um script nada mais é do que uma sequência de comandos/ordens que serão executadas em sequên- cia pelo R. O editor do RStudio oferece facilidades como organização dos comandos, re- curso de “auto-complete” dos comandos, destaque da sintaxe dos comandos, etc. 2) Console - é no console que o R mostrará a maioria dos resultados dos comandos. Também é possível escrever os comandos diretamente no console, sem o uso do editor de código. É muito utilizado para testes e experimentos rápidos. Um uso rápido do console é, por exem- plo, chamar a ajuda do R usando o comando ? (isso mesmo, a interrogação é um comando!). Provavelmente essa é a parte do RStudio que usaremos com mais frequência. 3) Environment e History - no environment ficarão armazenados todos os objetos que são criados na sessão do R. Entenda sessão como o espaço de tempo entre o momento em que você inicia o R e o momento em que finaliza. Neste período, tudo que você faz usa memória RAM e o processador do computador. E na aba History, como você deve imaginar, o RStudio cria um histórico de comandos utilizados. https://www.rstudio.com/products/rstudio/download https://www.rstudio.com/products/rstudio/download 13 4) Files, Plots, Packages, Help e Viewer - nesta janela, estão várias funcionalidades do RStu- dio, como descrito a seguir: i. na aba Files, você terá uma navegação de arquivos do seu computador; também será possível definir o diretório de trabalho (você também pode definir diretamente no código, como trataremos posteriormente), ou seja, o R entende o seu diretório de trabalho como ponto de partida para localizar arquivos que sejam chamados no script; ii. a aba Plots trará os gráficos gerados, possibilitando a exportação para alguns formatos diferentes, como .png e .pdf; iii. na aba Packages estão listados os pacotes (bibliotecas) instalados; você pode verificar quais estão carregados e, caso necessário, poderá carregar algum pacote necessário para a sua análise; também é possível instalar e atualizar pacotes; novamente, tudo isto é possível fazer diretamente no código, como veremos mais adiante; iv. a aba Help, como o próprio nome indica, é a ajuda do RStudio; esta aba será bastante utilizada, pois saber usar o help é fundamental para evitar desperdício de tempo; os usuários de R, em geral, são bastante solícitos, entretanto, uma olhadinha rápida no help pode evitar que você “desperdice” tempo desnecessariamente; v. por fim, a aba Viewer é utilizada para visualizar localmente conteúdo web; o gráfico das figuras é mostrado na aba Viewer porque é uma visualização em javascript, que pode ser adicionada a documentos html gerados usando o pacote RMarkdown, como veremos no capítulo 5. 1.6.2 Como buscar Ajuda? Independentemente do seu nível de conhecimento em R, sempre haverá a necessidade de buscar ajuda. Ou seja, saber procurar ajuda é essencial para aprimorar seus conhecimentos em FIGURA 1.2: INTERFACE GRÁFICA DO RSTUDIO 14 Ciência de Dados. Segue algumas dicas de como buscar ajuda para sanar dúvidas e resolver pro- blemas em R: sempre procure em inglês; apesar da comunidade R em língua portuguesa ser bem grande, a de língua inglesa é maior ainda; é muito provável que seus problemas e dúvidas já tenham sido sanados e outros usuários estarão disponíveis para respondê-los; explore bem o help do próprio R; conheça e aprenda a usar o Stack Overflow (http://stackoverflow.com/questions), a maior comunidade de ajuda técnica da Internet. Se mesmo explorando todas as dicas acima não conseguir resolver seu problema, procure por fóruns específicos. Atenção! Se você for realizar uma pergunta em algum fórum ou site de perguntas e respostas, é importante atentar-se para alguns pontos que deverão ser informados, de modo a facilitar que outros usuários te auxiliem: versão do R que está usando (digite o comando version() no console do RStudio para veri- ficar); sistema operacional; forneça um exemplo replicável; veja se a sua dúvida já não foi abordada em outro tópico neste fórum. 1.6.3 Conceitos Básicos Entenda o R como uma grande calculadora científica cheia de botões, mas, ao invés de clicar nos botões, você irá escrever os comandos. Ou seja, aprender R significa se familiarizar com os comandos e saber quando usá-los. Todos os comandos são baseados em inglês e seus nomes, normalmente, dão dicas a respeito do seu uso. 1.6.3.1 Console O console é uma das quatro partes principais do RStudio (observe na Figura 1.2). É nele que você vai digitar suas ordens (comandos) e também é onde o R vai “responder” tais ordens. Para que o R possa interpretar corretamente, será necessário que você conheça a sintaxe da linguagem e a escrita correta dos comandos. Olhando para o console, você verá o símbolo>. Este símbolo indica a linha onde você deve inserir os comandos. Clique nesse símbolo para posicionar o cursor na linha de comandos e digite seu primeiro comando em R: 2 * 3. Tecle Enter. Você verá o seguinte resultado: [1] 6 Além de outras funcionalidades mais interessantes, o R é como uma grande calculadora científica, como apontado anteriormente. Para entender melhor esse conceito, vamos exercitar um pouco o console de comandos. Digite um por um os seguintes comandos, tecle Enter ao final de cada um deles e acompanhe os resultados: 7 * 9 + 2 * 6 2.5 * 4 https://stackoverflow.com/questions 15 (50 + 7)/(8 * (3 - 5/2)) 3 ^ 4 Repare que, na medida em que executa os comandos, o R vai respondendo. Esse é o com- portamento básico do console, muito utilizado para obter-se resultados rápidos de comandos espe- cíficos. Uma funcionalidade importante é o fato de que o R guarda um histórico dos últimos coman- dos executados, e para acessá-los basta apertar a seta para cima no teclado. 1.6.3.2 Scripts Enquanto no console seus comandos são executados na medida em que você os “envia” com a tecla Enter, em um script você ordena a execução de uma sequência de comandos, escritos previamente, um seguido do outro. Esses scripts são escritos no editor de códigos do RStudio. Para entender melhor, localize o editor de códigos no RStudio e copie os mesmos comandos anteriores, executados no console. No editor de códigos, a ordem para a execução dos comandos não é a tecla Enter, para executá-los, clique em Source, no canto superior direito da área do editor de códi- gos. Repare bem, pois há uma setinha escura que revelará duas opções de Source (execução do script): Source, e Source with Echo. A diferença entre as duas opções é que a primeira executa mas não exibe as respostas no console, já a segunda executa mostrando as respostas no mesmo. A segunda opção será útil em outros casos de scripts muito grandes, ou em situações nas quais não convenha “poluir” o console com inúmeras mensagens. Há um atalho de teclado para o Source: ctrl + shift + enter. Agora posicione o cursor do mouse com um clique em apenas um dos comandos do seu script. Em seguida, clique no ícone Run, também no canto superior na área do editor de códigos. Repare que, dessa vez, o R executou apenas um comando, aquele que estava na linha selecionada. Esse tipo de execução também é bastante útil, mas esteja atento, pois é muito comum que coman- dos em sequência dependam da execução de comandos anteriores para funcionarem correta- mente. Há, também, um atalho de teclado para o Run: ctrl + enter. Este é outro comando importante de ser lembrado, pois é muito importante e será bastante utilizado. Ao digitar seus comandos no console, o máximo que você consegue recuperar são os co- mandos imediatamente anteriores, usando a seta para cima. Já no editor de códigos, existe a pos- sibilidade de salvar os seus scripts para continuar em outro momento ou em outro computador, preservar trabalhos passados ou compartilhar seus códigos com a equipe. Um script em R tem a extensão (terminação) .R. Se você tiver o RStudio instalado e der dois cliques em um arquivo com extensão .R, o seu sistema operacional abrirá esse arquivo diretamente no RStudio. Ainda utilizando os comandos digitados no editor de códigos, vá em File > Save, esco- lha um local e um nome para seu script e confirme no botão Save. Lembre-se sempre de ser orga- nizado na hora de armazenar os seus arquivos. Utilize pastas para os diferentes projetos e dentro delas escolha nomes explicativos para os seus trabalhos. Para salvar mais rapidamente, utilize o atalho ctrl + S. 16 1.6.3.3 Comentários de código Ao utilizar o símbolo # em uma linha, você está dizendo para o R ignorar aquela linha, pois trata-se de um comentário. Clique na primeira linha do seu script, tecle Enter para adicionar uma linha a mais e digite #Meu primeiro comentário de código! Repare que a cor do comentário é diferente. Execute novamente seu script com a opção Source e veja que nada mudou na execução. A título de experimento, retire o símbolo # e mantenha o texto do comentário. Execute novamente. O R tenta interpretar essa linha como comando e já que ele não consegue entendê-lo, exibe uma mensagem de erro no console. O símbolo de comentário também é muito útil para suprimir linhas de código que servem para testar determinados comportamentos. Para exemplificar, adicione o símbolo # em qualquer uma das linhas com as operações e veja que ela não será mais executada, será ignorada, pois foi entendida pelo R como um simples comentário de código. 1.6.4 Objetos (Variáveis) Para que o R deixe de ser uma simples calculadora, será necessário aprender, dentre outras coisas, o uso de variáveis. Se você tem alguma noção de algoritmos, provavelmente já tem a intui- ção do que é uma variável para uma linguagem de programação. No contexto do R, vamos entender variável como um objeto, ou seja, como uma estrutura predefinida que vai “receber” algum valor. Utilizando uma linguagem mais técnica, objeto (ou variável) é um pequeno espaço na memória do seu computador onde o R armazenará um valor ou o resultado de um comando, utilizando um nome que você mesmo definiu. Conhecer os tipos de objetos do R é fundamental. Para atribuir valor a objetos, utiliza-se o símbolo <- ou o símbolo =. Estes são os símbolos que você verá com mais frequência daqui para frente. Execute, no console ou no editor de códigos, o seguinte comando x <- 15. Agora o nome x representa o valor 15. Para comprovar, execute apenas o nome do objeto x, o R mostrará o conte- údo dele. A partir de então, você poderá utilizar esse objeto como se fosse o valor 15. Experimente os seguintes resultados: x + 5 x * x / 2 2 ^ x y <- x / 3 Leia a seção de boas práticas (seção 1.6.7) para criar um código organizado e aprender a organizar seus objetos e funções da melhor maneira possível. Todos os objetos que você criar estarão disponíveis na aba Environment. O RStudio possui ainda a função “auto-complete”. Digite as primeiras letras de um objeto (ou função) que você criou e, em seguida, use o atalho ctrl + barra de espaço. O RStudio listará tudo (objetos, funções ou pacotes) que começar com essas letras. Selecione algum item e tecle enter para escrevê-lo no editor de códigos. 17 1.6.5 Funções Entenda função como uma sequência de comandos preparados para serem usados de forma simples e, assim, facilitar sua vida. Funções são usadas para tudo que você possa imaginar: cálculos mais complexos, estatísticas, análise de dados, manipulação de dados, gráficos, relatórios, etc. Assim que você o instala, o R já vem configurado com várias funções prontas para uso. A partir de agora, chamaremos esse conjunto de funções que já vem por padrão com a ferramenta de R Base. Claro que as funções do R base não serão suficientes para resolver todos os problemas que você encontrará pela frente. Nesse sentido, o R também possui outro recurso muito interessante. Você pode instalar conjuntos extras de funções específicas de maneira muito simples: usando pa- cotes. Exemplos funções do R base são: raiz.quadrada <- sqrt(16) #função para calcular raiz quadrada round(5.3499999, 2) #função para arredondamento Uma função tem dois elementos básicos: o nome e o(s) parâmetro(s) (também chamados de argumentos). Por exemplo, a função log(10) possui o nome log() e apenas um parâmetro, que é o número que você quer calcular o log. Já a função round() possui dois parâmetros, o número que você quer arredondar e a quantidade de dígitos para arredondamento. Quando você usa uma função, você pode informar os parâmetros de duas formas: sequencialmente, sem explicitar o nome dos parâmetros, ou na ordem que quiser, explicitando o nome dos parâmetros. Veja o exemplo a seguir: round(5.3499999, 2) #é o mesmoque: round(digits = 2, x = 5.3499999) Para saber como informar os parâmetros corretamente, utilize o comando ? para ver a do- cumentação de funções, ou seja, conhecer para que serve, entender cada um dos seus parâmetros e ver exemplos de uso. ?round ??inner_join #procurar ajuda de funções que não estão "instaladas" ainda Vale comentar que é possível informar objetos nos parâmetros das funções. x <- 3.141593 round(x, 3) ceiling(x) 18 Observe algumas das principais funções para estatísticas básicas no R na Tabela 1.1. Tabela 1.1 – Exemplos de funções estatísticas no R Função R Descrição sum() Soma de valores mean() Média var() Variância median() Mediana summary() Resumo estatístico quantile() Quantis 1.6.6 Pacotes Como dito antes, pacotes são conjuntos extras de funções que podem ser instalados além do R base. Existem pacotes para auxiliar as diversas linhas de estudo que você possa imaginar: estatística, econometria, ciências sociais, medicina, biologia, gráficos, machine learning, etc. Caso você precise de algum pacote específico, procure no Google pelo tema que necessita. Você encon- trará o nome do pacote e o instalará normalmente. No link https://cran.r-project.org/web/packages/available_packages_by_name.html você pode ver uma lista de todos os pacotes disponíveis no repositório central. Além desses, ainda existe a possibilidade de instalar pacotes “não oficiais”, que ainda não fazem parte de um repositório cen- tral. Para instalar um pacote, execute o seguinte comando: install.packages("dplyr") #instala um pacote de manipulação de dados Uma vez instalado, esse pacote estará disponível para uso sempre que quiser, sem a ne- cessidade de instalá-lo novamente. Mas, sempre que iniciar um código novo, você precisará car- regá-lo na memória. Para isso, use o seguinte comando: library(dplyr) Atenção! Para instalar um pacote, você precisa informar o nome entre aspas, caso contrário o pacote não funcionará. Porém, para carregar o pacote em memória, você pode referenciar o nome com ou sem aspas, ambas as formas funcionam. 1.6.7 Boas Práticas Rapidamente você perceberá que quanto mais organizado e padronizado mantiverem-se os seus códigos, melhor será para você e para sua equipe. Existem dois guias de boas práticas bas- tante famosos na comunidade do R. Um sugerido por Hadley Wickham (WICKHAM e GROLE- MUND, 2016) e outro por uma equipe do Google. Dentre as dicas de boas práticas, algumas são https://cran.r-project.org/web/packages/available_packages_by_name.html 19 muito importantes, como, por exemplo: não use acentos e caracteres especiais. Outro ponto impor- tante: o R não aceita variáveis que comecem com números. Você pode até usar números no meio do nome, mas nunca começar com números. O principal de tudo é: seja qual for o padrão que você preferir, escolha apenas um padrão e seja consistente a ele. A seguir são indicados os links dos dois guias citados anteriormente: Guia sugerido Hadley Wickham: http://adv-r.had.co.nz/Style.html Guia sugerido pelo Google: https://google.github.io/styleguide/Rguide.xml 1.6.8 Tipos de Variáveis Existem diversos tipos de objetos, e cada tipo “armazena” um conteúdo diferente, desde tabelas de dados recém-carregados a textos, números, ou simplesmente a afirmação de verdadeiro ou falso (Booleano). Veja alguns exemplos a seguir: inteiro <- 928 outro.inteiro <- 5e2 #equivale ao número 500 decimal <- 182.93 alfanumerico <- 'exportação' #pode-se usar aspas simples ou duplas logico <- TRUE outro.logico <- FALSE Podemos usar a função class() para ver o tipo de cada variável: class(inteiro) [1] "numeric" class(outro.inteiro) [1] "numeric" class(decimal) [1] "numeric" class(caracter) [1] "character" class(logico) [1] "logical" class(outro.logico) [1] "logical" http://adv-r.had.co.nz/Style.html https://google.github.io/styleguide/Rguide.xml 20 Esses são alguns dos tipos básicos de objetos/variáveis no R que representam os tipos básicos de dados. Além destes, existem também os tipos “complexos”, que são vector, array, matrix, list, data.frame e factor. Para a criação de vetores, usamos a função de combinação de valores c(), que significa combine. Esta função vai combinar todos os parâmetros em um único vetor. Atente-se ao seguinte: vetores são sequências unidimensionais de valores de um mesmo tipo. Vejamos alguns exemplos: vetor.chr <- c('tipo1', 'tipo2', 'tipo3', 'tipo4') vetor.num <- c(1, 2, 5, 8, 1001) vetor.num.repetidos <- c(rep(2, 50)) #usando funcão para repetir números vetor.num.sequencia <- c(seq(from=0, to=100, by=5)) #usando função para criar sequências vetor.logical <- c(TRUE, TRUE, TRUE, FALSE, FALSE) ##veja o conteúdo das variáveis vetor.chr [1] "tipo1" "tipo2" "tipo3" "tipo4" vetor.num [1] 1 2 5 8 1001 vetor.num.repetidos [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 [35] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 vetor.num.sequencia [1] 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 [18] 85 90 95 100 vetor.logical [1] TRUE TRUE TRUE FALSE FALSE Data frame é, provavelmente, o tipo de dado complexo mais utilizado em R. É nele que você armazena conjuntos de dados estruturados em linhas e colunas (do tipo tabela). Um data frame possui colunas nomeadas, sendo que todas as colunas possuem a mesma quantidade de linhas. Conhecendo o tipo vector, você será capaz de entender como ele se relaciona com um data frame. Cada coluna de um data frame é um vetor. Um data frame pode ter colunas de diferentes tipos, mas cada coluna só pode ter registros de um único tipo. Esse conceito ficará mais claro a seguir, com o exemplo de criação de um data frame: #cria-se diferentes vetores nome <- c('João', 'José', 'Maria', 'Joana') 21 idade <- c(45, 12, 28, 31) adulto <- c(TRUE, FALSE, TRUE, TRUE) uf <- c('DF', 'SP', 'RJ', 'MG') #cada vetor é uma combinação de elementos de um MESMO tipo de dados #sendo assim, cada vetor pode ser uma coluna de um data.frame clientes <- data.frame(nome, idade, adulto, uf) clientes nome idade adulto uf 1 João 45 TRUE DF 2 José 12 FALSE SP 3 Maria 28 TRUE RJ 4 Joana 31 TRUE MG str(clientes) 'data.frame': 4 obs. of 4 variables: $ nome : Factor w/ 4 levels "Joana","João",..: 2 3 4 1 $ idade : num 45 12 28 31 $ adulto: logi TRUE FALSE TRUE TRUE $ uf : Factor w/ 4 levels "DF","MG","RJ",..: 1 4 3 2 Para selecionar ou trabalhar separadamente com apenas um campo (coluna) do seu data.frame, deve-se utilizar o caracter $. Repare o uso do $ nos exemplos mostrados a seguir, neles usaremos um data frame chamado airquality, um conjunto de dados que já vem carregado no R base e possui informações sobre a qualidade do ar. head(airquality$Ozone) #explicaremos sobre o comando head() no Cap. 2 [1] 41 36 12 18 NA 28 tail(airquality$Ozone) #explicaremos sobre o comando tail() no Cap. 2 [1] 14 30 NA 14 18 20 class(airquality$Ozone) #Informa o tipo da coluna [1] "integer" 22 is.vector(airquality$Ozone) #Apenas para verificar que cada coluna de um data.frame é um vector [1] TRUE Existem outros tipos de objetos complexos. Vamos apenas citar alguns deles na Tabela 1.2, pois nesse módulo utilizaremos muito pouco os demais tipos. Tabela 1.2 – Tipos de objetos/dados complexos no R Tipo Descrição Dimensão Homogêneo? vector Coleção de elementos simples. Todos os elemen- tos precisam ser do mesmo tipo básico de dado. 1 Sim array Coleção que se parece com o vector, mas é multidimensional. N Sim matrix Tipo especial de array com duas dimensões. 2 Sim list Objeto complexo com elementos que podem ser de diferentes tipos. 1 Não data.frame Tipo especial de lista, onde cada coluna é um vetor de apenas um tipo e todas as colunas têm o mesmo número de registros. É o tipo mais utilizado para se trabalhar com dados.2 Não factor Tipo especial de vector, que só contém valores pre- definidos (levels) e categóricos (characters). Não é possível adicionar novas cate- gorias sem criação de novos levels. 1 Não 1.6.9 Estrutura Condicional A estrutura condicional no R é algo bastante intuitivo. A estrutura de if (se) e else (então) usa os operadores lógicos apresentados anteriormente. Se a condição do if() for verdadeira, executa- se uma tarefa específica, se for falsa, executa-se uma tarefa diferente. A estrutura parece algo do tipo: if( variavel >= 500 ) { #executa uma tarefa se operação resultar TRUE } else { #executa outra tarefa se operação resultar FALSE 23 } 1.6.10 Estrutura de Repetição Trata-se de um dos conceitos mais importantes de qualquer linguagem de programação, e em R não é diferente. Loops (ou laços) repetem uma sequência de comando quantas vezes você desejar (comando for), ou até que uma condição aconteça (comando while), variando-se alguns aspectos entre uma repetição e outra. O comando for() é usado para realizar uma série de ordens para uma determinada sequên- cia ou índices (vetor). Sua sintaxe é bem simples: for(i in c(1, 2, 3, 4, 5)) { print(i^2) } [1] 1 [1] 4 [1] 9 [1] 16 [1] 25 O comando while() também é uma estrutura de controle de fluxo do tipo loop, mas, diferen- temente do for(), executa as tarefas repetidamente até que uma condição seja satisfeita, como é mostrado no exemplo a seguir. i <- 1 while(i <= 5){ print(i) i <- i + 1 } [1] 1 [1] 2 [1] 3 [1] 4 24 [1] 5 1.7 Considerações Finais Neste primeiro capítulo do módulo, introduzimos o conceito de ciência de dados, as áreas de aplicação e qual o fluxo de trabalho deve ser seguido por um cientista de dados para que ele possa realizar de forma adequada o seu trabalho. Nas seções finais, aprendemos os principais conceitos básicos sobre o ambiente R, uma ferramenta gratuita e de fácil aprendizado, sendo a mais utilizada atualmente para realizar a análise de dados. No próximo capítulo, daremos início aos estudos sobre o fluxo de trabalho definido para a ciência de dados. 25 UNIDADE 2: Exploração de Dados com a Ferramenta R 2.1 Considerações Iniciais Neste capítulo iremos aprender sobre como realizar a exploração de dados (tradução livre para data wrangling), a arte de preparar os dados de forma a viabilizar sua visualização e modela- gem. Existem três principais fases relacionadas à exploração dos dados, como pode ser visualizado na Figura 2.1. Na Seção 2.2 você irá aprender como importar (ou ler) dados do disco para a Ferra- menta R, seja de arquivos do tipo texto, bancos de dados ou outras fontes de dados. Na seção 2.3 você irá aprender a “limpar” os dados, uma forma de garantir a consistência dos dados para tornar mais fáceis as fases de transformação, visualização e modelagem. Na seção 2.4 aprenderemos sobre a transformação dos dados, uma fase em que frequentemente é necessário criar novas vari- áveis, resumir os dados, renomear ou reordenar as informações para facilitar o trabalho de visuali- zação e modelagem. Na seção 2.5 aprenderemos a escrever dados em disco a partir do R, caso exista esta necessidade, além de outras formas de leitura. Por fim, a Seção 2.6 apresenta as con- siderações finais. 2.2 Importação/Leitura dos Dados Após o entendimento do problema/projeto que será resolvido com a ciência de dados, pre- cisamos fazer com que o R leia os dados. Seja lá qual for o assunto do projeto, é muito importante garantir uma boa fonte de dados. Dados ruins, inconsistentes, não confiáveis ou mal formatados podem gerar muita dor de cabeça para o cientista de dados. 2.2.1 Tipos de Estruturas de Dados Os dados podem ser apresentados de diversas maneiras, não existe um padrão único para a difusão ou divulgação. Sendo assim, é bom que você esteja preparado para lidar com qualquer tipo de estrutura de dados. Existem diversas classificações de estrutura de dados. Vamos utilizar uma classificação mais generalista, que diz respeito a como os dados são disponibilizados. Sendo FIGURA 2.1: TEMAS ABORDADOS NO CAPÍTULO: EXPLORAÇÃO DOS DADOS (ADAPTADO DE WICKHAM&GROLEMUND (2016)) 26 assim, podemos classificá-los em três grandes tipos quanto à sua estrutura ou forma: dados estru- turados, semiestruturados e não estruturados. Dados estruturados: talvez seja o formato de dados mais fácil de se trabalhar no R. São conjuntos de informações organizadas em colunas (atributos, variáveis, etc.) e linhas (regis- tros, itens, observações, etc.). São dados mais comumente encontrados diretamente em bancos de dados, arquivos com algum tipo de separação entre as colunas, arquivos do Mi- crosoft Excel, arquivos com campos de tamanho fixo, etc. Dados não estruturados: Como o nome diz, estes dados não têm uma estrutura previsível, ou seja, cada conjunto de informações possui uma forma única. Geralmente são arquivos com forte teor textual. Não podemos dizer que são dados “desorganizados”, e sim que são organizações particulares para cada conjunto de informações. Podemos citar, por exemplo, e-mails, tweets, arquivos em PDF, imagens, vídeos, etc. Analisar este tipo de dado é muito mais complexo e exige conhecimento avançado em mineração de dados. Apesar disso, é o tipo de dado mais abundante na realidade. Dados semiestruturados: São dados que também possuem uma organização fixa, porém não seguem o padrão de estrutura linha/coluna, ou seja, seguem uma estrutura mais com- plexa e flexível, geralmente hierárquica, estruturada em tags ou marcadores de campos. São exemplos de arquivos semiestruturados: XML, JSON, HTML, etc. É o formato mais usado em troca de dados pela internet. Dados semiestruturados, algumas vezes, são facil- mente transformados em dados estruturados. 2.2.2 Definindo o Local dos Dados O R sempre trabalha com o conceito de working directory, ou seja, uma pasta de trabalho que será utilizada para “ler” e “escrever” os dados. Para verificar qual o working directory atual, utilize o seguinte comando: getwd() #Get Working Directory Para informar ao R em qual pasta ele deve ler ou escrever os arquivos, utilizamos o comando set working directory, que muda o diretório padrão do R para leitura e escrita: setwd("D:/caminho/do/arquivo/arquivo.csv") 2.2.3 Pacote para leitura dos dados O R base possui funções para a leitura dos principais tipos de arquivos. Um outro pacote específico, e muito bom para isso, é o readr. O pacote tidyverse inclui o carregamento do pacote readr. Diversos tipos de arquivos são lidos pelo R: comma-separated values (csv), planilhas Excel, arquivos separados por delimitadores, colunas de tamanho fixo, etc. Talvez o tipo de arquivo (es- truturado) mais comum hoje em dia, e mais simples de trabalhar, seja o csv. Começaremos a im- portar dados com arquivos csv. library(tidyverse) #já carrega o readr #ou library(readr) 27 Vamos importar um arquivo csv chamado senado.csv. Caso o arquivo esteja em seu working directory, basta passar apenas o nome do arquivo para a função, caso contrário será necessário informar todo o caminho até a pasta do arquivo. Usamos o read_csv() para fazer isso. senado <- read_csv("senado.csv") Esse comando carrega o conteúdo do arquivo senado.csv para o objeto (variável) senado. Atenção! Sempre verifique se o arquivo a ser importado encontra-se no working directory considerado pelo R, pois é lá que ele vai buscar o arquivo. Utilize o comando getwd() para fazer a checagem. Após o carregamento, começaremos a investigar o conteúdo desse objeto: os dados. head e tail são funções para ver a “cabeça” e a “cauda” dos seus dados, ou seja, o começo e o fim das amostras. É muito importante sempre observar a “aparência” dos dados após o carregamento. Essa observação ajuda a identificar erros básicos no carregamento,possibilitando ajustes o quanto antes, impedindo que esses erros se propaguem. Observe a Figura 2.2: na primeira linha temos os nomes das colunas e, em seguida, os registros (observações). Outros comandos muito importantes para começar a investigar os dados são str(), class() e summary(). Para verificar o tipo do objeto, ou seja, sua classe, utilize: class(senado) Já para verificar a estrutura do objeto, ou seja, seus campos (quando aplicável), digite: str(senado) #structure Para verificar estatísticas básicas do objeto (média, mediana, quantis, mínimo, máximo, etc.), quando aplicáveis, digite: FIGURA 2.2: INÍCIO E FIM DOS DADOS DO ARQUIVO SENADO.CSV 28 summary(senado) Muitas vezes, nem sempre o caractere separador de arquivo será o ; típico do arquivo csv. Nesse caso será necessário usar o read_delim(), onde você pode informar qualquer tipo de sepa- rador. Outro tipo de arquivo bastante comum é o de colunas com tamanho fixo (fixed width), também conhecido como colunas posicionais. Nesse caso, será necessário usar o read_fwf() informando o tamanho de cada coluna. O arquivo TA_PRECOS_MEDICAMENTOS.csv apresenta um conjunto de dados sobre medicamentos separados pelo delimitador |. O seguinte comando carrega o arquivo no objeto med. Em seguida visualize o início e o fim dos dados. med <- read_delim("TA_PRECOS_MEDICAMENTOS.csv", delim = '|') head(med) tail(med) O arquivo fwf-sample.txt possui o formato de colunas fixas, sendo que a primeira coluna (Nome) tem tamanho vinte, a segunda (Estado) tem tamanho dez e a terceira (Código) tem tamanho doze. O seguinte comando pode ser usado para ler o arquivo e mostrar o seu resultado: data1 <- read_fwf("fwf-sample.txt", col_positions = fwf_widths(c(20, 10, 12), c("Nome", "Estado", "Codigo"))) head(data1) O R oferece ainda a possibilidade de realizar a leitura de dados em tabelas de bancos de dados relacionais. Mostraremos um exemplo sobre como ler dados de uma tabela do Sistema Ge- renciador de Banco de Dados (SGBD) MySQL. Primeiramente, é necessário instalar o pacote que possibilita a conexão com o MySQL (caso ele ainda não esteja instalado) e carregá-lo. install.packages("RMySQL") library(RMySQL) Atenção! Nos exemplos vistos aqui, usaremos o SGBD MySQL. Para realizar a conexão do R com outros SGBDs (PostgreSQL, Oracle, etc.) é necessários instalar e carregar os pacotes específicos para estes bancos. Pesquise quais pacotes devem ser instalados para conectar o R a outros SGBDs. Em seguida é necessário usar o comando dbConnect para criar o objeto de conexão com o SGBD, utilizando os seguintes parâmetros: o SGBD, o usuário e a senha de acesso, a base de dados que se deseja acessar e o servidor em que estão os dados. A seguir temos um exemplo de uso do comando: mydb <- dbConnect(MySQL(), user="root", password="admin", dbname="reddit", host="127.0.0.1") Os comandos dbListTables e dbListFields mostram, respectivamente, todas as tabelas exis- tentes na base de dados e todos os campos de uma tabela específica: dbListTables(mydb) 29 dbListFields(mydb, "users") O próximo passo é usar o comando dbSendQuery para criar um objeto do tipo “ponteiro” para o conjunto de dados para o qual se quer ler. Deve-se usar a cláusula SELECT para selecionar os campos da tabela. pointer <- dbSendQuery(mydb, "select id, Label, Degree, closnesscentrality, betweenesscen- trality from users where id >= 7000") Por fim, deve-se usar o comando fetch para efetivamente carregar os dados em um objeto, passando como parâmetro o ponteiro para os dados criado anteriormente e a quantidade de regis- tros que serão carregados. Caso se queira carregar todos os registros, o segundo parâmetro deve ser igual a -1. users <- fetch(pointer, 12) head(users) Após realizar as operações desejadas, encerramos a conexão: dbDisconnect(mydb) 2.3 Limpeza dos Dados No dia a dia de quem trabalha com dados, infelizmente, é muito comum se deparar com dados formatados de um jeito bastante complicado de se manipular. Isso acontece pois a forma de se trabalhar com dados é muito diferente da forma de se apresentar ou visualizar dados. A limpeza de dados também é considerada parte da exploração de dados. Infelizmente, não temos como apresentar um passo a passo padrão para limpeza de dados, pois isso depende completamente do tipo de dado que você receber, da análise que você quer fazer e da sua criatividade em manipulação de dados. Mas conhecer os pacotes certos ajuda muito nessa tarefa. Atenção! É muito mais fácil trabalhar no R com dados “bem estruturados”, onde cada coluna deve ser uma única variável e cada linha deve ser uma única observação. Na contramão da limpeza de dados, você provavelmente terá o problema contrário ao final da sua análise. Supondo que você organizou seus dados perfeitamente, conseguiu executar os modelos que gostaria, gerou diversos gráficos interessantes e está satisfeito com o resultado, você ainda precisará entregar relatórios finais da sua análise em forma de tabelas sumarizadas e expli- cativas, de modo que os interessados possam entender os dados facilmente, apenas com uma rápida análise visual. Neste caso, que tipo de tabela seria melhor produzir? Provavelmente, quem for ler seus relatórios entenderá mais rapidamente as tabelas com dados “desestruturados”, que possuem totalizadores e informações com resumos dos dados apresentados. É importante apren- der a estruturar e desestruturar tabelas de todas as formas possíveis. Para exemplificar, veja algumas tabelas disponíveis no pacote tidyverse, ilustrando os dife- rentes tipos de organização. A Figura 2.3 mostra três tabelas que possuem basicamente os mesmos dados e informações, dispostos de forma diferente. 30 2.3.1 O Pacote tidyr Apesar de existirem diversas possibilidades de situações que necessitem de limpeza de da- dos, a conjugação de três pacotes consegue resolver a grande maioria dos casos: dplyr, tidyr e stringr. O pacote tidyr é mais um dos pacotes criados por WICKHAM & GROLEMUND (2016). Este fato, por si só, já traz algumas vantagens: ele se integra perfeitamente com o pacote dplyr, usando o conector %>%, e tem a sintaxe de suas funções bastante intuitiva. install.packages("tidyr") library(tidyr) ?tidyr O pacote tidyr também tem suas funções, em que cada uma representa uma tarefa para organizar os dados. As funções que abordaremos são os seguintes: gather() spread() separate() unite() Vale lembrar que tudo que for feito usando o pacote tidyr é possível executar também usando o R base, mas de uma forma um pouco menos intuitiva. Caso queira entender como usar o R base pra isso, procure mais sobre as funções melt() e cast(). Gather: A função gather() serve para agrupar duas ou mais colunas e seus respectivos valores (conteúdos) em pares. Assim, o resultado após o agrupamento é sempre duas colunas. A primeira delas possui observações cujos valores chave eram as colunas antigas e a segunda possui os valores respectivos relacionados com as colunas antigas. Na prática, a função gather diminui o número de colunas e aumenta o número de linhas de nossa base de dados. FIGURA 2.3: TABELAS DO PACOTE TIDYVERSE, COM AS MESMAS INFORMAÇÕES DISPOSTAS DE FORMAS DIFERENTES 31 Um problema comum é um conjunto de dados em que alguns dos nomes das colunas não são nomes de variáveis, mas valores de uma variável. Veja o conjunto de dados table4a mostrado na Figura 2.4; os nomes das colunas de 1999 e 2000 representam valores da variável year, e cada linha representa duas observações, e não apenas uma. Para “arrumar” um conjunto de dados como este, precisamos reunir essas colunas em um novo par de variáveis. Para descrever essa operação, precisamos de três parâmetros: (i) o conjunto de colunas que representam valores, não variáveis; neste exemplo, essas são as colunas“1999” e “2000”; (ii) o nome da variável cujos valores formam os nomes das colunas; ela é comu- mente chamada de chave, e neste exemplo será a coluna year; (iii) o nome da variável cujos valores estão espalhados pelas células; são comumente chamados de valor, e neste exemplo será a coluna cases. Uma vez obtidos os parâmetros, basta executar a função gather como mostrado a seguir. A função irá disponibilizar as informações em um novo formato, como mostrado no lado esquerdo da Figura 2.5. t4a <- table4a %>% gather("1999", "2000", key = "year", value = "cases") head(t4a) Spread: a função spread() faz o oposto da função gather(). Você usa quando uma obser- vação está espalhada por várias linhas. Por exemplo, veja a table2 mostrada na Figura 2.3, as informações de cada país (cases e population) em um determinado ano está espalhada em duas linhas diferentes. Para “arrumar” isso, primeiro analisamos o conjunto de dados assim como fizemos com a função gather(). Desta vez, no entanto, precisamos apenas de dois parâmetros: (i) a coluna que contém nomes de variáveis, a coluna-chave, que neste exemplo é type; e (ii) a coluna que contém valores e forma múltiplas variáveis, a coluna-valor, que neste exemplo chama-se value. FIGURA 2.4: CONJUNTO DE DADOS TABLE4 32 Uma vez obtidos os parâmetros, basta executar a função spread como mostrado a seguir. A função irá disponibilizar as informações em um novo formato, como mostrado no lado direito da Figura 2.6. table2.wide <- spread(table2, key = type, value = count) head(table2.wide) Separate: a função separate() é usada para separar duas variáveis que estão em uma mesma coluna. Lembre-se: cada coluna deve ser apenas uma única variável! É bastante comum a FIGURA 2.5: FORMATO DO CONJUNTO DE DADOS APÓS A FUNÇÃO GATHER (FONTE: WICKHAM & GROLEMUND (2016)) FIGURA 2.6: FORMATO DO CONJUNTO DE DADOS APÓS A FUNÇÃO SPREAD (FONTE: WICKHAM & GROLEMUND (2016)) 33 existência de duas ou mais variáveis juntas em uma única coluna, mas nem sempre isso é prejudi- cial, cabe avaliar quando vale a pena separá-las. Usaremos o exemplo da table3 mostrada na Figura 2.3. O resultado da execução do comando mostrado a seguir pode ser visualizado na Figura 2.7. table3.wide <- table3 %>% separate(rate, into = c("cases", "population"), sep='/') head(table3.wide) Unite: a função unite() é o oposto da função separate(), ela pega duas colunas (variáveis) e transforma em uma só. É muito utilizada para montar relatórios finais ou tabelas para análise visual. Vamos usar a table5, um conjunto de dados já disponível no R, para unir as colunas century e year em uma nova coluna. unite() usa como argumentos o data frame (conjunto de dados), o nome da nova variável a ser criada e o conjunto de colunas que devem ser combinados. Nós usa- remos um argumento adicional chamado sep pois por padrão a função unite() usa o caractere underscore (_) entre os valores das colunas. Nós não queremos qualquer separador, portanto usa- remos como argumento uma string vazia “”. o resultado da operação pode ser visto na Figura 2.8. table5.wide <- table5 %>% unite(new, century, year, sep = "") head(table5.wide) FIGURA 2.7: FORMATO DO CONJUNTO DE DADOS APÓS A FUNÇÃO SEPARATE (FONTE: WICKHAM&GROLEMUND (2016)) 34 2.4 Transformação dos Dados Após obter uma boa fonte de dados, e carregá-los para poder trabalhá-los no R, você certa- mente precisará realizar algumas transformações para que os dados estejam no ponto ideal para as fases finais de uma análise: execução de modelos econométricos, visualizações de dados, ta- belas agregadas, relatórios, etc. A realidade é que, na prática, os dados nunca estarão do jeito que você de fato precisa. Portanto, é fundamental dominar técnicas de transformação de dados. Entendamos a transformação de dados como o ato de transformar, reestruturar, limpar, agre- gar e juntar os dados. Para se ter uma noção da importância dessa fase, alguns estudiosos da área de Ciência de Dados, como DASU & JOHNSON (2003), afirmam que 80% do trabalho é encontrar uma boa fonte de dados, limpar e preparar os dados, sendo que os 20% restantes seriam o trabalho de aplicar modelos e realizar alguma análise propriamente dita. 2.4.1 Valores faltantes e o “NA” Em casos onde não existe valor em uma coluna de uma linha, o R atribui NA. É muito comum lidar com conjuntos de dados que tenham ocorrências de NA em alguns campos. É importante saber o que se fazer em casos de NA, e nem sempre a solução será a mesma: varia de acordo com as suas necessidades. Em algumas bases de dados, quem gera o dado atribui valores gené- ricos como 999 ou até mesmo um “texto vazio”, " ". Neste caso, você provavelmente terá que subs- tituir esses valores “omissos” por NA. Imputar dados em casos de NA é uma das várias estratégias para lidar-se com ocorrência de missing no conjunto dos dados. Seguem algumas funções úteis para lidar-se com NA: A função summary() pode ser usada para averiguar a ocorrência de NA. A função is.na() realiza um teste para saber se a variável/coluna possui um valor NA. retorna TRUE se for NA e FALSE se não for. FIGURA 2.8: FORMATO DO CONJUNTO DE DADOS APÓS A FUNÇÃO UNITE (FONTE: WICKHAM & GROLEMUND (2016)) 35 A função complete.cases() retorna TRUE para as linhas em que todas as colunas possuem valores válidos (preenchidos) e FALSE para as linhas em que, em alguma coluna, existe um NA. Ou seja, esta função diz quais são as linhas (amostras) completas em todas as suas características (campos). Algumas funções possuem o argumento na.rm, ou semelhantes, para desconsiderar NA no cálculo. É o caso das funções mean() ou sum(). Para os exemplos a seguir, vamos utilizar uma base de dados pré-carregada no R chamada airquality, que possui dados sobre a qualidade do ar em cidades norte-americanas. data("airquality") #base de dados pré-carregada no R summary(airquality) #verificando ocorrência de NA Na Figura 2.9 é possível observar que existem 37 ocorrências de NA na coluna Ozone e sete ocorrências de NA na coluna Solar.R. A função is.na() pode mostrar as posições da coluna Ozone que possuem o valor NA. A Figura 2.10 mostra que na quinta posição da variável Ozone existe um valor de NA, o que pode ser verificado com o comando head. is.na(airquality$Ozone) FIGURA 2.9: OCORRÊNCIAS DE NA'S NA BASE DE DADOS AIRQUALITY 36 2.4.2 Transformação de dados com o Pacote dplyr O pacote dplyr possui uma sintaxe simples e concisa, o que facilita o aprendizado e torna o pacote um dos preferidos para realizar tarefas de transformação de dados. Ao carregar o pacote tidyverse, você já carregará automaticamente o pacote dplyr, mas você também pode carregá-lo individualmente: install.packages("dplyr") library(dplyr) ?dplyr O dplyr cobre praticamente todas as tarefas básicas da transformação de dados: agregar, sumarizar, filtrar, ordenar, criar variáveis, dentre outras. As funções do dplyr reproduzem as princi- pais tarefas da transformação, de forma bastante intuitiva: select() filter() arrange() group_by() summarise() Essas são as principais funções, mas existem outras disponíveis, como por exemplo slice(), rename() e transmute(). Além de nomes de funções intuitivos, o dplyr também faz uso de um recurso disponível bastante interessante, o operador %>% (originário do pacote magrittr). Este ope- rador encadeia as chamadas de funções de forma que você não vai precisar ficar chamando uma FIGURA 2.10: VALORES DE NA NA BASE DE DADOS AIRQUALITY 37 função dentro da outra ou ficar fazendo atribuições usando diversas linhas para concluir suas ma- nipulações. Aliás, podemos dizer que esse operador %>%, literalmente, cria um fluxo sequencial bastante claro e legível para todas as atividades de transformação. A seguir vamos ver com mais detalhes o funcionamento das principais
Compartilhar