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.
É 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"
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.
Também será necessário carregá-lo.
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’.
## 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
## 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
## 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
## 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.