Universidade Federal do Ceará

Departamento de Economia Agrícola

Programa de pós-graduação em Economia Rural

Introdução à análise de dados em R

Organizador: Professor Edward Martins Costa

Ministrante: Helson Gomes de Souza

Aula 2

Manipulação de dados

No R existe uma gama de ferramentas que permitem importar dados de diferentes tipos. Algumas dessas bibliotecas já estão previamente inseridos no conjunto de funções básicas do R. Outras bibliotecas, no entanto, precisam ser instaladas. Tendo feito a instalação, estas bibliotecas devem ser liberadas sempre que o usuário deseje usá-las.

Instalando bibliotecas

Para instalar uma biblioteca em seu R, use a função install.packages().

Liberando bibliotecas

Para liberar o uso de uma biblioteca, use a função library()

1. Importação de dados

1.1 Importando dados com coluna fixa

Os dados de coluna fixa são aqueles que são dispostos em um arquivo sem um delimitador de colunas. Em vez disso, as colunas possuem um número fixo de caracteres. Geralmente, cada coluna tem uma posição inicial (soma total dos caracteres em uma linha decorridos desde o primeiro caracter até o caracter inicial da coluna) e um tamanho (quantidade máxima de caracteres na coluna). Algumas funções em R facilitam a extração desse tipo de dados. A função read_fwf, por exemplo, realiza a leitura de dados de coluna fixa de uma maneira simples e eficiente.

read_fwf("nome_do_arquivo", fwf_cols(nome_da_coluna = c(posição_inicial, posição_inicial + tamanho -1)))

Para tanto, é necessário usar o pacote readr

1.2 Importando dados em formato .csv

O R disponibiliza uma função nativa para importação de dados em formato .csv

read.csv(file, sep, dec,...); sep é o separador de colunas e dec é o separador decimal.

Para testar vamos importar os dados sobre os estádios de futebpl do estados de alagoas disponíveis em

https://dados.gov.br/dataset/estadios-de-futebol-alagoas

Além da função read.csv, é possível importar os dados em formato .csv por meio de demais funções como read.csv2, read.delim, e read.table.

Verificar o funcionamento das funções citadas

1.3 Importando dados em formato .xls

Para importar dados neste formato, podemos usar a biblioteca readxl. Esta biblioteca possibilita a importação de dados neste formato por meio das funções read_excel e read_xls

Agora suponha que eu queira importar apenas as informações dispostas nas colunas C e D entre as linhas 20 e 50. Podemos especificar esta opção por meio do parâmetro range

1.4 Importando dados no formato .xlsx

Também é possível importar dados em formato .xlsx com a função read_excel do pacote readxl

Outros pacotes também facilitam a importação de dados no formato .xlsx, como por exemplo, o pacote openxlsx

1.5 Importando arquivos no formato .ods

Arquivos em formato .ods são bem semelhantes às planilhas do excel, mas são importados por meio de uma biblioteca específica no R. Nesta demonstração faremos uso da runção read_ods referente ao pacote readODS.

1.6 Lendo arquivos no formato .shp

A extensão .shp é comumente utilizada para armazenar dados geográficos. As informações são armazendadas em um shapefile onde cada linha corresponde a um polígono (ou ponto). O R não disponibiliza uma função nativa para importareste tipo de informação. Paraisso, utilizaremos a função readOGR do pacote rgdal.

1.7 Importando dados no formato .json

Muitas informações são disponibilizada na forma de um JavaScript Object Notation (json). Esses objetos são geralmente relacionados à exposição de informações ou criação de aplicações computacionais na linguagem Java script. A vantagem de se utilizar este formato de exposição de dados é que geralmente as informações são armazenadas em menos espaço do que os formatos convencionais.

Nesta especificação é possível inserir várias planílias dentro de um único arquivo. Cada planilha é agrupada dentro de chaves {}. Dentro da planilha, as colunas recebem um nome especificado entre aspas e os valores das informações de cada coluna são expostos entre colchetes e são separados por vírgula um a um.

Exemplo de um arquivo .json

{"Idade":["20","25","30","40","50"], "Escolaridade":["7", "5", "6", "7", "4"]}

Para importar este tipo de arquivo, é necessário usar uma biblioteca específica. Neste documento, faremos uso da biblioteca rjson. Instale-a em sua máquina.

Para testar a biblioteca vamos salvar o exemplo digitado acima no formato .json e importar para o R usando a função fromJSON.

Tendo importado o arquivo, o próximo passo é transformá-lo em um data frame.

1.8 Importando dados no formato .xml

Os dados em Extensible Markup Language (XML) são usados em arquivos de marcação. A principal característica desses dados é que as informações são armazenadas em tags. Além disso, destaca-se também que nesse tipo de informação os dados geralmente são dispostos de forma hierárquica. A principal vantagem do armazenamento de dados no formato .xml está na possibilidade de integração com outras linguagens. Por ser uma ferramenta de marcação, o XML pode ser facilmente compreendido por um conjunto de linguagens de programação.

Para exemplificar, suponha que queiramos criar uma base de dados com informações de emprego para oito indivíduos. A base de dados terá seis colunas de nomes ID, NAME, SALARY, STARTDATE e DEPT. O nosso arquivo .xml terá a seguinte especificação:

1 Rick 623.3 1/1/2012 IT 2 Dan 515.2 9/23/2013 Operations 3 Michelle 611 11/15/2014 IT 4 Ryan 729 5/11/2014 HR 5 Gary 843.25 3/27/2015 Finance 6 Nina 578 5/21/2013 IT 7 Simon 632.8 7/30/2013 Operations 8 Guru 722.5 6/17/2014 Finance

Para importar esse tipo de arquivo precisamos utilizar uma biblioteca específica.

2. Usando o Sparklyr

O sparklyr é um ambiente criado para facilitar as operações com grandes bases de dados. A ferramenta permite a importação de um grande volume de dados sem o comprometimento da memória do dispositivo. A ferramenta é recomendada para ocasiões em que o usuário deseja manipular ou extrair informações de uma base de dados muito grande.

2.1 Dasos em formato .csv

Para dados neste formato, é necessário usar a função spark_read_csv

2.2 Dados em formato .json

Para dados neste formato, é necessário usar a função spark_read_json

3. Variáveis e subseting

Utilizando as funções nativas é possível alterar as bases de dados de acordo com a necessidade do usuário. Para remonstrar, vamos utilizar umbanco de dados sobre migração

3.1 Usando a função subset para selecionar colunas

3.2 Usando a função subset para filtrar os valores de uma coluna

4. Manipulação de dados com plyr

A biblioteca plyr disponibiliza uma série de funções para a manipulação de dados.

4.1 summarise

Gera uma nova coluna com informações de outra coluna do banco de dados, descartando as repetições de uma variável de grupo.

4.2 transform

Gera uma nova coluna com informações de outra coluna do banco de dados, preservando as repetições de uma variável de grupo.

4.3 mutate

criar uma variável de acordo com outras variáveis do dataframe ou com informações não disponibilizadas no data frame

mutate(d, raiz = sqrt(count), tempo = 2020 - year)

4.4 Unindo duas bases de dados de acordo com um código de ligação

5. Dplyr e Tidyr

Dplyr e tidyr são duas bibliotecas do R com escopo voltado para o gerenciamento de dados. As duas bibliotecas possuem funções semelhantes à biblioteca plyr, porém, com algumas funcionalidades adicionais. Esses pacotes fazem parte de uma ferramenta de gerenciamento de dados mais ampla chamada tidyverse.

5.1 Função pip

A função pip (%>%) é uma função do tidyr criada para indicar que a próxima linha de comando é uma sequência da linha anterior, permitindo que o usuário faça várias operações no mesmo comando.

5.2 Criando variáveis com a função mutate

O pacote dplyr disponibiliza uma série de opções que permitem a criação de variáveis dentro de um data frame por meio da função mutate, sendo que, o própria função possui uma série de subfunções. Para demonstrar, vamos o banco de dados sobre migração utilizado anteriormente.

Suponha que queiramos saber o quanto a populaçãodas províncias cresceu entre 1966 e 1971 e que queiramos criar outra variável com a taxa de crescimento da população.

5.2.1 Criando uma variável condicional

Para criar uma variável dada por uma determinada condição, use a função mutate() em conjunto com a função ifelse.

mutate(nome_da_variavel = ifelse(condição, valor atribuído caso a condição seja satisfeita, falor atribuído caso a condição não seja satisteita)

5.3 Criando variáveis a partir de um agrupamento

Suponha que queiramos criar uma variável que esboça a quantidade média de migrantes recebida por cada província de destino. Para tanto, precisamos fazer uso da função group_by. Podemos fazer isto de duas maneiras.

Agora suponha que queiramos obter a média de todas as variáveis do data frame. Para isso, devemos usar a função mutate_all.

Agora suponha que queiramos obter a média e o desvio padrão de duas variáveis do data frame. Para isso, devemos usar a função mutate_at.

5.4 Filtrando linhas em um data frame

Para selecionar apenas as linhas com uma determinada característica, usamos a função filter.

Para exemplificar, suponha que queiramos deixar no banco de dados apenas as províncias de destino com mais de um milhão de habitantes em 1971.

5.5 Selecionando colunas em um data frame

A função select do pacote dplyr permite que o usuário selecione apenas as colunas desejadas no data frame.

5.6 Unindo data frames

O dplyr disponibiliza uma série de possibilidades para a realização de joins entre data frames.

Para demonstrar, vamos criar duas bases de dados aleatórias com um código de identificação de nome id.

5.7 Transformando dados estendidos em dados empilhados

Para empilhar dados em um data frame, podemos usar a função gather do pacote tidyr. Para demonstrar, considere o seguinte data frame:

5.8 Transformando dados empilhados em estendidos

Para transformar dados empilhados em planilhas de estilo cross-section, podemos usar a função spread do pacote tidyr.

5.9 Transformando uma coluna em duas com base em um separador comum

Suponha que tenhamos uma variável em que todas as observações sejam compostas por caracteres com um separador comum. Podemos separar as duas partes desta variável que estão separadas por um caractere comum. Para tanto, podemos usar a função separate do pacote tidyr.

Para demonstrar, suponha que tenhamos uma coluna com as capitais estaduais da região Nordeste e a sigla do seu respectivo estado separados por um ífem. Podemos gerar uma coluna com o nome da capital e outra coluna com a sigla do estado.

6. Lubridate

Lubridate é um pacote dedicado à manipulação de dados com a classe date. O pacote dispões de várias funções que permitem que ousuário opere do variáveis nos formatos de data e horas.

Para indicar ao R que um determinado objeto é uma data, use a função as_date.

O lubridate permite que o usuário declare que as datas seguem os seguintes formatos:

Caso seja necessário incluir as horas nas datas, o usuário pode utilizar as seguintes funções:

As demais especificações seguem a mesma lógica

Caso o usuário deseje extrair um componente específico de uma data, ele pode usar as seguintes funções:

Para verificar a data corrente use a função today()

Para checar a data e o horario correntes use a função now().

6.1 Intervalos

É possível checar a quantidade de tempo em um determinado intervalo de tempo

7. Stringr

stringr é uma biblioteca voltada para a manipulação de dados do tipo string em R. A biblioteca é ideal para a extração de informações em arquivos de texto. Informações sobre a biblioteca podem ser obtidas em:

https://github.com/tidyverse/stringr

http://stringr.tidyverse.org/

https://cran.r-project.org/web/packages/stringr/stringr.pdf

Este breve documento busca demonstrar as funcionalidades básicas acerca da biblioteca stringr.

OBS: Todas as funções do stringr começam com o prefixo str. Isso ajuda na hora de encontrar a função que você está procurando. No RStudio, digite str e aperte TAB para visualizar a lista de funções com esse prefixo.

7.1 Verificando a quantidade de caracteres em um objeto string

Para isto, podemos usar a função str_length(). Esta função recebe como argumento um vetor de strings e retorna o número de caracteres de cada string.

7.2 Transformando caracteres minúsculos em maiúsculos

Para este tipo de problema, podemos usar a função str_to_upper().

7.3 Transformando caracteres maiúsculos em minúsculos

Para este tipo de problema, podemos usar a função str_to_lower().

7.4 Removendo os espaços excedentes antes e depois da string

Muitas vezes os dados de texto possuem algumas falhas de digitações onde temos espaços adicionais na escrita. Para remover esses espaços, podemos usar a função str_trim().

7.5 Obtendo uma parte fixa de uma string

Muitas vezes as informações vêm com um caracter adicional. Para selecionar apenas a parte de interesse, podemos usar a função str_sub.

7.6 Concatenando duas strings

Muitas vezes precisamos unir duas variáveis strings para formar uma única variável. Para isso, podemos usar a função str_c().

7.7 Checando a presença de um character em um texto

Muitas vezes precisamos identificar se uma determinada palavra é mencionada em uma string. No R isso pode ser feito utilizando a função str_detect. A função retorna TRUE caso o caractere buscado seja encontrado e FALSE caso contrário.

7.7.1 Algumas variações

7.8 Substituindo um padrão específico por outro padrão

Algumas vezes nos deparamos com ocasiões em que precisamos substituir uma determinada palavra por outra em um bamco de dados. Este problema pode ser resolvido com a função str_replace().

7.9 Separando uma string em várias partes de acordo com um separador comum

7.10 Selecionando apenas as strings que contém um caracter em específico

8. Exercícios

1 - strings

Suponha que você irá avaliar uma política pública que fornece assistência técnica aos produtores rurais. Para facilitar a exposição, suponha que a sua amostra só possui cinco produtores. Seu banco de dados tem as seguintes propriedades:

dados <- data.frame(produtor = c("José Luis da Silva", "Maria da conceição Oliveira", "Antonio Gomes Pereira ", "Luzia da Silva Gomes", "Joana Silva Pereira"), municipio = c("feira de santana - BA", "alto santo - CE", "patos - PB", "picos - PI", "arcoverde - PE"), tratamento = rbinom(5, 1, .3), producao = runif(5, .5, 10))

1.1 Corrija os erros de ortografia e separação cometidos pela pessoa que tabulou a coluna produtor.

1.2 Corrija os erros de ortografia da variável município para que os nomes sejam escritos todos com iniciais maiúsculas.

1.3 Crie uma coluna adicional com o nome "UF", contendo a sigla do estado de cada município.

2 - Lubridate

A biblioteca lubridate disponibiliza uma base de dados sobre as partidas disputadas pelo time de basquete Los Angeles Lakers entre os anos de 2008 e 2009. Para importá-la para o seu ambiente de trabalho use dados <- lubridate::lakers. Cada partida é dividida em cinco períodos com 12 minutos de duração cada, que são indicados pela coluna period. A coluna etype indica o tipo de lance acontecido em um determinado tempo da partida, que por sua vez é indicado pela coluna time e a coluna points indica quantos pontos foram realizados em cada lance. Na coluna team estão expostas as siglas dos times, sendo "LAL" a sigla dos Los Angeles Lakers.

2.1 Use as funções da biblioteca lubridate para mostrar a média de tempo necessária para o Los Angeles Lakers marcar o primeiro ponto.

2.2 Mostre quantos pontos cada jogador do Lakers marcou entre 2008 e 2009, apresentando o resultado por ano.

2.3 Quem foi o artilheiro do Los Angeles Lakers em 2008? E em 2009?

2.4 Em média, quantos lances livres (free throw) o Los Angeles Lakers realiza por partida?

3 - Dplyr e tidyr

Usando o data frame disponibilizado a seguir, crie um data frame com as estatísticas descritivas (contendo as colunas indicando - nome das variáveis, número de observações,valor médio, desvio padrão, valor mínimo e valor máximo - nesta mesma ordem de apresentação) para cada uma das variáveis da tabela.

set.seed(200)

dados <- data.frame(V1 = rnorm(100, .7, .3), V2 = runif(100, 50, 5000), V3 = rbinom(100, 1, .45), V4 = as.factor(c(rep("M", 50), rep("F", 50))), V5 = rbeta(100, .5, .3, 0))

NOTA: Na construção da tabela, use um único comando sequenciando as linhas de comando com a função pip. A organização da posição das colunas pode ser feita em outra sequência de comandos