3 Dataframes

Um dataframe contém um conjunto de dados organizados em linhas e colunas, assim como uma matriz. No entanto, existe uma diferença importante entre uma matriz e um dataframe. O dataframe aceita que as colunas tenham diferentes tipos de dados, enquanto uma matriz só permite um tipo para todas as colunas.

Para darmos início, vamos limpar a memória e verificar o diretório.

#para limpar a memoria
rm(list= ls())
#para verificar o diretório de trabalho
getwd()

É sempre bom deixarmos alinhado com a língua que usaremos para evitar problemas com acentuação nos títulos. Também vamos desativar a notação científica para que os códigos do IBGE apareçam por completo.

#para ajustar a língua para português usando a função
Sys.setlocale(category = "LC_ALL", locale = "pt_BR.UTF-8")
## [1] "LC_COLLATE=pt_BR.UTF-8;LC_CTYPE=pt_BR.UTF-8;LC_MONETARY=pt_BR.UTF-8;LC_NUMERIC=C;LC_TIME=pt_BR.UTF-8"
#para desativar a notação científica
options(scipen = 999)

3.1 Criação de dataframe

Vimos que um dataframe pode conter diferentes tipos de variáveis. Para vermos com mais detalhes como um dataframe funciona, vamos criar um a partir de vetores.

Podemos criar vetores e depois uni-los usando a função data.frame(). Também poderemos importar bancos de dados prontos, o que é ainda mais usual.

Vamos começar com a construção de um dataframe a partir dos vetores.

Vamos criar um dataframe com dados das capitais das Unidades da Federação do Brasil. Para isso vamos precisar criar os vetores de cada conjunto de dados separadamente.

Vamos começar com os nomes das capitais, ‘nomes’. Lembre-se que os nomes devem entrar entre aspas: “Aracaju”, “Belém”, “Belo Horizonte”, “Boa Vista”, “Brasília”, “Campo Grande”, “Cuiabá”, “Curitiba”, “Florianópolis”, “Fortaleza”, “Goiânia”, “João Pessoa”, “Macapá”, “Maceió”, “Manaus”, “Natal”, “Palmas”, “Porto Alegre”, “Porto Velho”, “Recife”, “Rio Branco”, “Rio de Janeiro”, “Salvador”, “São Luís”, “São Paulo”, “Teresina”, “Vitória”

nomes <- c("Aracaju", "Belém", "Belo Horizonte", "Boa Vista", "Brasília", "Campo Grande", "Cuiabá", "Curitiba", "Florianópolis", "Fortaleza", "Goiânia", "João Pessoa", "Macapá", "Maceió", "Manaus", "Natal", "Palmas", "Porto Alegre", "Porto Velho", "Recife", "Rio Branco", "Rio de Janeiro", "Salvador", "São Luís", "São Paulo", "Teresina", "Vitória")

Vamos criar o objeto ‘regiao’: “Nordeste”, “Norte”, “Sudeste”, “Norte”, “Centro-Oeste”, “Centro-Oeste”, “Centro-Oeste”, “Sul”, “Sul”, “Nordeste”, “Centro-Oeste”, “Nordeste”, “Norte”, “Nordeste”, “Norte”, “Nordeste”, “Norte”, “Sul”, “Norte”, “Nordeste”, “Norte”, “Sudeste”, “Nordeste”, “Nordeste”, “Sudeste”, “Nordeste”, “Sudeste”

O vetor da população de cada capital receberá o nome de ‘pop’ e deverá conter: 664908, 1499641, 2521564, 419652, 3055149, 906092, 618124, 1948626, 508826, 2686612, 1536097, 817511, 512902, 1025360, 2219580, 890480, 306296, 1488252, 539354, 1653461, 413418 , 6747815, 2886698, 1108975, 11253503, 868075, 365855

Vamos criar um vetor para indicar se a capital fica no litoral ou não. O vetor receberá o nome de ‘costa’ e deverá conter: TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE

A partir dos vetores fica fácil criar um data frame usando a função data.frame(). Chame o dataframe de ‘capitais’ contendo os vetores nomes, regiao, pop e costa

Agora examine as variáveis de ‘capitais’ usando a função str().

3.2 Importação de um dataframe

Os dataframes são muito usados nas análises de dados. Os arquivos com dados espaciais, que serão usados para elaborarmos os mapas, contêm uma tabela de dados relacional. Ela é chamada relacional porque está associada a cada feição (ponto, linha ou polígono) do arquivo de geometria. Assim, em um arquivo do tipo shapefile o polígono do município de São Paulo tem a sua forma representada em um arquivo do tipo .shp. A tabela de dados do tipo .dbf contém uma linha para cada feição do arquivo da geometria e características (atributos) vinculados a cada feição. Um terceiro arquivo, do tipo .shx, faz a conexão entre o arquivo .shp e o .dbf.

Não é objetivo deste livro esgotar as possibilidades dos pacotes para análise de dados. O conteúdo que será apresentado será o mínimo para que seja possível a preparação dos arquivos que serão usados para a elaboração de mapas. Em geral, precisaremos saber fazer o download de tabelas e arquivos espaciais; fazer cálculos entre colunas da tabela; filtrar colunas e linhas e unir tabelas de dados a dados espaciais (shapefiles, geopackages, etc).

Para que o leitor consiga autonomia, vamos trabalhar com dados reais, disponíveis na Internet. Para baixar os dados diretos da Internet, vamos precisar do pacote R.utils. Precisamos instalá-lo agora.

#para instalar o pacote R.utils
install.packages("R.utils")

Também será necessário carregá-lo.

#para carregar o pacote instalado
library(R.utils)

O arquivo com extensão csv está disponível no site da Fundação SEADE. Desta forma, faremos o download do arquivo CSV após a identificação da url (Uniform Resource Locator, ou Localizador Uniforme de Recursos - significa endereço web, ou seja, o texto que você digita na barra do navegador para acessar uma determinada página ou serviço). Para isso, usaremos a função download.file do pacote R.utils. A documentação completa dos pacotes e funções estão disponíveis em R documentation.

#se quiser identificar a url de um determinado conjunto de dados, faça o download do arquivo desejado manualmente e clique em Ctrl+J. O navegador mostrará o caminho completo, que poderá ser copiado. Para o download do arquivo com os municípios do estado de São Paulo, use o comando a seguir. Use o nome do arquivo como arquivo de destino (destfile) 
download.file(url = "https://repositorio.seade.gov.br/dataset/71bffea4-0650-4f2e-9d82-b0179137cd3e/resource/ef737887-69d9-4afa-a513-00aa78ec2419/download/evolucao_casamentos.csv", destfile = "evolucao_casamentos.csv")

Também precisaremos do arquivo com os nomes dos municípios.

#para fazer download do arquivo 'codigos_municipios_regioes.csv'

download.file(url = "https://repositorio.seade.gov.br/dataset/1617c335-f5ab-426c-b175-280d4e41ec1c/resource/1871ac05-7b7f-4c13-9b4a-23c7d41fd988/download/codigos_municipios_regioes.csv", destfile = "codigos_municipios_regioes.csv")
#para criar um dataframe com o nome 'evol_casam' a partir do arquivo csv. Como o arquivo contém a primeira linha de cabeçalho, é preciso indicar que 'header = TRUE'. Como os campos estão separados por ponto e vírgula, deve-se indicar 'sep = ";" 
evol_casam <- read.csv("C:/Users/l_viz/Documents/RCartoTematica/evolucao_casamentos.csv", header = TRUE, sep = ";")

Vamos abrir o segundo arquivo csv que contém os códigos do IBGE e os nomes dos municípios do Estado de São Paulo.

#Este arquivo está codificado em 'latin1'.
#para criar um dataframe com o nome 'codigos', precisamos indicar o encoding como 'latin1' para que a acentuação seja lida corretamente
codigos <- read.csv("C:/Users/l_viz/Documents/RCartoTematica/codigos_municipios_regioes.csv", header = TRUE, sep = ";", dec = ".", stringsAsFactors=FALSE, encoding="latin1")

Como o banco de dados é muito grande, podemos olhar para uma amostra bem menor, digamos, de 6 linhas do começo do banco de dados ou das últimas linhas. Para isso usamos a função head() (cabeça) ou tail() (cauda), respectivamente. Rode as duas funções para ‘evol_casam’ e ‘codigos’.

#para ver as 6 primeiras linhas do início
head(evol_casam)
##    ano cod_ibge entre.pessoas.de.sexos.diferentes entre.pessoas.do.mesmo.sexo ignorado
## 1 2000  3500105                               139                          NA       NA
## 2 2000  3500204                                22                          NA       NA
## 3 2000  3500303                               119                          NA       NA
## 4 2000  3500402                                69                          NA       NA
## 5 2000  3500501                                73                          NA       NA
## 6 2000  3500550                                14                          NA       NA
##   total
## 1   139
## 2    22
## 3   119
## 4    69
## 5    73
## 6    14
head(codigos)
##   cod_ibge               municipios                   cod_ra          reg_administrativa
## 1  3500000 Estado sem especificação Estado sem especificação    Estado sem especificação
## 2  3500105               Adamantina                      691   RA de Presidente Prudente
## 3  3500204                   Adolfo                      689 RA de São José do Rio Preto
## 4  3500303                    Aguaí                      686              RA de Campinas
## 5  3500402           Águas da Prata                      686              RA de Campinas
## 6  3500501         Águas de Lindóia                      686              RA de Campinas
##         reg_metropolitanas cod_ibge6                  pop2020             porte_pop2020
## 1 Estado sem especificação    350000 Estado sem especificação  Estado sem especificação
## 2        Demais municípios    350010                    33894 Mais de 20 mil até 50 mil
## 3 RM São José do Rio Preto    350020                     3447                 Até 5 mil
## 4        Demais municípios    350030                    35608 Mais de 20 mil até 50 mil
## 5        Demais municípios    350040                     7797  Mais de 5 mil até 10 mil
## 6        Demais municípios    350050                    18374 Mais de 10 mil até 20 mil
##                    cod_drs                      drs
## 1 Estado sem especificação Estado sem especificação
## 2                        5                  Marília
## 3                       15    São José do Rio Preto
## 4                       14    São João da Boa Vista
## 5                       14    São João da Boa Vista
## 6                        3                 Campinas
#para ver as 6 últimas linhas
tail(evol_casam)
##        ano cod_ibge entre.pessoas.de.sexos.diferentes entre.pessoas.do.mesmo.sexo ignorado
## 14763 2022  3557154                                11                          NA       NA
## 14764 2022  3557204                                87                          NA       NA
## 14765 2022  3557303                                69                          NA       NA
## 14766 2022  3549102                               398                          NA       NA
## 14767 2022  3522901                                39                           1       NA
## 14768 2022  3538105                                79                          NA       NA
##       total
## 14763    11
## 14764    87
## 14765    69
## 14766   398
## 14767    40
## 14768    79
tail(codigos)
##     cod_ibge     municipios cod_ra          reg_administrativa       reg_metropolitanas
## 641  3556958 Vitória Brasil    689 RA de São José do Rio Preto        Demais municípios
## 642  3557006     Votorantim    685              RA de Sorocaba           RM de Sorocaba
## 643  3557105    Votuporanga    689 RA de São José do Rio Preto        Demais municípios
## 644  3557154       Zacarias    689 RA de São José do Rio Preto RM São José do Rio Preto
## 645  3557204      Chavantes    692               RA de Marília        Demais municípios
## 646  3557303   Estiva Gerbi    686              RA de Campinas        Demais municípios
##     cod_ibge6 pop2020               porte_pop2020 cod_drs                   drs
## 641    355695    1760                   Até 5 mil      15 São José do Rio Preto
## 642    355700  119824 Mais de 100 mil até 200 mil       6              Sorocaba
## 643    355710   91760  Mais de 50 mil até 100 mil      15 São José do Rio Preto
## 644    355715    2560                   Até 5 mil      15 São José do Rio Preto
## 645    355720   12223   Mais de 10 mil até 20 mil       5               Marília
## 646    355730   11079   Mais de 10 mil até 20 mil      14 São João da Boa Vista

Vamos usar estes dois dataframes para as operações com o pacote Tidyverse, a seguir.