Created
July 2, 2017 21:29
-
-
Save sillasgonzaga/1161f4e6e596fb0f352e15351e5acd2d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
# } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sillas boa tarde
esse código resgata todos os hospitais e clinicas cadastrados na ANS? por estado?