Departamento de Geografia de Campos - Universidade Federal Fluminense
Published
January 13, 2025
Warning
Este documento é destinado a usuários sem conhecimento prévio em programação e é parte integrante do curso de Geografia da População, ofertado para o curso de geografia da Universidade Federal Fluminense, campus de Campos dos Goytacazes, no 2º semestre de 2025. Sinta-se livre para divulga-lo desde que referencie o documento original.
Tip
Este conteúdo foi preparado para ser desenvolvido no RStudio, que é uma interface gráfica do R.
1Introdução
O R é um ambiente de programação para manipulação, análise de dados e apresentação gráfica, desenvolvido inicialmente por Robert Gentleman e Ross Ihaka, na Universidade de Auckland, Nova Zelândia. Atualmente, é mantido pelo R Development Core Team e resulta de um esforço colaborativo global (R Core Team, 2024). Com código aberto e distribuição gratuita, o R oferece uma base robusta (R base) complementada por mais de 21 mil pacotes adicionais, atraindo inúmeros desenvolvedores. Sua simplicidade, transparência e flexibilidade para criar novos pacotes são seus principais diferenciais.
Esta aula irá abordar os fundamentos da linguagem R, incluindo sintaxe, operações, estruturas de dados e manipulação de arquivos. As versões do R para Windows, Mac e Linux podem ser baixadas no site oficial do projeto: https://www.r-project.org. O site também oferece manuais, pacotes, documentação e atualizações do projeto. Além do R básico, destaca-se o RStudio, um ambiente de desenvolvimento integrado (IDE) que facilita o uso do R. Disponível gratuitamente em https://www.rstudio.com, o RStudio possui recursos como autocompletar funções, argumentos e objetos, sendo especialmente útil para iniciantes.
# Lista de pacotes necessáriospacotes_necessarios <-c("ggplot2", "dplyr", "readr","scales","remotes", "knitr")# Função para instalar pacotes ausentesinstalar_pacotes <-function(pacotes) { pacotes_faltantes <- pacotes[!pacotes %in%installed.packages()[, "Package"]]if (length(pacotes_faltantes) >0) {install.packages(pacotes_faltantes) }invisible(lapply(pacotes, library, character.only =TRUE))}# Executa a verificação e carrega os pacotesinstalar_pacotes(pacotes_necessarios)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
Attaching package: 'scales'
The following object is masked from 'package:readr':
col_factor
knitr::opts_chunk$set(comment ="#>", # Como o código será comentadooutput =file("aula_pratica_01.R", open ="wt") # Define o arquivo onde o código será salvo)
2 Conceitos básicos do R e do RStudio
O R funciona por meio de linhas de comando, onde o usuário digita instruções para o programa executar e retornar os resultados. O R é um programa independente e na interface do RStudio ele está na janala inferior esquerda, na aba Console - o RStudio é, na verdade, uma interface gráfica do R.
A Interface do RStudio organiza o ambiente de trabalho em quatro painéis principais, facilitando a utilização do R:
Script (Superior Esquerdo): área para editar, salvar e organizar comandos em arquivos .R e também em outra linguagens de programaças (Python, java, C++, etc.). Por este quadros é possível envie comandos ao console usando atalhos ou clicando no botão Run.
Console (Inferior Esquerdo): é onde os comandos são executados e os resultados aparecem. Principal janela do R, onde comandos são executados e resultados exibidos. O símbolo > indica que o R está pronto para receber um comando, enquanto + significa que o comando anterior não está completo. Mensagens de erro ou saída de funções também aparecem aqui.
Environment e History (Superior Direito):
Environment: Lista os objetos criados no espaço de trabalho (datasets, vetores, etc.).
History: Exibe o histórico de comandos executados.
Files/Plots/Packages/Help (Inferior Direito):
Files: Navegação nos arquivos do computador.
Plots: Exibição de gráficos gerados.
Packages: Gerenciamento de pacotes instalados.
Help: Acesso à documentação e explicações sobre funções.
O RStudio integra essas ferramentas, otimizando a experiência de programação e análise de dados. É uma interface amigável muito comum em plataformas de programação, tanto para iniciantes quanto para usuários avançados. O RStudio torna o uso do R mais intuitivo, organizando as janelas e oferecendo ferramentas que otimizam o trabalho (Debastiani, 2020).
2.1Arquivos mais comuns
Os R gera alguns tipos de arquivos que podem ser salvos. As principais deles são:
.R - Usado para salvar códigos criados e rotinas de análises (scripts).
.RData - Usado para salvar os objetos da área de trabalho (workspace).
.Rhistory - Usado para salvar o histórico dos comandos executados (normalmente salvo automaticamente).
.Rproj - Formato exclusivo do RStudio, serve para salvar todas as informações utilizadas anteriormente pelo RStudio de maneira simplificada.
.rds e .rda: arquivos de dados nativos do R
2.2Área de trabalho e diretório de trabalho
O R é uma linguagem de programação orientada a objetos, onde os dados e resultados de análises são armazenados temporariamente no workspace (área de trabalho). Ao iniciar o R, o workspace está vazio, mas você pode criar objetos para armazenar informações. Esses objetos podem ser exportados ou salvos em arquivos. Quando o R é fechado, os objetos são apagados, a menos que sejam salvos previamente.
O R opera em um diretório de trabalho (working directory), uma pasta específica no computador. Arquivos nesse diretório são carregados facilmente, e qualquer arquivo exportado será salvo lá por padrão, salvo indicação contrária. Você pode alterar o diretório de trabalho sem impactar os objetos existentes no workspace.
getwd() # Mostrar o diretório de trabalho atualdir() # Listar os arquivos do diretóriosetwd() # Mudar o diretório de trabalho
2.3Pacotes
Como existem muitos pacotes para R só alguns deles são pré-instalados, os demais precisam ser instalados no computador. O procedimento de instalação precisa ser realizado apenas uma vez (além de atualização de tempos em tempos). Após instalados os pacotes estarão disponívels para uso, mas é preciso carregar o pacote para utilização.
#install.packages("gapminder") # instala o pacote gapminderlibrary("gapminder") # Carrega o pacote
Existem alguns detalhes que são importantes no R. Os principais são:
Caracteres maiúsculos e minúsculos: O R diferencia maiúsculas de minúscula (é case sensitive), ou seja A é diferente a
Separador decimal: O separador decimal será sempre um símbolo do ponto (.). A vírgula (,) é reservado para separar diferentes objetos em uma função ou valores em um vetor. Para alterar essa opção é preciso configurar nas preferências gerais do sistema operacional mas eu não recomendo.
Parênteses, colchetes e chaves - Os símbolos de parênteses - () - servem para agrupar objetos dentro de uma função e os símbolos de chaves - {} - servem para agrupar funções dentro de outras funções. Os colchetes - [] - são utilizados para indexar objetos dentro de outros objetos. Esses são simbolos que agrupam consjuntos de outros símboloa ou funções e sempre que forem abertos, deverão ser fechados: deve haver um símbolo - ), ], ou } - para finalizar o agrupamento.
Caracteres especiais: caracteres como por acentos e espaços devem ser evitados pra nomes de objetos ou funções. Minha recomendação é usar underline (_) nos lugares onde você gostaria dos espaços. Esses símbolos especiais podem ser nos resultados finais, como, por exemplo, em gráficos.
2.4 Calculadora
2+2# Soma
#> [1] 4
8-3# Subtração
#> [1] 5
3*8# Multiplicação
#> [1] 24
8/2# Divisão
#> [1] 4
2^8# Potência
#> [1] 256
(2+4) /7# Ordem de operações
#> [1] 0.8571
2.5 Funções do R
Estrutura básica para chamar uma função é sempre funcao(argumento1 = valor1, argumento2 = valor2). Por exemplo:
log(x =8, base =2) # Logaritmo de 8 na base 2rep(x =1, times =4) # Repetir o número 1 quatro vezessum(1, 8, 79) # Soma de vários números
2.6 Ajuda
Use help() ou ? para consultar funções:
help(log) # Ajuda da função logargs(log) # Exibe apenas os argumentos
#> function (x, base = exp(1))
#> NULL
??mean # Busca por funções relacionadas ao termo "mean"
2.7Trabalhando com Objetos
2.7.1 Criação e atribuição
x <-10# Atribui o valor 10 ao objeto xy <-sum(2, 9, 43) # Salva o resultado da soma de 2+9+43 em yz <- y /19# Usa y em uma operação
2.7.2Listar e Remover Objetos
ls() # Lista os objetos no workspace
#> [1] "instalar_pacotes" "pacotes_necessarios" "x"
#> [4] "y" "z"
rm(x) # Remove o objeto xrm(list =ls()) # Remove todos os objetos
2.8Tipos de Dados
2.8.1Numérico
x <-4.5# Número decimalis.numeric(x) # Verifica se x é numérico
#> [1] TRUE
2.8.2Texto (Character):
x <-"R é ótimo"# Texto deve estar entre aspasis.character(x) # Verifica se x é texto
#> [1] TRUE
2.8.3Lógico (Logical):
x <-TRUE# Valor lógico (verdadeiro)y <-FALSE# Valor lógico (falso)
2.9Estruturas de Dados
2.9.1Vetores
Armazenam elementos do mesmo tipo em conjunto.
alturas =c(1.70, 1.65, 1.80,1.75,1.55) # Cria um vetoralturas[2] # Acessa o 2º elemento
#> [1] 1.65
alturas[-1] # Exclui o 1º elemento
#> [1] 1.65 1.80 1.75 1.55
letras =c('a')
2.9.2Fatores
No R, fatores são usados para representar variáveis categóricas, que podem ser nominais (sem ordem) ou ordinais (com ordem). Fatores são importantes para análises estatísticas, pois permitem que o R reconheça as categorias como níveis distintos, facilitando comparações, análises de variância, regressões e outros métodos.
2.9.2.1Variáveis Nominais
Representam categorias sem ordem natural ou hierarquia. Cada categoria é tratada como equivalente, sem relação de maior ou menor.
cor_olhos <-factor(c("azul", "verde", "castanho", "azul", "verde"))estado_civil =factor(c("solteiro", "casado", "divorciado","viúvo","casado"))levels(cor_olhos) # Mostra os níveis: "azul", "castanho", "verde"
Representam categorias com ordem ou hierarquia, onde uma categoria é maior ou menor que outra.
satisfacao_vida <-factor(c("bom", "ótimo", "ruim", "bom", "regular"),levels =c("ruim", "regular", "bom", "ótimo"), ordered =TRUE)escolaridade =factor(c("medio", "fundamental", "superior", "superior", "medio"),levels=c("fundamental", "medio", "superior"),ordered = T)levels(satisfacao_vida) # Mostra os níveis na ordem definida
#> [1] "ruim" "regular" "bom" "ótimo"
is.ordered(satisfacao_vida) # Verifica se o fator é ordenado
#> [1] TRUE
escolaridade
#> [1] medio fundamental superior superior medio
#> Levels: fundamental < medio < superior
table(satisfacao_vida,escolaridade)
#> escolaridade
#> satisfacao_vida fundamental medio superior
#> ruim 0 0 1
#> regular 0 1 0
#> bom 0 1 1
#> ótimo 1 0 0
No R, é possível realizar cálculos diretamente com vetores, permitindo análises estatísticas rápidas e eficientes. Por exemplo, você pode calcular a média com mean(), a mediana com median(), e o desvio padrão com sd(). Além disso, a função summary() fornece um resumo estatístico completo, incluindo os valores mínimos, máximos e a mediana, enquanto a função quantile() permite calcular os quartis específicos de um vetor.
mean(alturas)
#> [1] 1.69
median(alturas)
#> [1] 1.7
sd(alturas)
#> [1] 0.09618
summary(alturas)
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 1.55 1.65 1.70 1.69 1.75 1.80
O data.frame é uma das principais estruturas de dados no R, amplamente utilizado em análises estatísticas e manipulação de dados. Ele permite armazenar diferentes tipos de dados (numéricos, caracteres, lógicos, fatores, etc.) em colunas distintas dentro de uma mesma estrutura, tornando-o extremamente versátil e adequado para trabalhar com dados tabulares.
O data.frame organiza os dados em linhas e colunas, onde cada coluna é um vetor contendo elementos do mesmo tipo, e cada linha representa uma observação. Diferente de vetores ou matrizes, que exigem que todos os elementos sejam do mesmo tipo, o data.frame permite combinar tipos diferentes, como números, texto e valores lógicos, em uma única estrutura. Essa característica torna o data.frame ideal para representar dados reais, como tabelas de pesquisas, resultados experimentais ou relatórios.
Uma das maiores vantagens do data.frame é sua flexibilidade. Ele pode combinar dados heterogêneos em uma única tabela e é facilmente manipulável, permitindo acessos e alterações por linha, coluna ou com base em condições específicas. Por exemplo, você pode acessar colunas pelo nome, filtrar linhas com condições ou adicionar novas colunas conforme necessário.
Além disso, o data.frame é compatível com muitas funções estatísticas e gráficas no R, o que o torna uma escolha padrão para análises de dados. Ele também serve como base para pacotes mais avançados, como dplyr e tibble, que otimizam e simplificam ainda mais a manipulação de dados.
Você pode criar um data.frame usando a função data.frame() (ou dplyr::tibble()) Por exemplo, a estrutura abaixo combina três vetores diferentes em uma tabela:
A indexação é o processo de acessar ou manipular partes específicas de um conjunto de dados dentro de data.frame, vetores e matrizes. No R, a indexação de um data.frame é muito flexível e poderosa, permitindo selecionar linhas, colunas ou até mesmo células individuais com base em suas posições ou nomes. Isso é feito usando colchetes ([ , ]), onde o primeiro elemento representa as linhas e o segundo as colunas. Além disso, o R permite o uso de condições lógicas, nomes de colunas ou linhas, e operadores especiais como $, tornando a navegação e a manipulação de dados intuitivas e eficientes. A compreensão dessa funcionalidade é essencial para extrair informações relevantes de tabelas e aplicar transformações específicas nos dados.
2.10.1Indexação de vetores
escolaridade[2]
#> [1] fundamental
#> Levels: fundamental < medio < superior
Crie um data.frame que combine o vetor com outro contendo nomes fictícios.
2.12 A base de dados Gapminder
Gapminder é uma fundação independente originária da Suécia sem fins lucrativos e sem vinculações políticas, religiosas ou econômicas que se autointitula um repositório de fatos (fact think) e não um repositório de ideias (think tank). O objetivo dessa fundação é disponibilizar recursos para o ensino que traduzam fatos mundiais de forma mais compreensível. A ideia da fundação é trabalhar com dados estatísticos gerados ou processados por universidades, agências da ONU e organizações não-governamentais. Recomendo uma visita ao site da instituição que possui diversas ferramentas para o ensino de dados sobre a economia, demografia e geografia mundial. Os dados baixados do site foram processadas e foi gerado o arquivo gapminder.rds disponível neste link para download (estão no seu diretório de trabalho).
#rode o comando a seguir para carregar# o arquivo baixado para sua áreas de trabalhogapminder<-readRDS('gapminder.rds')
O banco de dados tem um conjunto de 19 variáveis, sendo 12 de identificação dos países e territórios e sete variáveis socioeconômicas, assim descritas:
geo: unidade territorial que neste banco de dados (191 estados reconhecidos pela ONU)
name: nome da unidade territorial
four_regions, eight_regions e six_regions: região do país, considerando a subdivisão em quatro, oito e seis regiões globais, respectivamente
member_oecd_g77: Países signatários da “Declaração conjunta dos 77 países em Desenvolvimento” (G-77), membro da OECD ou outros.
Lat e Long: Centroide (local útil para títulos e pontos de rotas)
Dt_Member: Data em que o país se tornou membro da ONU
time: ano a que se refere a informação (de 1800 a 2010)
pop: População passada e projetada (versão ONU 2017)
ipp e GDP: renda per capita e produto interno bruto
le: Expectativa de vida ao nascer
cm: Probabilidade de morte antes de completar cinco anos
tfr: taxa de fecundidade total (numero médio de nascidos vivos por mulher)
co2: emissão de dióxido de carbono pela queima de combustível fóssil (ton de CO2 por pessoa)
Para maiores informações sobre as fontes dessas informações consulte no site do Gapminder. Para explorar o banco de dados, use os comandos a seguir
str(gapminder) #Apresenta a estrutura do Banco de Dados Gapminder#> tibble [59,297 × 19] (S3: tbl_df/tbl/data.frame)#> $ geo : Factor w/ 197 levels "afg","ago","alb",..: 1 1 1 1 1 1 1 1 1 1 ...#> $ name : Factor w/ 197 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ...#> $ four_regions : Factor w/ 4 levels "África","Américas",..: 3 3 3 3 3 3 3 3 3 3 ...#> $ eight_regions : Factor w/ 8 levels "África do Norte",..: 5 5 5 5 5 5 5 5 5 5 ...#> $ six_regions : Factor w/ 6 levels "América","Extremo Oriente",..: 5 5 5 5 5 5 5 5 5 5 ...#> $ members_oecd_g77: Factor w/ 3 levels "g77","oecd","others": 1 1 1 1 1 1 1 1 1 1 ...#> $ Lat : num [1:59297] 33 33 33 33 33 33 33 33 33 33 ...#> $ Long : num [1:59297] 66 66 66 66 66 66 66 66 66 66 ...#> $ Dt_UNMember : Date[1:59297], format: "1946-11-19" "1946-11-19" ...#> $ WB_reg : Factor w/ 7 levels "East Asia & Pacific",..: 6 6 6 6 6 6 6 6 6 6 ...#> $ WB_income2017 : Ord.factor w/ 4 levels "Low income"<"Lower middle income"<..: 1 1 1 1 1 1 1 1 1 1 ...#> $ time : num [1:59297] 1800 1801 1802 1803 1804 ...#> $ pop : num [1:59297] 3280000 3280000 3280000 3280000 3280000 3280000 3280000 3280000 3280000 3280000 ...#> $ ipp : num [1:59297] 603 603 603 603 603 603 603 603 603 603 ...#> $ gdp : num [1:59297] 1.98e+09 1.98e+09 1.98e+09 1.98e+09 1.98e+09 ...#> $ tfr : num [1:59297] 7 7 7 7 7 7 7 7 7 7 ...#> $ le : num [1:59297] 28.2 28.2 28.2 28.2 28.2 ...#> $ cm : num [1:59297] 469 469 469 469 469 ...#> $ co2 : num [1:59297] NA NA NA NA NA NA NA NA NA NA ...
head(gapminder) # Exibe as 6 primeiras observações
geo
name
four_regions
eight_regions
six_regions
members_oecd_g77
Lat
Long
Dt_UNMember
WB_reg
WB_income2017
time
pop
ipp
gdp
tfr
le
cm
co2
afg
Afghanistan
Asia
Ásia Ocidental
Sul da Ásia
g77
33
66
1946-11-19
South Asia
Low income
1800
3280000
603
1.978e+09
7
28.21
468.6
NA
afg
Afghanistan
Asia
Ásia Ocidental
Sul da Ásia
g77
33
66
1946-11-19
South Asia
Low income
1801
3280000
603
1.978e+09
7
28.20
468.6
NA
afg
Afghanistan
Asia
Ásia Ocidental
Sul da Ásia
g77
33
66
1946-11-19
South Asia
Low income
1802
3280000
603
1.978e+09
7
28.19
468.6
NA
afg
Afghanistan
Asia
Ásia Ocidental
Sul da Ásia
g77
33
66
1946-11-19
South Asia
Low income
1803
3280000
603
1.978e+09
7
28.18
468.6
NA
afg
Afghanistan
Asia
Ásia Ocidental
Sul da Ásia
g77
33
66
1946-11-19
South Asia
Low income
1804
3280000
603
1.978e+09
7
28.17
468.6
NA
afg
Afghanistan
Asia
Ásia Ocidental
Sul da Ásia
g77
33
66
1946-11-19
South Asia
Low income
1805
3280000
603
1.978e+09
7
28.16
468.6
NA
summary(gapminder) # Principais estatísticas descritivas das variáveis #> geo name four_regions #> afg : 301 Afghanistan : 301 África :16254 #> ago : 301 Albania : 301 Américas:10535 #> alb : 301 Algeria : 301 Asia :17759 #> and : 301 Andorra : 301 Europa :14749 #> are : 301 Angola : 301 #> arg : 301 Antigua and Barbuda: 301 #> (Other):57491 (Other) :57491 #> eight_regions six_regions #> África Subsaariana:14448 América :10535 #> Extremo Oriente : 9632 Extremo Oriente : 9632 #> Ásia Ocidental : 8127 Europa Central e Ásia Ocidental:16254 #> Europa Ocidental : 7525 Oriente Médio e Norte da África: 6020 #> Leste Europeu : 7224 Sul da Ásia : 2408 #> América do Norte : 6923 África Subsaariana :14448 #> (Other) : 5418 #> members_oecd_g77 Lat Long Dt_UNMember #> g77 :39130 Min. :-42.0 Min. :-175.0 Min. :1945-10-24 #> oecd : 9030 1st Qu.: 4.0 1st Qu.: -5.5 1st Qu.:1945-12-27 #> others:10836 Median : 17.5 Median : 21.8 Median :1960-09-28 #> NA's : 301 Mean : 19.1 Mean : 22.9 Mean :1965-09-09 #> 3rd Qu.: 40.0 3rd Qu.: 51.5 3rd Qu.:1977-09-20 #> Max. : 65.0 Max. : 179.1 Max. :2011-07-14 #> NA's :1204 #> WB_reg WB_income2017 time #> Europe & Central Asia :15652 Low income : 9331 Min. :1800 #> Sub-Saharan Africa :14448 Lower middle income:15652 1st Qu.:1875 #> Latin America & Caribbean : 9933 Upper middle income:16555 Median :1950 #> East Asia & Pacific : 9632 High income :17458 Mean :1950 #> Middle East & North Africa: 6321 NA's : 301 3rd Qu.:2025 #> (Other) : 3010 Max. :2100 #> NA's : 301 #> pop ipp gdp tfr #> Min. :6.45e+02 Min. : 245 Min. :1.02e+06 Min. :1 #> 1st Qu.:4.25e+05 1st Qu.: 901 1st Qu.:4.88e+08 1st Qu.:2 #> Median :2.63e+06 Median : 1750 Median :3.40e+09 Median :5 #> Mean :2.31e+07 Mean : 6486 Mean :1.60e+11 Mean :5 #> 3rd Qu.:1.08e+07 3rd Qu.: 4855 3rd Qu.:2.92e+10 3rd Qu.:6 #> Max. :1.65e+09 Max. :179297 Max. :5.05e+13 Max. :9 #> NA's :12302 NA's :12302 NA's :3311 #> le cm co2 #> Min. : 1 Min. : 0.2 Min. : 0 #> 1st Qu.:32 1st Qu.: 15.7 1st Qu.: 0 #> Median :49 Median :179.1 Median : 1 #> Mean :53 Mean :209.2 Mean : 3 #> 3rd Qu.:74 3rd Qu.:403.4 3rd Qu.: 4 #> Max. :95 Max. :756.3 Max. :247 #> NA's :3167 NA's :1800 NA's :42415
mean(gapminder$ipp) #Gera erro por causa dos valores missing (vazios)
#> [1] NA
mean(gapminder$ipp, na.rm =TRUE)
#> [1] 6486
Não faz muito sentido para nós visualizarmos as variáveis descritivas de todas as variáveis em todas as observações (comando summary). Pelo comando head é possível notar que há uma linha para cada ano, referente a cada país (só o Afeganistão aparece na lista). Embora os dados estejam ali, não sabemos, a princípio como processa-los e visualiza-los. Por exemplo, queremos saber qual a população do Brasil, em 2020. Os comandos a seguir fazem esta seleção da forma tradicional do R (os comandos foram feitos passo a passo para esclarecer as relações de igualdade).
#LINHA com o nome Brazil gapminder[gapminder$name=='Brazil'# E (AND) time = 2020& gapminder$time==2020# COLUNA com o nome pop , names(gapminder)=='pop']
pop
212559409
Ou seja, 212.559.409 habitantes. Mas, essa sequencia de comandos é complexa e difícil de entender. Isso posto, vamos introduzir o pacote dplyr, que nos fornecem ferramentas mais intiuitivas para essas operações.
2.13 Manipulação de dados com o pacote dplyr
#install.packages("dplyr")library(dplyr) gapminder %>%filter(time==2020) %>%# Todos os países em 2020head() # Exibe apenas a seis primeira observações do dataset
2.14 Visualização de dados com pacotes dplyr e ggplot2
Anteriormente, nós vimos rapidamente como organizar um banco de dados, filtrando os casos para destacar variáveis de interesse. A proposta agora é aprender os conceitos iniciais para elaborarmos gráficos para visualizar esse mesmo banco de dados por meio do pacote ggplot2. No gráfico a seguir, por exemplo, são apresentadas quatro variáveis para o ano de 2018: renda per capita, no eixo dos x; esperança de vida ao nascer, no eixo dos y; a região que o país se localiza, identificada pelas cores; e, a população de cada país, identificada pelo tamanho de cada bolinha (bubbles). O gráfico demonstra claramente que há uma associação quase que direta entre a renda per capita e a esperança de vida, ou em outras palavras, é notório que quanto menor a renda per capita menor a esperança de vida. A partir da análise das cores também é possível sugerir que há uma associação geográfica entre a renda per capita, a esperança de vida e a região do globo onde o país se localiza. Mas, aparentemente não há qualquer relação entre a renda, a esperança de vida e a população total. Esse gráfico sozinho já é capaz de nos levar a uma pergunta: então Malthus estava errado?
library('ggplot2')library('scales')gapminder_leipp<-gapminder %>%filter(time ==2018) %>%select(eight_regions,pop,le,ipp) %>%na.omit()ggplot(data=gapminder_leipp,aes(x=ipp,y=le,size=pop,color=eight_regions))+geom_point()+scale_x_log10(labels=label_dollar())+labs(x="log(Renda Per Capita) em US$/pessoa",y="Esperança de vida ao nascer")+scale_size_continuous(name="População",labels=c("10 milhões","80 milhões","250 milhões","750 milhões"),breaks=c(10000000,80000000,250000000,750000000))+scale_color_discrete(levels(gapminder_leipp$eight_regions))
Para a construção deste gráfico os dois pacotes trabalham juntos: as funções do primeiro (dplyr) preparam os dados a serem exibidos pelo segundo (ggplot2).
O comando acima parece não retornar resultados. Mas, na verdade, salva o subconjunto do dataset gapminder, que foi filtrado pela sequencia gapminder %>% filter(time==1950), em um novo dataset chamado aqui de gapminder_1950. Observe que um novo dataset gapminder_1950 surge na aba Environment do RStudio. Se você chamar agora o dataset head(gapminder_1950) no console de comandos, você verá apenas dados 1950.
Após filtar os dados é possível fazer um gráfico que relacione a fecundidade nos países (`tfr`, ou número médio de filhos por mulher) e a esperança de vida ao nascer (`le`). Você pode fazer isso a partir de um diagrama de dispersão que use o eixo das abcissas ( _x_) para a `tfr` e o eixo das ordenadas ( _y_) o número médio de filhos.
O gráfico desenhado anteriormente revela uma relação interessante entre essas duas variáveis. Em 1950, famílias maiores (6 ou mais filhos por mulher nas ordenadas) apresentavam baixa esperança de vida (entre 30 e 50 anos). A medida que a esperança de vida cresce acima de 50 anos observamos uma queda progressiva do número médio de filhos. De certa forma, em 1950, nota-se que países com famílias grandes tinha mortalidade mais alta. Segundo (HANS ROSLING MOSTRA AS MELHORES ESTATÍSTICAS QUE VOCÊ JÁ VIU - LEGENDADO, 2015), professor sueco, quando ele perguntava ao seus alunos sobre assuntos globais frequentemente ele escutava a divisão do mundo entre ‘nós’ e ‘eles’ que significava nada mais do que uma divisão preconceituosa e preconcebida que se resumia ao mundo ocidental (nós) e o mundo em desenvolvimento (eles). Percebendo o preconceito, ele ia além: mas qual a definição disso? Existe uma definição clara para diferenciar esses dois mundos? Todo mundo sabe qual a diferenciação desses mundos, é óbvio. Mas, uma aluna dele deu uma descrição simples e intrigante: o mundo ocidental tem vida longa e família pequena e o mundo em desenvolvimento tem famílias grandes e vida curta. O gráfico apresenta mostra-nos um mundo assim: separado em um grupo com vida longa e família pequena e um outro separado em famílias pequenas e vida longa. Ou nas palavras de (caldwell1982?) dois regimes distintos: (i) Alta Fecundidade e Alta Mortalidade (países mundo Ocidental); e (ii) Baixa Fecundidade e Baixa Mortalidade (países em desenvolvimento)
Mas, fica o questionamento: tal relação ainda é verdadeira? Sabemos pelos nossos estudos que os países em desenvolvimento também entraram numa tendencia de queda da mortalidade e da fecundidade. Como será que esses gráfico se apresentaria para dados de 2020?
Os gráficos a seguir desenha a esperança de vida no eixo x e a taxa de fecundidade total no eixo y e vão, progressivamente, acrescentando outros elementos estéticos. Inicialmente vamos trabalhar cor e tamanho, mapeados esteticamente como regiões e população, respectivamente.
A região será mapeada por meio da variável eight_regions que é uma variável categórica que usará cores em sua caegorização cores. Países da Europa (púrpura e rosa) e América do Norte (verde) tinham, de fato, famílias pequenas e vidas longas e os países da África (vermelho e ocre), América do Sul (verde) e Ásia (azul), com alguma diferenças entre eles, tinham alta fecundidade e alta mortalidade.
População é uma contagem ou uma variável numérica. Uma boa forma de representa-las no gráficos é com pontos de vários tamanhos: quanto maiores os pontos, maior a população. Assim como para as regiões apenas um novo elemento estático é acrescentado ao nosso gráfico: size=pop
O gráfico agora tem com quatro dimensões mas, ainda queremos saber se o mundo ainda pode ser dividido em famílias grandes de vida curta e em famílias pequenas com vida longa. Uma solução para fazer isso é desenhar outro gráfico, agora para os dados de 2020, por exemplo. O gráfico agora nos apresenta um padrão bem distinto: apenas a África Subsaariana ainda está na condição de família grande e vida curta. Todo o resto do mundo é mais parecido: famílias com tamanho inferior a 2,5 filhos por mulher e esperança de vida entre 65 e 80 anos.
gapminder_2020 <- gapminder %>%filter(time==2020)ggplot(data=gapminder_2020, aes(x=le,y=tfr,color=eight_regions,size=pop))+geom_point()#> Warning: Removed 11 rows containing missing values or values outside the scale range#> (`geom_point()`).
O gpplot2 permite ainda separar seus gráficos sem sub-gráficos, como por exemplo, um gráfico para cada continente. Isto é chamado de faceting e é uma nova forma de adicionar informações e relacionamento entre variáveis do seu banco de dados. Do inglês Facet pode ser traduzido como face em português mas não se aplica à face de uma pessoa se aplica mais a objetos a exemplo de sólidos (as faces de cubo) ou pedras lapidadas (as faces de um diamante).
ggplot(data=gapminder_2020, aes(x=le,y=tfr,size=pop))+geom_point()+facet_wrap(~four_regions)#> Warning: Removed 11 rows containing missing values or values outside the scale range#> (`geom_point()`).
Você cria faces num gráfico adicionando uma nova opção ao comando do ggpplot depois de um sinal de +. A sequencia de comandos a seguir separa o gráfico desenhado até então em quatro gráficos, sendo um para cada grande continente. Para gerar este gráfico foi acrescentado após o sinal + a linha de código facet_wrap(~ four_regions). O símbolo ~ aqui pode ser traduzido como por ou baseadas em: “faça faces baseada na variável que definem os quatro continentes”.
Este comando permite criar várias faces criar gráficos complexos que revelam informações distribuídas no tempo e no espaço.
gapminder_anosselecionados <- gapminder %>%filter(time %in%c(1800,1900,1950,2020))ggplot(data=gapminder_anosselecionados, aes(x=le,y=tfr,color=eight_regions,size=pop))+geom_point()+facet_wrap(~ time)+labs(title ='Esperança de Vida x Taxa de Fecunidade Total',x ='Esperança de Vida',y ="Taxa de Fecunidade Total",color ='Regiões',size ='População')#> Warning: Removed 44 rows containing missing values or values outside the scale range#> (`geom_point()`).
3 O pacote geopor
O pacore geopopr é um pacote que ainda está em fase de desenvolvimento e seu propósito é ser usada nas aulas de Geografia de População aqui da UFF Campos. O pacote geopopr irá conter funções e dados especificamente organizadas e desenvolvidos para este curso e seu código fonte está disponível no meu respositório do Github(Givisiez, 2025). Por enquanto (versão 0.0.0.9000) o pacote apenas gera pirâmides etárias para o grupo de países selecionado pela turma de 2024.2 e para o Brasil.
GIVISIEZ, G. H. N. Ghnaves/geopopr. Campos dos Goytacazes: Universidade, 2025. Available at: https://github.com/ghnaves/geopopr. Accessed on: 13 Jan. 2025.
HANS ROSLING MOSTRA AS MELHORES ESTATÍSTICAS QUE VOCÊ JÁ VIU - LEGENDADO. [S. l.: s. n.], 30 Apr. 2015. Available at: https://www.youtube.com/watch?v=upA-Jsg4CWs. Accessed on: 14 Jan. 2025.
R CORE TEAM. R: A language and environment for statistical computing. Vienna, Austria: R Foundation for Statistical Computing, 2024. Available at: https://www.R-project.org/.