projection_summary.R 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/usr/bin/env Rscript
  2. library(tidyverse)
  3. library(lubridate)
  4. categories_mode <- function(x) {
  5. summarize (x,
  6. cnae_secao = names(which.max(table(cnae_secao))),
  7. ds_natureza_lesao = names(which.max(table(ds_natureza_lesao))),
  8. cbo_grande_grupo = names(which.max(table(cbo_grande_grupo))),
  9. agrupamento_parte_do_corpo = names(which.max(table(agrupamento_parte_do_corpo))),
  10. ds_grupo_agcausadores = names(which.max(table(ds_grupo_agcausadores))),
  11. ds_tipo_acidente = names(which.max(table(ds_tipo_acidente))),
  12. ds_tipo_local_acidente = names(which.max(table(ds_tipo_local_acidente))),
  13. turno = names(which.max(table(turno)))
  14. )
  15. }
  16. #count occurrences of each category in a collumn and spread it
  17. # TODO make passing column name work!
  18. #spread_occurrences <- function(x, y) {
  19. # x %>%
  20. # group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  21. # count(y) %>%
  22. # spread(y, n, fill = 0)
  23. #}
  24. cnaes <- read_csv2("../app/data/cnae_organizado.csv")
  25. cbos <- read_csv2("../app/data/cbo_organizado.csv")
  26. partes_do_corpo <- read_csv2("../app/data/parte_do_corpo_organizado.csv")
  27. agente_causador <- read_csv2("../app/data/agente_causador_organizado.csv")
  28. complete <- read_csv2("../app/data/completo.csv", na = c("NA", "", "Não informado"),
  29. col_types = cols(
  30. pais = col_character(),
  31. regiao = col_character(),
  32. uf = col_character(),
  33. mesorregiao = col_character(),
  34. microrregiao = col_character(),
  35. municipio = col_character(),
  36. st_acidente_feriado = col_character(),
  37. ds_agente_causador = col_character(),
  38. ano_cat = col_integer(),
  39. ds_cnae_classe_cat = col_character(),
  40. dt_acidente = col_date(),
  41. st_dia_semana_acidente = col_character(),
  42. ds_emitente_cat = col_character(),
  43. hora_acidente = col_time(),
  44. idade_cat = col_integer(),
  45. cd_indica_obito = col_character(),
  46. ds_natureza_lesao = col_character(),
  47. ds_cbo = col_character(),
  48. ds_parte_corpo_atingida = col_character(),
  49. cd_tipo_sexo_empregado_cat = col_character(),
  50. ds_tipo_acidente = col_character(),
  51. ds_tipo_local_acidente = col_character()
  52. ))
  53. # Remove unnecessary columns
  54. complete <- complete[-c(7, 9, 11, 12)]
  55. complete <- drop_na(complete)
  56. # Change absolute hour to "shifts"
  57. complete <- complete %>% mutate(turno = case_when(
  58. hora_acidente >= hm("06:00") & hora_acidente < hm("18:00") ~ "Diurno",
  59. TRUE ~ "Noturno"))
  60. # Remove absolute hour
  61. complete <- complete[-10]
  62. # Group CNAES in higher hierarchy
  63. complete <- complete %>% inner_join(cnaes, by = "ds_cnae_classe_cat")
  64. complete <- complete %>% inner_join(cbos, by = "ds_cbo")
  65. complete <- complete %>% inner_join(partes_do_corpo, by = "ds_parte_corpo_atingida")
  66. complete <- complete %>% inner_join(agente_causador, by = "ds_agente_causador")
  67. #remove old classification
  68. complete <- complete[-c(7,8,13,14)]
  69. #this data is necessar for parallel coordinates summaries
  70. write_delim(complete, "../app/data/paracoord_data.csv", delim = ";")
  71. # Temporary: seems emitente is not necessary so remove it
  72. complete <- complete[-7]
  73. # Summarize with mode to colour the data
  74. categories <- group_by(complete, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  75. categories_mode() %>%
  76. arrange(regiao, uf, mesorregiao, microrregiao, municipio)
  77. saveRDS(categories, "../app/data/rds/categories.rds")
  78. # This is ugly, we really need that function
  79. d <- complete %>%
  80. group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  81. count(ds_natureza_lesao) %>%
  82. mutate(n = (round(n / sum(n), 4))) %>%
  83. spread(ds_natureza_lesao, n, fill = 0)
  84. d2 <- complete %>%
  85. group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  86. count(ds_tipo_acidente) %>%
  87. mutate(n = (round(n / sum(n), 4))) %>%
  88. spread(ds_tipo_acidente, n, fill = 0)
  89. d3 <- complete %>%
  90. group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  91. count(ds_tipo_local_acidente) %>%
  92. mutate(n = (round(n / sum(n), 4))) %>%
  93. spread(ds_tipo_local_acidente, n, fill = 0)
  94. d4 <- complete %>%
  95. group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  96. count(cnae_secao) %>%
  97. mutate(n = (round(n / sum(n), 4))) %>%
  98. spread(cnae_secao, n, fill = 0)
  99. d5 <- complete %>%
  100. group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  101. count(cbo_grande_grupo) %>%
  102. mutate(n = (round(n / sum(n), 4))) %>%
  103. spread(cbo_grande_grupo, n, fill = 0)
  104. d6 <- complete %>%
  105. group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  106. count(agrupamento_parte_do_corpo) %>%
  107. mutate(n = (round(n / sum(n), 4))) %>%
  108. spread(agrupamento_parte_do_corpo, n, fill = 0)
  109. d7 <- complete %>%
  110. group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  111. count(ds_grupo_agcausadores) %>%
  112. mutate(n = (round(n / sum(n), 4))) %>%
  113. spread(ds_grupo_agcausadores, n, fill = 0)
  114. #extra 'd' for the other fields we need
  115. d8 <- complete %>%
  116. group_by(pais, regiao, uf, mesorregiao, microrregiao, municipio) %>%
  117. summarize(
  118. idade = mean(idade_cat),
  119. obito = sum(cd_indica_obito == "N")/(n()),
  120. sexo = sum(cd_tipo_sexo_empregado_cat == "Masculino")/(n()),
  121. turno = sum(turno == "Diurno")/(n())
  122. )
  123. complete <- d %>%
  124. inner_join(d2, by = c("pais", "regiao", "uf", "mesorregiao", "microrregiao", "municipio")) %>%
  125. inner_join(d3, by = c("pais", "regiao", "uf", "mesorregiao", "microrregiao", "municipio")) %>%
  126. inner_join(d4, by = c("pais", "regiao", "uf", "mesorregiao", "microrregiao", "municipio")) %>%
  127. inner_join(d5, by = c("pais", "regiao", "uf", "mesorregiao", "microrregiao", "municipio")) %>%
  128. inner_join(d6, by = c("pais", "regiao", "uf", "mesorregiao", "microrregiao", "municipio")) %>%
  129. inner_join(d7, by = c("pais", "regiao", "uf", "mesorregiao", "microrregiao", "municipio")) %>%
  130. inner_join(d8, by = c("pais", "regiao", "uf", "mesorregiao", "microrregiao", "municipio")) %>%
  131. arrange(regiao, uf, mesorregiao, microrregiao, municipio)
  132. write_delim(complete, "../app/data/proj/projection_data.csv", delim = ";")