Identificação do
discente:
Aluno: Luiz Felipe Alves
Ferreira
CPF: 065.xxx.xxx-80
Email: krypyto@gmail.com
Unidade: 47º BPM / 4ª
RPM
Apresentação do
conteúdo:
O presente
trabalho destina-se a obtenção parcial de nota na disciplina de
Visualização de Dados.
A seguir serão apresentados os
gráficos relativos aos exercícios 01 e 02.
Você poderá
navegar através do sumário que está na lateral da página ou através das
abas que se encontram no topo da tela, na barra de navegação.
Foi adicionado o botão Souce Code na parte
superior direita para a visualização do Código-fonte
Resposta:
A função geom_point() plota os pontos exatamente nas coordenadas (x,y) especificadas, conforme estão descritas nas tabelas ou bancos de dados, sem fazer nenhuma alteração nos valores. É apropirado quando se deseja visualizar a relação entre duas variáveis contínuas, como em gráficos de dispersão, auando não há muitos pontos sobrepostos, ou quando a precisão da posição é crucial para a representação gráfica.
A função geom_jitter() adiciona um ruído aleatório pequeno aos pontos, espalhando-os para revelar a densidade e evitar a sobreposição. É apropriado para dados com valores discretos ou que apresentam pequenas variações, como em gráficos de dispersão com dados categóricos. Também pode ser utilizado quando se trabalha com grandes conjuntos de dados ou com dados de baixa precisão, como por exemplo quando se arredonda a variável idade para inteiro.
Resposta:
Gramática dos Gráfocps pode ser entidida com uma combinações de camadas de componentes (sete no total), permitindo criar visualizações complexas de forma modular e declarativa. O ggplot2 implementa essa ideia na linguagem R, construindo gráficos camada por camada usando o operador + ao final de cada camada para que esta se sobreponha a camada anterior. O sistema conceitual decompõe um gráfico em partes 07 fundamentais: - Dados (data = ) ; - Mapeamento Estético (aes()) ; - Geometrias (geom_()) ; - Faceta (facet_()) ; - Estatísticas (stat_()) ; - Escalas ; - Temas (theme_minimal())
system(“ping 192.168.1.190”)
path <- “~/Pos_Graduacao/Visualizacao_Dados/Prova_Final.Rmd”
rmarkdown::run(path, shiny_args = list(host = “192.168.1.190”, port=3434))
---
title: "Prova Final"
output:
flexdashboard::flex_dashboard:
theme: united
orientation: rows
vertical_layout: fill
source_code: embed
---
```{r setup, include=FALSE}
setwd("~/Pos_Graduacao/Visualizacao_Dados/")
library(flexdashboard)
library(tidyverse)
library(plotly)
library(DT)
library(geobr)
library(viridis)
homicidios_df <- read_csv2("~/Pos_Graduacao/Visualizacao_Dados/Banco Vtimas de Homicdio Consumado Outubro 2025.csv")
lesao_df <- read_csv2("~/Pos_Graduacao/Visualizacao_Dados/Banco Lesao Corporal - Atualizado Outubro 2025.csv")
```
# Side Bar{.sidebar data-width=200}
<font size="5" color="darkred">**Bem vindo ao Dashboard!**</font>
<font size="3">Navegue pelas seções:</font>
<font size="3">Página Inicial:</font>
- [Home](#home)
<font size="3">Exercício 01:</font>
- [Exercício 1.1](#exercicio-1_1)
- [Exercício 1.2](#exercicio-1_2)
- [Exercício 1.3](#exercicio-1_3)
- [Exercício 1.4](#exercicio-1_4)
<font size="3">Exercício 02:</font>
- [Homicídios em MG](#homicidios-em-mg)
- [Cidades com mais homicicios em 2025](#cidades-com-mais-homicicios-em-2025)
- [Lesao Corporal em MG](#lesao-corporal-em-mg)
- [Lesao Corporal 17 RPM](#lesao-corporal-17-rpm)
- [Servidor local](#servidor-local)
# Home
## row 01 {data-height=300 }
### {data-width=700}
<font size="6" color="darkred">**Identificação do discente:**</font><br />
<font size="4">
Aluno: Luiz Felipe Alves Ferreira<br />
CPF: 065.xxx.xxx-80<br />
Email: krypyto@gmail.com<br />
Unidade: 47º BPM / 4ª RPM<br />
</font>
### {data-width=300}
```{r picture, echo = F, out.width = '100%'}
knitr::include_graphics("https://intranet.policiamilitar.mg.gov.br/conteudoportal/uploadFCK/47bpm/08102020143106747.png")
```
## row 02 {data-height=700 }
### {data-width=1000}
<font size="6" color="darkred">**Apresentação do conteúdo:**</font>
<br />
<br />
<font size="4">
O presente trabalho destina-se a obtenção parcial de nota na disciplina de
Visualização de Dados.
<br />
<br />
A seguir serão apresentados os gráficos relativos aos exercícios 01 e 02.
<br />
<br />
Você poderá navegar através do sumário que está na lateral da página ou através
das abas que se encontram no topo da tela, na barra de navegação.
<br />
<br />
Foi adicionado o botão **Souce Code** na parte superior direita para a visualização do Código-fonte
</font>
# Exercicio 1_1 {data-navmenu="Exercício - 01"}
## row 01 {data-height=1000 }
### <font size="4" color="darkred">**Gráfico de Dispersão mtcars:**</font>
```{r}
df_mtcars <- mtcars
df_mtcars <- df_mtcars %>% mutate(cilindros = as.factor(df_mtcars$cyl))
g1 <- ggplot(data = df_mtcars) +
geom_point(aes(x = wt, y = mpg, color = cilindros)) +
labs(title = "Relação entre Peso e Consumo de Combustível",
x = "Consumo - (Miles/(US) gallon)",
y = "Peso - (1000 libras)",
color = "Cilindros") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
plot(g1)
```
# Exercicio 1_2 {data-navmenu="Exercício - 01"}
## row 01 {data-height=1000 }
### <font size="4" color="darkred">**Gráfico de Barras diamonds:**</font>
```{r}
df_diamonds <- diamonds
g2 <- ggplot(data = df_diamonds, aes( x = fct_infreq(cut), fill = cut)) +
geom_bar() +
scale_fill_brewer(palette = "Spectral", type = "div") +
geom_text(aes(label = after_stat(count)), stat = "count", vjust=-0.5, size=3) +
labs(title = "Relação entre Tipo de corte e Quantidade",
x = "Tipo de corte",
y = "Quantidade de amostras",
fill = "Tipo de corte") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
plot(g2)
```
# Exercicio 1_3 {data-navmenu="Exercício - 01"}
## row 01 {data-height=1000 }
### <font size="4" color="darkred">**Gráfico Bloxplot diamonds:**</font>
```{r}
df_diamonds <- diamonds
g3 <- ggplot(data = df_diamonds) +
geom_boxplot(aes(x = cut, y = price, fill = cut), staplewidth = 0.5) +
scale_fill_brewer(palette = "Accent") +
labs(title = "Relação entre Tipo de corte e Preço",
x = "Tipo de corte",
y = "Preço em dólares (US$)",
fill = "Tipo de corte") +
scale_x_discrete(labels = c("Fair" = "Razoável" ,
"Good" = "Bom",
"Very Good" = "Muito Bom",
"Premium" = "Premium",
"Ideal" = "Excelente")) + # Rótulos específicos
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5),
legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1))
plot(g3)
```
# Exercicio 1_4 {data-navmenu="Exercício - 01"}
## row 01 {data-height=500 }
### <font size="3" color="darkred">**Questão 01:** Explique a diferença entre os geoms geom point() e geom jitter(). Em que situação cada um é mais apropriado?</font>
<font size="3">**Resposta:**
A função **geom_point()** plota os pontos exatamente nas coordenadas (x,y) especificadas, conforme estão descritas nas tabelas ou bancos de dados, sem fazer nenhuma alteração nos valores. É apropirado quando se deseja visualizar a relação entre duas variáveis contínuas, como em gráficos de dispersão, auando não há muitos pontos sobrepostos, ou quando a precisão da posição é crucial para a representação gráfica.
A função **geom_jitter()** adiciona um ruído aleatório pequeno aos pontos, espalhando-os para revelar a densidade e evitar a sobreposição. É apropriado para dados com valores discretos ou que apresentam pequenas variações, como em gráficos de dispersão com dados categóricos. Também pode ser utilizado quando se trabalha com grandes conjuntos de dados ou com dados de baixa precisão, como por exemplo quando se arredonda a variável idade para inteiro.
</font>
## row 02 {data-height=500 }
### <font size="3" color="darkred">**Questão 02:** Descreva o conceito de ”Gramática dos Gráficos”e como ele é implementado no ggplot2.</font>
<font size="3">**Resposta:**
Gramática dos Gráfocps pode ser entidida com uma combinações de camadas de componentes (sete no total), permitindo criar visualizações complexas de forma modular e declarativa. O ggplot2 implementa essa ideia na linguagem R, construindo gráficos camada por camada usando o operador **+** ao final de cada camada para que esta se sobreponha a camada anterior. O sistema conceitual decompõe um gráfico em partes 07 fundamentais:
- Dados (data = ) ; - Mapeamento Estético (aes()) ; - Geometrias (geom_()) ; - Faceta (facet_()) ; - Estatísticas (stat_()) ; - Escalas ; - Temas (theme_minimal())
</font>
# Homicidios em MG {data-navmenu="Exercício - 02"}
## row 01 {data-height=1000 }
### <font size="4" color="darkred">**Histórico de homicídios MG**</font>
```{r}
homicidios_ano <- homicidios_df %>%
filter(Registros != 0 & Ano %in% c(2018:2024)) %>% # Exclui os registros vazios e filtra por Ano
group_by(Ano) %>% # Agrupa os dados por ano
summarise(total_homicidios = sum(Registros, na.rm = TRUE)) %>% # Soma os valores dentro de cada grupo
ungroup() # Remove o agrupamento após a soma
# Criar o gráfico de barras
g5 <- plot_ly(
data = homicidios_ano,
x = ~Ano,
y = ~total_homicidios,
type = 'bar',
name = ~Ano, # Define o nome das Legendas
text = ~total_homicidios, # Usa os valores como texto
textposition = 'outside' # Posiciona o texto automaticamente nas barras
) %>%
layout( # Personaliza o layout (títulos, modo de barras, legenda)
title = "Total de Homicídios por ano em MG", # Título do gráfico
xaxis = list(title = "Ano de Referência"), # Rótulo do eixo X
yaxis = list(title = "Total de Homicídios", range = c(0, 3200)), # Rótulo do eixo Y
legend = list(title = list(text = "Ano"), x = 1, y = 0.5) # Coloca o título e Posiciona a legenda
)
ggplotly(g5)
```
## row 02 {data-height=1000 }
### <font size="4" color="darkred">**Regiões com mais homicídios em 2025**</font>
```{r}
homicidios_rpm_2025 <- homicidios_df %>%
filter(Registros != 0 & Ano %in% c(2025)) %>%
group_by(RISP) %>% # Agrupa os dados por ano
summarise(total_homicidios = sum(Registros, na.rm = TRUE)) %>% # Soma os valores dentro de cada grupo
mutate( RPM = sub("^\\S+\\s\\S+\\s\\S+\\s", "", RISP)) %>% # Cria a coluna RPM apena com o nome da cidade
arrange(desc(total_homicidios)) %>% # Ordena os itens dentro de cada grupo, do maior para o menor
slice_head(n = 7) %>% # Pega os 7 primeiros itens da lista
ungroup() # Remove o agrupamento após a soma
# Criar o gráfico de barras
g6 <- plot_ly(
data = homicidios_rpm_2025,
x = ~RPM,
y = ~total_homicidios,
type = 'bar',
name = ~RISP, # Define o nome das Legendas
text = ~total_homicidios, # Usa os valores como texto
textposition = 'outside' # Posiciona o texto automaticamente nas barras
) %>%
layout( # Personaliza o layout (títulos, modo de barras, legenda)
title = "Regiões com maior número de Homicídios em MG - 2025", # Título do gráfico
xaxis = list(title = "Regiões", categoryorder = "total descending"), # Rótulo do eixo X
yaxis = list(title = "Total de Homicídios", range = c(0, 350)), # Rótulo do eixo Y
legend = list(title = list(text = "Região"), x = 1, y = 0.5) # Coloca o título e Posiciona a legenda
)
ggplotly(g6)
```
# Cidades com mais homicicios em 2025 {data-navmenu="Exercício - 02"}
## row 01 {data-height=1000 }
### <font size="4" color="darkred">**Tabela de homicídios por cidades**</font>
```{r}
temp_df <- homicidios_df %>%
filter(Ano == 2022) %>%
group_by(Município) %>%
summarise(`Ano 2022` = sum(Registros, na.rm = TRUE)) %>%
arrange(Município) %>%
ungroup()
homicidios_cidades <- temp_df
temp_df <- homicidios_df %>%
filter(Ano == 2023) %>%
group_by(Município) %>%
summarise(`Ano 2023` = sum(Registros, na.rm = TRUE)) %>%
arrange(Município) %>%
ungroup()
homicidios_cidades <- homicidios_cidades %>%
mutate(`Ano 2023` = temp_df$`Ano 2023`)
temp_df <- homicidios_df %>%
filter(Ano == 2024) %>%
group_by(Município) %>%
summarise(`Ano 2024` = sum(Registros, na.rm = TRUE)) %>%
arrange(Município) %>%
ungroup()
homicidios_cidades <- homicidios_cidades %>%
mutate(`Ano 2024` = temp_df$`Ano 2024`)
temp_df <- homicidios_df %>%
filter(Ano == 2025) %>%
group_by(Município) %>%
summarise(`Ano 2025` = sum(Registros, na.rm = TRUE)) %>%
arrange(Município) %>%
ungroup()
homicidios_cidades <- homicidios_cidades %>%
mutate(`Ano 2025` = temp_df$`Ano 2025`) %>%
arrange(desc(`Ano 2025`))
datatable(homicidios_cidades)
```
# Lesao Corporal em MG {data-navmenu="Exercício - 02"}
## row 01 {data-height=1000 }
### <font size="4" color="darkred">**Evolução dos registros de lesão corporal em MG**</font>
```{r}
lesoes_ano <- lesao_df %>%
filter(Registros != 0 & `Ano Fato` %in% c(2015:2024)) %>%
group_by(`Ano Fato`) %>%
summarise( total_lesoes = sum(Registros, na.rm = TRUE)) %>%
ungroup()
# Criar o gráfico de barras
g8 <- plot_ly(
data = lesoes_ano,
x = ~`Ano Fato`,
y = ~total_lesoes,
type = 'scatter',
mode = 'lines'
) %>%
layout( # Personaliza o layout (títulos, modo de barras, legenda)
title = "Total de Lesões Corporais por ano em MG", # Título do gráfico
xaxis = list(title = "Ano de Referência"), # Rótulo do eixo X
yaxis = list(title = "Total de Leões"), # Rótulo do eixo Y
legend = list(title = list(text = "Ano"), x = 1, y = 0.5) # Coloca o título e Posiciona a legenda
)
ggplotly(g8)
```
# Lesao Corporal 17 RPM {data-navmenu="Exercício - 02"}
## row 01 {data-height=1000 }
### <font size="4" color="darkred">**Mapa dos registros de Lesão na 17 RPM em 2025**</font> {data-width=650}
```{r}
cidades_mg <- read_municipality(code_muni = "MG", year = 2020) %>%
mutate(CIDADES = chartr(
"áéíóúÁÉÍÓÚãõÃÕâêîôûÂÊÎÔÛçÇ",
"aeiouAEIOUaoAOAEIOUAEIOUCc",
name_muni
)) %>%
mutate(CIDADES = toupper(CIDADES)) %>%
mutate(CIDADES = ifelse(CIDADES == "BRAZOPOLIS", "BRASOPOLIS", CIDADES))
cidades_17rpm <- lesao_df %>%
filter(`Ano Fato` == 2025 & RISP == "RISP 17 - POUSO ALEGRE") %>%
group_by(Município) %>%
summarise(soma_lesoes = sum(Registros))
cidades_filtradas <- cidades_mg %>%
filter(CIDADES %in% cidades_17rpm$Município)
g9 <- ggplot() +
geom_sf(data = cidades_mg, fill = "white", color = "gray80", size = 0.2) +
geom_sf(data = cidades_filtradas, aes(fill = cidades_17rpm$soma_lesoes), color = "black", size = 0.3) +
scale_fill_viridis_c() +
labs(
title = "Cidades da 17ª RPM",
subtitle = "Registros de Lesão Corporal em 2025",
caption = "Fonte: SEJUSP / IBGE {geobr}",
fill = "Quantidade \nde \nlesões"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5)
) +
coord_sf(
xlim = c(-47, -44), # Exemplo de limites de longitude para SC
ylim = c(-23.5, -21) # Exemplo de limites de latitude para SC
)
plot(g9)
```
### <font size="4" color="darkred">**Tabela de Lesão na 17 RPM em 2025**</font> {data-width=350}
```{r}
cidades_17rpm <- cidades_17rpm %>%
arrange(desc(soma_lesoes))
datatable(cidades_17rpm)
```
# Servidor local {data-navmenu="Exercício - 02"}
## row 01 {data-height=1000 }
### <font size="4" color="darkred">**Caminho para o servidor local**</font>
system("ping 192.168.1.190")
path <- "~/Pos_Graduacao/Visualizacao_Dados/Prova_Final.Rmd"
rmarkdown::run(path, shiny_args = list(host = "192.168.1.190", port=3434))
```{r echo = TRUE}
#system("ping 192.168.1.190")
#path <- "~/Pos_Graduacao/Visualizacao_Dados/Prova_Final.Rmd"
#rmarkdown::run(path, shiny_args = list(host = "192.168.1.190", port=3434))
```