DATA.RIO - COVID-19 no Município do Rio de Janeiro - Casos e Óbitos por Faixa Etária e Sexo

COVID-19: Casos por Faixa Etária e Sexo no Município do Rio de Janeiro
COVID-19: Casos por Faixa Etária e Sexo no Município do Rio de Janeiro

O gráfico acima mostra a incidência dos casos de COVID-19 por faixa etária e sexo no Município do Rio de Janeiro. Pode ser observado que as mulheres apresentam mais casos que os homens em praticamente todas as faixas etárias, e que os maiores números de casos, tanto para homens quanto para mulheres, estão nas faixas que vão dos 30 aos 59 anos.

COVID-19: Óbitos por Faixa Etária e Sexo no Município do Rio de Janeiro
COVID-19: Óbitos por Faixa Etária e Sexo no Município do Rio de Janeiro

O gráfico acima mostra a incidência dos óbitos por COVID-19 por faixa etária e sexo no Município do Rio de Janeiro. Pode ser observado que os maiores números de óbitos, tanto para homens quanto para mulheres, estão nas faixas que vão dos 60 aos 89 anos.

Dados

Os dados são baixados da página Dados individuais dos casos confirmados de COVID-19 no município do Rio de Janeiro do DATA.RIO - Instituto Pereira Passos.

São dados individuais dos casos confirmados de COVID-19 no município do Rio de Janeiro que servem de base para o Painel Rio COVID-19, atualização diária em sincronia com o Painel. Esta base de dados reflete os dados de óbitos da base Ministério da Saúde mostrada no Painel.

Programa

Abaixo está mostrado o código do programa, escrito em R, que gera os gráficos, mas antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('datario_mrj_casos_obitos_faixa_etaria_sexo.R')
#
# DATA.RIO - COVID-19 no Município do Rio de Janeiro
# Casos e Óbitos por Faixa Etária e Sexo
#
# Dados:
# DATA.RIO - Instituto Pereira Passos
# Dados individuais dos casos confirmados de COVID-19 no município do Rio de Janeiro
# https://www.data.rio/datasets/f314453b3a55434ea8c8e8caaa2d8db5
# Dados individuais dos casos confirmados de COVID-19 no município do Rio de Janeiro
# que servem de base para o Painel Rio COVID-19, atualização diária em sincronia com o Painel.
# Esta base de dados reflete os dados de óbitos da base Ministério da Saúde mostrada no Painel.
#
# Bibliotecas
library(utils)
library(plyr)
library(grid)
library(lubridate)
library(ggplot2)
library(ggrepel)
library(gridExtra)

# Ler os dados baixados do DATA.RIO  no formato CSV
dp <- read.csv2('~/R/dados/db_PainelRioCovid.csv', encoding='latin1')

colnames(dp) <- c("classif_final", "data_notific", "data_inicio_sintomas",
                  "bairro", "ap", "Sexo",
                  "faixa_etaria", "evolucao", "data_evolucao", "raca_cor",
                  "data_atualizacao", "sistema")

# Atualizar os valores não disponíveis
dp$bairro[dp$bairro == "INDEFINIDO"] <- NA
dp$ap[dp$ap == "N/D"] <- NA
dp$faixa_etaria[dp$faixa_etaria == "N/D"] <- NA
dp$faixa_etaria[dp$faixa_etaria == "zzN/D"] <- NA
# dp[!dp$Sexo %in% c('M', 'F'),] -> I

# Última data
lastUpdate = toString(max(parse_date_time(dp$data_atualizacao, orders = c("mdy", "dmY")),
                          na.rm = TRUE))

# Tabela contendo o resumo dos casos
tbl_casos <- count(dp, "Sexo")
colnames(tbl_casos) <- c("Sexo", "Total")
tot_casos <- data.frame("Soma", sum(tbl_casos$Total))
colnames(tot_casos) <- c("Sexo", "Total")
tbl_casos <- rbind(tbl_casos, tot_casos)

# Casos confirmados para os sexos Masculino e Feminino
dp_casos <- dp[dp$Sexo %in% c("M","F"), ]

# Criar um data frame com os casos convertendo as datas
df_casos <- data.frame(
    classif_final = dp_casos$classif_final,
    data_notific = parse_date_time(dp_casos$data_notific, orders = c("dmY", "mdy")),
    data_inicio_sintomas = parse_date_time(dp_casos$data_inicio_sintomas, orders = c("dmY", "mdy")),
    bairro = dp_casos$bairro,
    ap = dp_casos$ap,
    Sexo = dp_casos$Sexo,
    faixa_etaria = dp_casos$faixa_etaria,
    evolucao = dp_casos$evolucao,
    raca_cor = dp_casos$raca_cor,
    data_atualizacao = parse_date_time(dp_casos$data_atualizacao, orders = c("mdy", "dmY")),
    sistema = dp_casos$sistema
)

# Casos por Faixa Etária e Sexo
casos_faixa_etaria_sexo <- count(df_casos, c("faixa_etaria", "Sexo"))

# Gráfico de Casos por Faixa Etária e Sexo
plot_cases <- ggplot(casos_faixa_etaria_sexo, aes(x = faixa_etaria, y = freq, fill = Sexo)) +
    labs(
        title = "DATA.RIO - COVID-19 no Município do Rio de Janeiro",
        subtitle = paste("Casos por Faixa Etária e Sexo até", lastUpdate),
        caption = "Fonte: https://www.data.rio/datasets/f314453b3a55434ea8c8e8caaa2d8db5",
        x = "Faixa etária",
        y = "Casos"
    ) +
    geom_bar(
        position = "dodge",
        stat = "identity",
        width = 1.8
    ) +
    geom_text(
        aes(
            label = prettyNum(freq, big.mark=".", decimal.mark=",")
        ),
        hjust=0,
        vjust=0.5,
        color="black",
        position = position_dodge(1.6),
        size = 4
    )+
    coord_flip() +
    scale_x_discrete(
        limits=rev(casos_faixa_etaria_sexo$faixa_etaria)
    ) +
    ylim(0, 22000) +
    guides(
        fill = guide_legend(title = "Sexo")
    ) +
    theme_minimal() +
    theme(
        legend.title = element_text(size = 14),
        legend.text = element_text(size = 12),
        legend.direction = "horizontal",
        legend.position = "top",
        panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "lightblue"),
        axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        axis.title.x = element_text(size = 14),
        axis.title.y = element_text(size = 14),
        plot.title = element_text(size = 20),
        plot.subtitle = element_text(size = 18),
        plot.caption = element_text(size = 12),
        plot.margin = unit(c(6, 6, 6, 6), "pt") #top, right, bottom, left
    ) +
    annotation_custom(
        tableGrob(
            tbl_casos,
            rows = NULL,
            theme = ttheme_default(base_size = 9)
    ),
    xmin = "De 0 a 9",
    ymin = 18000
)

# Tabela contendo o resumo dos óbitos
dp_obitos <- dp[dp$evolucao == "OBITO", ]
tbl_obitos <- count(dp_obitos, "Sexo")
colnames(tbl_obitos) <- c("Sexo", "Total")
tot_obitos <- data.frame("Soma", sum(tbl_obitos$Total))
colnames(tot_obitos) <- c("Sexo", "Total")
tbl_obitos <- rbind(tbl_obitos, tot_obitos)

# Óbitos para os sexos Masculino e Feminino
dp_obitos <- dp[dp$evolucao == "OBITO" & dp$Sexo %in% c("M","F"), ]

# Criar um data frame com os óbitos convertendo as datas
df_obitos <- data.frame(
    classif_final = dp_obitos$classif_final,
    data_notific = parse_date_time(dp_obitos$data_notific, orders = c("dmY", "mdy")),
    data_inicio_sintomas = parse_date_time(dp_obitos$data_inicio_sintomas, orders = c("dmY", "mdy")),
    bairro = dp_obitos$bairro,
    ap = dp_obitos$ap,
    Sexo = dp_obitos$Sexo,
    faixa_etaria = dp_obitos$faixa_etaria,
    evolucao = dp_obitos$evolucao,
    raca_cor = dp_obitos$raca_cor,
    data_atualizacao = parse_date_time(dp_obitos$data_atualizacao, orders = c("mdy", "dmY")),
    sistema = dp_obitos$sistema
    )

# Óbitos por Faixa Etária e Sexo
obitos_faixa_etaria_sexo <- count(df_obitos, c("faixa_etaria", "Sexo"))

# Gráfico de Óbitos por Faixa Etária e Sexo
plot_deaths <- ggplot(obitos_faixa_etaria_sexo, aes(x = faixa_etaria, y = freq, fill = Sexo)) +
    labs(
        title = "DATA.RIO - COVID-19 no Município do Rio de Janeiro",
        subtitle = paste("Óbitos por Faixa Etária e Sexo até", lastUpdate),
        caption = "Fonte: https://www.data.rio/datasets/f314453b3a55434ea8c8e8caaa2d8db5",
        x = "Faixa etária",
        y = "Óbitos"
    ) +
    geom_bar(
        position = "dodge",
        stat = "identity",
        width = 1.8
    ) +
    geom_text(
        aes(
            label = prettyNum(freq, big.mark=".", decimal.mark=",")
        ),
        hjust=0,
        vjust=0.5,
        color="black",
        position = position_dodge(1.6),
        size = 4
    )+
    coord_flip() +
    scale_x_discrete(
        limits=rev(obitos_faixa_etaria_sexo$faixa_etaria)
    ) +
    guides(
        fill = guide_legend(title = "Sexo")
    ) +
    theme_minimal() +
    theme(
        legend.title = element_text(size = 14),
        legend.text = element_text(size = 12),
        legend.direction = "horizontal",
        legend.position = "top",
        panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "pink"),
        axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        axis.title.x = element_text(size = 14),
        axis.title.y = element_text(size = 14),
        plot.title = element_text(size = 20),
        plot.subtitle = element_text(size = 18),
        plot.caption = element_text(size = 12),
        plot.margin = unit(c(6, 6, 6, 6), "pt") #top, right, bottom, left
    ) +
    annotation_custom(
        tableGrob(
            tbl_obitos,
            rows = NULL,
            theme = ttheme_default(base_size = 9)
    ),
    xmin = "De 0 a 9",
    ymin = 2100,
    ymax = 2200
  )

# Gravar as imagens dos gráficos no disco
ggsave("~/R/img/datario_mrj_casos_faixa_etaria_sexo.png",
       plot_cases, device = png(), width = 11, height = 6.25, dpi = 72)
ggsave("~/R/img/datario_mrj_obitos_faixa_etaria_sexo.png",
       plot_deaths, device = png(), width = 11, height = 6.25, dpi = 72)

dev.off()
dev.off()