Gráficos

Row

Total de Municípios

78

População

3,885 milhões

km2

46.095

Column

10 municípios mais populosos

Row

Correlograma das variáveis

Dendograma

Mapas

Tamanho dos Módulos

Densidade Populacional

---
title: "Municípios Capixabas - Clusterização"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    source_code: embed
    navbar:
      - { title: "Voltar para o artigo", href: "http://zambon.ai/r/mun/backup_cluster_municipio.html", align: right }
---

```{r setup, include=FALSE}
library(flexdashboard)
library(see)
pacotes <- c("ggplot2","dplyr","plotly", "tidyverse", "ggrepel", "knitr", "kableExtra", "reshape2", 
             "misc3d", "plot3D", "cluster", "factoextra", "ade4", "geobr", "sf", "rio", "readr",
             "datawizard", "ggtext", "stringr", "forcats", "correlation", "see", "ggstatsplot") 

if(sum(as.numeric(!pacotes %in% installed.packages())) != 0){
  instalador <- pacotes[!pacotes %in% installed.packages()]
  for(i in 1:length(instalador)) {
    install.packages(instalador, dependencies = T)
    break()}
  sapply(pacotes, require, character = T) 
} else {
  sapply(pacotes, require, character = T) 
}

is_installed <- function(pkg_name){
  setNames(is.element(pkg_name, installed.packages()[, "Package"]), pkg_name)
}

installed <- is_installed(pacotes)

pacotes_carregados <- sessionInfo()
pack <- c()
version <- c()
title <- c()
for (i in 1:length(pacotes_carregados$otherPkgs)) {
  pack[i] <- pacotes_carregados[["otherPkgs"]][[i]][["Package"]]
  version[i] <- pacotes_carregados[["otherPkgs"]][[i]][["Version"]]
  title[i] <- pacotes_carregados[["otherPkgs"]][[i]][["Title"]]
}
cbind(pack, version, title, ifelse(installed == TRUE, 'Carregado', 'Não Carregado'))

# Definindo Diretório de Trabalho

setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) #Define o diretório de trabalho sendo onde o arquivo está gravado
getwd()

# Carregar Dados

dados <- read.csv('dados.csv', stringsAsFactors = TRUE, fileEncoding = "UTF-8", sep = ";")

# Renomeando as colunas

names(dados) <- c('municipio', 'salario_medio_mensal', 'populacao', 'pessoal_ocupado', 'pib_per_capita', 'codigo_ibge', 
                  'area_territorial', 'densidade', 'idhm', 'numero_est_agropecuarios')


# Transformar as colunas Factor em Numéricas

convert_number <- function(x){
  x <- as.character(x)
  x <- gsub(pattern = ",", replacement = ".",x = x, fixed = TRUE)
  x <- as.numeric(x)
  return(x)
}

dados$salario_medio_mensal <- convert_number(dados$salario_medio_mensal)
dados$area_territorial <- convert_number(dados$area_territorial)
dados$densidade <- convert_number(dados$densidade)
dados$idhm <- convert_number(dados$idhm)
dados$pib_per_capita <- convert_number(dados$pib_per_capita)


# Datawizard
options(scipen = 999)


# dados %>% 
#  mutate(pib_per_capita = pib_per_capita/1000)

# Transformar Código do IBGE em Fator

dados$codigo_ibge <- as.factor(dados$codigo_ibge)

# Reordenar Colunas

dados <- dados[, c(1, 6, 2, 3, 4, 5, 7, 8, 9, 10)]

# Padronização das Variáveis - função scale()
dados_padronizado <- as.data.frame(scale(dados[,3:10]))
rownames(dados_padronizado) <- dados$municipio
dados_padronizado$name_muni <- dados$municipio


top10 <- dados %>%
  mutate(municipio = fct_lump_n(factor(municipio), n = 10, w = populacao, other_level = "OUTROS")) %>%
  group_by(municipio) %>%
  summarize(populacao = sum(populacao))  %>% 
  arrange(municipio == "OUTROS", desc(populacao))

top10$populacao <- as.numeric(top10$populacao)

top10 %>% 
  str()

levels(top10$municipio)

top10 <- top10 %>% dplyr::mutate(
  municipio = forcats::fct_rev(forcats::fct_inorder(municipio)),
  municipio = forcats::fct_relevel(municipio, "OUTROS", after = 0)
)

top10 <- top10 %>% 
  # adiciona o símbolo de percentual com `scales::percent()`
  dplyr::mutate(perc = scales::percent(populacao / sum(populacao), accuracy = .1, trim = FALSE))


```

Gráficos
=====================================

Row
-----------------------------------------------------------------------

### Total de Municípios

```{r}
articles <- 78
valueBox(articles, icon = "fa-pencil")
```

### População

```{r}
comments <- '3,885 milhões'
valueBox(comments, icon = "fa-comments")
```

### km<sup>2</sup>

```{r}
spam <- '46.095'
valueBox(spam, 
         icon = "fa-map",
         color = ifelse(spam > 10, "warning", "primary"))
```


Column 
-------------------------------------
    
### 10 municípios mais populosos
    
```{r}
t10 <-
  ggplot(top10, aes(x = populacao, y = municipio)) +
  geom_col(fill = 'darkcyan') +
  ggtitle('10 municípios mais populosos') +
  theme(plot.title = element_text(hjust = 0.5)) +
  ylab('População') + xlab('Município') +
  geom_text(aes(label = perc), hjust = 1, nudge_x = -.5,
            size = 4, fontface = "bold", colour = "black") +
  theme_bw()

plotly::ggplotly(t10)
```
   
Row {data-height=650}
-------------------------------------
   
### Correlograma das variáveis

```{r}
ggcorrmat(
  data     = dados,
  colors   = c("#B2182B", "white", "#4D4D4D"),
  title    = "Correlograma das variáveis",
  subtitle = "km quadrados, renda, populacao"
)
```   
 
### Dendograma
    
```{r}
#---------- Esquema de aglomeração hierárquico ---------------------------------

# Matriz de dissimilaridades
matriz_D <- dados_padronizado %>% 
  select(1:8) %>% 
  dist(method = "euclidean")

# Elaboração da clusterização hierárquica
cluster_hier <- agnes(x = matriz_D, method = "single")

# As distâncias para as combinações em cada estágio
coeficientes <- sort(cluster_hier$height, decreasing = FALSE) 

# Tabela com o esquema de aglomeração. Interpretação do output:

## As linhas são os estágios de aglomeração
## Nas colunas Cluster1 e Cluster2, observa-se como ocorreu a junção
## Quando for número negativo, indica observação isolada
## Quando for número positivo, indica cluster formado anteriormente (estágio)
## Coeficientes: as distâncias para as combinações em cada estágio

esquema <- as.data.frame(cbind(cluster_hier$merge, coeficientes))
names(esquema) <- c("Cluster1", "Cluster2", "Coeficientes")

# Construção do dendrograma
#dev.off()
#fviz_dend(x = cluster_hier)

# Dendrograma com visualização dos clusters (definição de 3 clusters)
fviz_dend(x = cluster_hier,
          k = 3, # Onde vamos passar a linha Horizontal
          k_colors = c("deeppink4", "darkviolet", "deeppink"),
          color_labels_by_k = F,
          rect = T,
          rect_fill = T,
          lwd = 1,
          show_labels = FALSE,
          ggtheme = theme_bw())
```

Mapas
=====================================     

```{r include=FALSE}
# Elaboração da clusterização não hieráquica k-means
#cluster_kmeans <- kmeans(dados_padronizado[,1:8], centers = 3)

## centers: parametrização da quantidade de clusters

# Método de Elbow para identificação do número ótimo de clusters
## Apresenta a variação total dentro dos clusters para várias nº de clusters
## Em geral, quando há a dobra é um indício do número ótimo de clusters
#fviz_nbclust(dados_padronizado[,1:8], kmeans, method = "wss", k.max = 15)

# Criando variável categórica para indicação do cluster no banco de dados
#dados_padronizado$cluster_K <- factor(cluster_kmeans$cluster)

# carregando shape files de todos municipios do Espírito Santo

#mun.es.07 <- read_municipality(code_muni='ES', year=2007)
# Extraíndo as Coordenadas do Centro

#xmun.es.07 <- cbind(mun.es.07, st_coordinates(st_centroid(mun.es.07)))

#xmun.es.07$grupo <- factor(cluster_kmeans$cluster)

#xmun.es.07 <- mutate(xmun.es.07, grupo.nom = ifelse(grupo == 1, 'Tamanho P', ifelse(grupo == 2, 'Tamanho M', 'Tamanho G')))

#table(xmun.es.07$grupo)
```

### Tamanho dos Módulos
    
```{r echo=FALSE, message=FALSE, warning=FALSE, out.width = "800px"}
load("xmun.es.07.Rda")

g1 <- ggplot() + geom_sf(data=xmun.es.07, aes(fill= grupo.nom)) +
  geom_text(data = xmun.es.07, aes(X, Y, label = stringr::str_wrap(name_muni, 10)), size = 2.5, fontface = "bold", 
            nudge_y = xmun.es.07$nudge_y) +
  scale_fill_discrete(name = "Segmentação")

g1 <- g1 + labs(subtitle="Instalção de Módulos de Atendimento", 
     y="Longitude", 
     x="Latitude", 
     title="Faça Mais Fácil", 
     caption = "P: 60, M: 14, G: 4")
plotly::ggplotly(g1) %>%
  layout(xaxis = list(autorange = TRUE),
         yaxis = list(autorange = TRUE))
```
    
### Densidade Populacional

```{r, out.width = "100%"}
xmun.es.07$densidade <- dados$densidade

g2 <- ggplot() + geom_sf(data=xmun.es.07, aes(fill= densidade)) +
  geom_text(data = xmun.es.07, aes(X, Y, label = stringr::str_wrap(name_muni, 10)), size = 2.5, fontface = "bold", colour = "white",
            nudge_y = xmun.es.07$nudge_y) +
  scale_fill_continuous(name = "Densidade")
plotly::ggplotly(g2) %>%
  layout(xaxis = list(autorange = TRUE),
         yaxis = list(autorange = TRUE))
```