EDA no IBGE

Olá! Vamos realizar uma imersão em uma das amostragens mais famosas do IBGE, na verdade duas, as estatísticas de nascidos vivos e de casamentos de mulheres de diversas faixas etárias. São dois datasets riquíssimos, que podem ser combinados. Já que temos os atributos Ano, Estado e até Faixa Etária da mãe, no caso de nascidos vivos, e Faixa Etária da Mulher, no ano em que casou.

Nessa Análise não vou entrar na parte de limpeza, tratamento e junção dos dados, já vamos trabalhar com ele clean e pronto para análise! Em outro repositório focaremos nessa parte de tratamento e limpeza, mas por enquanto, vamos pro jogo!

Vamos dar uma olhada no dataset:

library(readxl)

casamentos_nascimentosbr<-read_xlsx("C:\\Users\\lferreira\\Downloads\\live university\\Projetos\\casamentos_nascimentosbr.xlsx")
#Passando estado e classe para fator e ano para integer
casamentos_nascimentosbr$estado<-as.factor(casamentos_nascimentosbr$estado)
casamentos_nascimentosbr$classe<-as.factor(casamentos_nascimentosbr$classe)
casamentos_nascimentosbr$ano<-as.integer(casamentos_nascimentosbr$ano)

summary(casamentos_nascimentosbr)
##       estado          ano                   classe       nasc_masc      
##  Acre    : 168   Min.   :2003   50 anos ou mais:1512   Min.   :    0.0  
##  Alagoas : 168   1st Qu.:2006   15 a 19 anos   : 378   1st Qu.:   34.0  
##  Amapa   : 168   Median :2010   20 a 24 anos   : 378   Median :  496.5  
##  Amazonas: 168   Mean   :2010   25 a 29 anos   : 378   Mean   : 4809.2  
##  Bahia   : 168   3rd Qu.:2013   30 a 34 anos   : 378   3rd Qu.: 5316.0  
##  Ceara   : 168   Max.   :2016   35 a 39 anos   : 378   Max.   :92918.0  
##  (Other) :3528                  (Other)        :1134                    
##     nasc_fem     qtd_casamentos 
##  Min.   :    0   Min.   :    0  
##  1st Qu.:   35   1st Qu.:  140  
##  Median :  475   Median :  683  
##  Mean   : 4572   Mean   : 2976  
##  3rd Qu.: 5054   3rd Qu.: 2924  
##  Max.   :87869   Max.   :76407  
## 

Como na parte de junção dos datasets foi usado um inner_join() e nenhum deles tinha valores ausentes. Temos uma base livre de NA’s! Todos os 27 estados e nove classes de faixa etária, analisados entre os anos de 2003 a 2016.

levels(casamentos_nascimentosbr$estado) #Todos os Estados
##  [1] "Acre"                "Alagoas"             "Amapa"              
##  [4] "Amazonas"            "Bahia"               "Ceara"              
##  [7] "Distrito Federal"    "Espirito Santo"      "Goias"              
## [10] "Maranhao"            "Mato Grosso"         "Mato Grosso do Sul" 
## [13] "Minas Gerais"        "Para"                "Paraiba"            
## [16] "Parana"              "Pernambuco"          "Piaui"              
## [19] "Rio de Janeiro"      "Rio Grande do Norte" "Rio Grande do Sul"  
## [22] "Rondonia"            "Roraima"             "Santa Catarina"     
## [25] "Sao Paulo"           "Sergipe"             "Tocantins"
levels(casamentos_nascimentosbr$classe) #Todas as 9 classes
## [1] "15 a 19 anos"     "20 a 24 anos"     "25 a 29 anos"    
## [4] "30 a 34 anos"     "35 a 39 anos"     "40 a 44 anos"    
## [7] "45 a 49 anos"     "50 anos ou mais"  "Menos de 15 anos"

Análise

Vamos primeiro olhar a variável nascimentos (nasc_masc e nasc_fem)

library(tidyverse)
casamentos_nascimentosbr%>%
  gather(sexo,qtd_nascimentos,4:5)%>%
  ggplot(aes(x=sexo,y=qtd_nascimentos))+
  geom_col(fill = "red")+
  scale_y_continuous(label=scales::comma)+
  theme_classic()+
  labs(x="Sexo",y="Quantidade de Nascimentos",title = "Quantidade de nascimentos",
       subtitle = "Nascimentos por sexo",
       caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)")

Será que o padrão se mantem por faixa etária de idade da mãe?

casamentos_nascimentosbr%>%
  gather(sexo,qtd_nascimentos,4:5)%>%
  ggplot(aes(x=factor(classe,levels = c("Menos de 15 anos","15 a 19 anos","20 a 24 anos",
  "25 a 29 anos","30 a 34 anos","35 a 39 anos","40 a 44 anos","45 a 49 anos","50 anos ou mais")),
  y=qtd_nascimentos,fill = sexo))+
  geom_col()+
  scale_y_continuous(label=scales::comma)+
  theme_classic()+
  labs(x="Classe de idade da mãe",y="Quantidade de Nascimentos",title = "Quantidade de nascimentos",
       subtitle = "Nascimentos por faixa etária da mãe e sexo",
       caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)")

Em geral os padrões são bem parecidos, há mais nascimentos do sexo masculino do que feminino, mas a diferença não é tão grande assim. Curioso como, quanto mais velha a mãe, menor é a quantidade de nascimentos… Pensando bem, não é nada curioso não acham? rs. (Dumbledore Speech)

Será que o padrão continua por estado?

casamentos_nascimentosbr%>%
  gather(sexo,qtd_nascimentos,4:5)%>%
  ggplot(aes(x=sexo,y=qtd_nascimentos,fill = classe))+
  geom_col()+
  scale_y_continuous(label=scales::comma)+
  labs(x="Sexo",y="Quantidade de Nascimentos",title = "Quantidade de nascimentos",
       subtitle = "Nascimentos por Classe e Estado",
       caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)")+
  theme_minimal()+
  facet_wrap(~estado)

De Fato o Padrão se mantém, nascimentos entre homens e mulheres são bem próximos e em geral a quantidade de nascimentos de homens é um pouco maior do que o das mulheres.

Mas será que esse padrão vem se mantêndo ao longo dos anos?

casamentos_nascimentosbr%>%
  gather(sexo,qtd_nascimentos,4:5)%>%
  group_by(ano,sexo)%>%
  summarise(nascimentos = sum(qtd_nascimentos))%>%
  ggplot(aes(x=ano,y=nascimentos,col = sexo))+
  geom_line(size = 2)+
  scale_y_continuous(label=scales::comma)+
  labs(x="Ano",y="Quantidade de Nascimentos",title = "Série Temporal - Quantidade de nascimentos",
       subtitle = "Nascimentos por sexo",
       caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)")+
  theme_classic()

Parece que a proporção de homens e mulheres continua a mesma, porém, sua magnitude vem caindo ao longo dos anos. Natural para um país em desenvolvimento pleno.

Vamos dar uma olhada como estão os casamentos por faixa etária de mulheres e estado

casamentos_nascimentosbr%>%
  ggplot(aes(x=factor(classe,levels = c("Menos de 15 anos","15 a 19 anos","20 a 24 anos",
  "25 a 29 anos","30 a 34 anos","35 a 39 anos","40 a 44 anos","45 a 49 anos","50 anos ou mais")),
  y=qtd_casamentos,fill = classe))+
  geom_col()+
  scale_y_continuous(label=scales::comma)+
  labs(x="Faixa Etária",y="Quantidade de Casamentos",title = "Casamentos por Faixa Etária (Classe)",
  subtitle = "Casamentos por faixa etária e estado",
  caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)")+
  theme_classic()+
 theme(axis.text.x = element_blank(),
       axis.ticks.x=element_blank())+
  facet_wrap(~estado)

De Fato, São Paulo, Minas Gerais e Rio de Janeiro são os que possuem maior número de casamentos, mas em geral a maior quantidade de casamentos está na Faixa de 20 a 29 anos.

Como será que está a evolução disso ao longo dos anos?

casamentos_nascimentosbr%>%
  group_by(ano,classe)%>%
  summarise(num_casamentos = sum(qtd_casamentos))%>%
  ggplot(aes(x=ano,y=num_casamentos,col=classe))+
  geom_line(size = 2)+
  scale_y_continuous(label=scales::comma)+
  labs(x="Ano",y="Quantidade de Casamentos",title = "Série Temporal - Casamentos por Faixa Etária (Classe)",
       subtitle = "Casamentos por faixa etária e ano",
       caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)")+
  theme_classic()

Sou só eu, ou você também percebe uma tendência de aumento de casamentos para mulheres acima de 25 anos e um leve declínio para idades abaixo de 25?

Mas uma das análises mais interessantes é a entre numero de nascimentos e casamentos. Será que eles estão correlacionados?

Correlação entre Casamentos e Nascimentos

library(ggpubr)
casamentos_nascimentosbr%>%
  gather(sexo,qtd_nascimentos,4:5)%>%
  mutate(ano = as.factor(ano))%>%
  ggplot(aes(x=qtd_casamentos,y=qtd_nascimentos,col=ano))+
  geom_point(position = "jitter")+
  scale_y_continuous(label=scales::comma)+
  scale_x_continuous(label=scales::comma)+
  geom_smooth(aes(x=qtd_casamentos,y=qtd_nascimentos),method = "lm",inherit.aes = FALSE)+
  stat_cor(method = "pearson", label.x = 40000, label.y = 100000,color = "black")+
  labs(x="Quantidade de Casamentos",y="Quantidade de Nascimentos",title = "Correlação entre Nascimentos e Casamentos",
       caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)")+
  theme_light()

Excelente correlação de Pearson (0,94)! Mas será que o aumento no número de casamentos é causa do aumento do número de nascimentos? Em minha opinião não acredito que seja a única causa, mas acho que a variável numero de casamentos tem grande impacto no número de nascimentos, principalmente devido a nossa cultura.

Será que esse padrão se mantém por faixa etária e estado? Vamos colocar um pouco de estilo nessas duas últimas análises!

library(gganimate)
theme_set(theme_bw())

  casamentos_nascimentosbr%>%
    gather(sexo,qtd_nascimentos,4:5)%>%
    ggplot(aes(x=qtd_casamentos,y=qtd_nascimentos))+
    geom_point(color="purple")+
    geom_smooth(method = "lm",col = "white")+
    facet_wrap(~classe)+
    scale_y_continuous(label=scales::comma)+
    scale_x_continuous(label=scales::comma,limits = c(0,85000))+
    labs(x="Quantidade de Casamentos",y="Quantidade de Nascimentos",title = "Correlação entre Nascimentos e Casamentos ",
         subtitle = "Correlação por faixa etária",
         caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)",fill = "white")+
    transition_time(ano)+
    labs(title = "Ano: {frame_time}")+
    theme_dark()+
    theme(
      panel.background = element_rect(fill = "black"),
      plot.background = element_rect(fill = "black"),
      axis.title = element_text(colour = "yellow"),
      title = element_text(colour = "yellow"),
      axis.text =element_text(colour = "yellow"),
      strip.text = element_text(colour = "yellow")
    )

Parece que mantemos o padrão de correlação positiva alta, mesmo em faixas etárias diferentes, exceto para casamentos em que a mulher tenha 40 anos ou mais. Mas a resposta para isso é meio lógica não? Mulheres nessa idade não estão mais em período fértil e normalmente não pensam em ter mais filhos.

animacao<-casamentos_nascimentosbr%>%
    gather(sexo,qtd_nascimentos,4:5)%>%
    ggplot(aes(x=qtd_casamentos,y=qtd_nascimentos))+
    geom_point(color="purple")+
    geom_smooth(method = "lm",col = "white")+
  scale_y_continuous(label=scales::comma)+
  scale_x_continuous(label=scales::comma,limits = c(0,85000))+
    labs(x="Quantidade de Casamentos",y="Quantidade de Nascimentos",title = "Correlação entre Nascimentos e Casamentos ",
         subtitle = "Correlação por faixa etária",
         caption = "Fonte: IBGE - Estatísticas do Registro Civil (2003-2016)",fill = "white")+
      transition_states(
    estado,
    transition_length = 1,
    state_length = 1
  ) +
  enter_fade() + 
  exit_shrink() +
  ease_aes('cubic-in-out')+
  labs(title = "Estado: {closest_state}")+
    theme_dark()+
    theme(
    
      panel.background = element_rect(fill = "black"),
      plot.background = element_rect(fill = "black"),
      axis.title = element_text(colour = "yellow"),
      title = element_text(colour = "yellow"),
      axis.text =element_text(colour = "yellow"),
      strip.text = element_text(colour = "yellow")
    )
animate(animacao,duration = 54)

Por estado de maneira geral sim, mas, difícil de visualizar em estados como Acre, Amapá, Tocantins e Sergipe, que temos poucos pontos de dados, amostra pequena. Mas a correlação de uma forma geral continua alta.

Podemos ir além?

Bem, é isso! Essa é uma ótima base de dados para gerar insights e fazer algumas análises.

Podemos tentar criar um modelo de ML usando regressão linear para determinar o número de nascimentos para o ano de 2018 e 2019, para cada estado dependendo do número de casamentos!

Será que vai dar certo??? Até lá!!