Skip to content

Instantly share code, notes, and snippets.

@sillasgonzaga
Created July 2, 2017 21:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sillasgonzaga/1161f4e6e596fb0f352e15351e5acd2d to your computer and use it in GitHub Desktop.
Save sillasgonzaga/1161f4e6e596fb0f352e15351e5acd2d to your computer and use it in GitHub Desktop.
library(stringr)
library(magrittr)
library(lubridate)
library(glue)
library(dplyr)
library(readr)
# exemplo:
extrair_ans_UF <- function(uf, limpar_pasta_temporaria = TRUE) {
# certificar que uf esta em caixa alta
uf <- str_to_upper(uf)
# definir pasta temporaria pra baixar os arquivos
pasta <- tempdir()
# baixar dados hospitalares do uf
link_hosp <- glue(
"http://www.ans.gov.br/images/stories/Materiais_para_pesquisa/Perfil_setor/Dados_e_indicadores_do_setor/tiss/hospitalar/{uf}/TISS_Hospitalar_{uf}.zip"
)
output_dl <- paste0(pasta, "/", basename(link_hosp))
download.file(link_hosp, destfile = output_dl)
# baixar dados ambulatorios
link_amb <- glue(
"http://www.ans.gov.br/images/stories/Materiais_para_pesquisa/Perfil_setor/Dados_e_indicadores_do_setor/tiss/ambulatorial/{uf}/TISS_Ambulatorial_{uf}.zip"
)
output_dl <- paste0(pasta, "/", basename(link_amb))
download.file(link_amb, destfile = output_dl)
# dezipar os dois arquivos zip
dir(pasta, pattern = "*.zip", full.names = TRUE) %>%
lapply(unzip, exdir = pasta) %>%
invisible()
# criar funcao para ler um arquivo csv e criar colunas de data do arquivo e tipo do dado
# tipo do dado: hospitalar ou ambulatorio
ler.arquivo <- function(file) {
# ler arquivo, forcando colunas problematicas para character
x <- readr::read_csv(file, col_types = cols(
CID_1 = col_character(),
CID_2 = col_character(),
CID_3 = col_character(),
CID_4 = col_character(),
VALOR_PROCEDIMENTO = col_character()
))
data_arquivo <- str_sub(basename(file), 12, 15)
# adicionar dia no final pra ficar em formato de data
data_arquivo <- ymd(paste0(data_arquivo, "01"))
# adicionar coluna de data
x$DATA <- data_arquivo
# identificar se o dado eh ambulatorio ou hospitalar pelo nome do arquivo
# se tiver um _H antes do .csv eh pq eh hospitalar, caso contrario eh ambulatorio
eh.hospitalar <- str_detect(basename(file), "_H")
if (eh.hospitalar) {
x$TIPO_DADO <- "Hospitalar"
} else {
x$TIPO_DADO <- "Ambulatorio"
}
# retornar data frame
x
}
# retornar lista de todos os arquivos csv da pasta temporaria
arquivos <- dir(pasta, pattern = "*.csv", full.names = TRUE)
x.all <- arquivos %>%
lapply(ler.arquivo) %>%
bind_rows() %>%
as.data.frame()
stopifnot(is.data.frame(x.all))
# salvar dataframe em RDA com o nome do UF
# verificar se a pasta data existe. caso contrario, crie-a
if(!dir.exists("data")) dir.create("data")
saveRDS(x.all, file = glue("data/{uf}.Rda"))
# limpar pasta temporaria caso a booleana seja verdadeiro
if (limpar_pasta_temporaria) invisible(file.remove(dir(pasta, full.names = TRUE)))
}
vetor_ufs <- c("AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT",
"MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS",
"RO", "RR", "SC", "SP", "SE", "TO")
# exemplo para rodar para cada UF
# for (i in 2:length(vetor_ufs)) {
# uf_loop <- vetor_ufs[i]
# extrair_ans_UF(uf_loop)
# }
@nilbv
Copy link

nilbv commented Jul 3, 2017

Sillas boa tarde
esse código resgata todos os hospitais e clinicas cadastrados na ANS? por estado?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment