11 Apresentação de dados administrativos abertos de saúde e coleta por máquina.
# install.packages("RCurl")
# install.packages("htmlTable")
library("RCurl")
library("htmlTable")
# variaveis <! ---- --><! ---- --> inicio <! ---- --><! ---- --><! ---- --><! ---- -->---
# url de base
url="ftp://ftp.datasus.gov.br/dissemin/publicos/"
# diretorio local para arquivos dbc
dirdbc="/home/ferre/Downloads/dbc"
# lista de url complementar
lst=as.data.frame(matrix(c("CIHA", "CIHA/201101_/Dados/", "CMD", "CMD/DadosSISAB/", "CNES", "CNES/200508_/Dados/DC/", "CNES", "CNES/200508_/Dados/EE/", "CNES", "CNES/200508_/Dados/EF/", "CNES", "CNES/200508_/Dados/EP/", "CNES", "CNES/200508_/Dados/EQ/", "CNES", "CNES/200508_/Dados/GM/", "CNES", "CNES/200508_/Dados/HB/", "CNES", "CNES/200508_/Dados/IN/", "CNES", "CNES/200508_/Dados/LT/", "CNES", "CNES/200508_/Dados/PF/", "CNES", "CNES/200508_/Dados/RC/", "CNES", "CNES/200508_/Dados/SR/", "CNES", "CNES/200508_/Dados/ST/", "PNI", "PNI/DADOS/", "SIA", "SIASUS/199407_200712/Dados/", "SIA", "SIASUS/200801_/Dados/", "SIM", "SIM/CID10/DOFET/", "SIM", "SIM/CID10/DORES/", "SINAN", "SINAN/DADOS/FINAIS/", "SINAN", "SINAN/DADOS/PRELIM/", "SINASC", "SINASC/1996_/Dados/DNRES/", "SISPRENATAL", "SISPRENATAL/201201_/Dados/"), byrow = TRUE, ncol = 2))
colnames(lst)=c("no_sistema","ds_url")
# variaveis <! ---- --><! ---- --> fim <! ---- --><! ---- --><! ---- --><! ---- -->---
# inicializa a lista de saida
lista=
data.frame(
"no_dbc"=character(),
"dt_atualizado_ftp"=character(),
"hs_atualizado_ftp"=character(),
"qt_bytes_ftp"=character(),
"qt_bytes_local"=character(),
"no_arquivo"=character(),
"no_sistema"=character(),
"no_tabela"=character(),
"sg_local"=character(),
"nu_competencia"=character(),
"ds_url"=character()
)
# verifica tamanho do arquivo local e atualiza a lista ftp
listadbc=read.table(text=list.files(dirdbc, full.names = FALSE), header = FALSE)
colnames(listadbc)="no_dbc_local"
listadbc$qt_bytes_local=file.size(list.files(dirdbc, full.names = TRUE))
for (i in 1:dim(lst)[1]) {
ds_url=paste(url,lst[i,2],sep="") # url
no_sistema=lst[i,1] # sistema SUS
# lista os arquivos do ftp
listaftp <- read.table(text=getURL(ds_url), header = FALSE)
colnames(listaftp)=c("dt_atualizado_ftp","hs_atualizado_ftp","qt_bytes_ftp","no_dbc")
# atualiza lista ftp com o tamanho do arquivo local
listaftp=merge(listaftp, listadbc, by.x = "no_dbc", by.y = "no_dbc_local", all.x = TRUE)
listaftp$qt_bytes_local[is.na(listaftp$qt_bytes_local)] = 0
# nome do arquivo sem extensao e minusculo
listaftp$no_arquivo=tolower(gsub("([0-9]+).*$", "\\1", listaftp$no_dbc))
# aloca o nome do sistema
listaftp$no_sistema=no_sistema
# obtem a sigla da tabela (subsistema)
listaftp$no_tabela=sub("^([[:alpha:]]*).*", "\\1", listaftp$no_dbc)
listaftp$no_tabela=toupper(substr(listaftp$no_tabela,1,nchar(listaftp$no_tabela)-2))
# sigla do local (uf ou brasil)
listaftp$sg_local=sub("^([[:alpha:]]*).*", "\\1", listaftp$no_dbc)
listaftp$sg_local=toupper(substr(listaftp$sg_local,nchar(listaftp$sg_local)-1,nchar(listaftp$sg_local)))
# obtem a competencia (aaaamm)
listaftp$nu_competencia=regmatches(listaftp$no_dbc, gregexpr("[[:digit:]]+", listaftp$no_dbc))
listaftp$nu_competencia=paste(ifelse(substr(listaftp$nu_competencia,1,2) < 80, 20, 19),listaftp$nu_competencia, sep="")
# aloca a url
listaftp$ds_url=ds_url
lista=rbind(lista,listaftp)
}
<! —- –>