🩺 Como obter e tratar Dados do Datasus

Dados do Datasus são frequentemente demandados e não são fáceis de encontrar. Nesse tópico explora-se algumas dicas importantes de onde esses dados podem ser conseguidos e como podem ser trabalhados. As dicas provêm principalmente do Paulo Henrique Barros e André Marques dos Santos.

Acesso aos dados

Documentações podem ser acessada pelos seguintes links:

Alguns dados abertos também estão disponíveis no portal OpenDataSUS:

https://opendatasus.saude.gov.br

Como acessar links FTP

Os links para arquivos ou pastas do tipo FTP podem ser acessados:

  • no Windows, por meio do Windows Explorer (passo a passo)
  • em distribuições Linux que usam Gnome (ex.: Ubuntu), pelo gerenciador de arquivos (detalhes)

Obs.: geralmente não é possível acessar links FTP simplesmente os clicando. Isso porque os navegadores atuais têm retirado essa funcionalidade (Firefox) ou a desligado por padrão (Chrome).

Tratando os dados usando R

Os dados podem ser tratados usando o pacote read.dbc. Veja abaixo um exemplo de utilização em R:

library(read.dbc)

datasus<- read.dbc("DOINF02.DBC")

Agradecimentos à Daniela Petruzalek por criar este pacote em R.

Uma outra possibilidade é usar o pacote Microdatasus, desenvolvido pelo Rafael Saldanha.

Instalação:

install.packages("devtools")
devtools::install_github("rfsaldanha/microdatasus")

Exemplo de uso:

library(microdatasus)
dados <- datasus_fetch(year_start = 2013, year_end = 2014, uf = "RJ", information_system = "SIM-DO")
dados <- process_sim(dados)

Para mais informações, consulte o manual.

Tratando os dados usando Python

É possível acessar os dados do DataSUS usando Python por meio da biblioteca PySUS (inclusive ele usa uma parte da library read.dbc). Ela pode ser utilizada, inclusive, dentro de um ambiente Jupyter Notebook / Jupyter Lab para realizar análises e visualizações de dados.

Atenção: é necessário utilizar no mínimo a versão 3.9 do Python. Em versões mais antigas não irá funcionar.

from pysus.online_data.sinasc import download
from pysus.online_data import parquets_to_dataframe

dfse = parquets_to_dataframe(download('SE',2015))
dfse.head()

Mais informações e outros exemplos podem ser vistos no repositório no Github do PySUS:

Instruções de uso estão na documentação do PySUS. O repositório contém também diversos cadernos Jupyter que contêm exemplos de uso. Agradecimentos ao Flávio Codeço Coelho por criar este pacote em Python.

Convertendo os dados para CSV

Outra forma de trabalhar com os dados é convertê-los para CSV, para depois usar a sua ferramenta de preferência. Este conversor chamado dbc2csv pode ser usada para converter os arquivos .dbc para o formato .csv.

10 curtidas

Caso as pessoas tenham interesse nós desenvolvemos um curso gratuito que ensina a utilizar o software TABWIN (disponibilizado pelo próprio datasus). http://www.atsaude.com.br/curso-tabwin-gratuito-ead/

Além da library do R também é possível utilizar o pysus (inclusive ele usa uma parte da library read.dbc) no python, principalmente com o jupyter notebook

alguns exemplos do pysus:
https://pysus.readthedocs.io/en/latest/Dengue.html
https://pysus.readthedocs.io/en/latest/Chikungunya.html

5 curtidas

Desenvolvi a função em R abaixo que permite programaticamente baixar os dados que se queira do Datasus bastando alterar os parâmetros

hack_datasus <- function(sistema, modalidade, tipo_arquivo, ano, UF, mes){
  
  #Função gera dataframe a partir de ftp feita na página do datasus
  
  #sistema ex:'SIHSUS' Verificar os sistemas disponíveis em http://www2.datasus.gov.br/DATASUS/index.php?area=0901&item=1
  #modalidade  'dados'
  #tipo_arquivo ex: 'RD'#Varia conforme o sistema
  #ano ex: 17 Dois últimos dígitos do ano 
  #UF ex:'AL' Sigla de UF Brasileira
  #mes ex:'12' strings entre 01 e 12
  
  
  dest_file<- paste0(tipo_arquivo,UF,ano,mes,".dbc")
  str_download <- paste0("ftp://ftp.datasus.gov.br/dissemin/publicos/",sistema,"/","200801","_/",modalidade,"/",tipo_arquivo,UF,ano,mes,".dbc")
  download.file(str_download,destfile = dest_file, mode='wb')
  library(read.dbc)
  datasus<- read.dbc(dest_file)
  
  
}

sistema <- 'SIASUS' #Verificar os sistemas disponíveis em http://www2.datasus.gov.br/DATASUS/index.php?area=0901&item=1
modalidade <- 'dados'
tipo_arquivo<- 'ACF'#Varia conforme o sistema
ano <- 18 #Dois últimos dígitos do ano 
UF <- 'SP' #Siglas das UFs Brasileiras
mes<- '01' #strings entre 01 e 12


#Carrega em df_datasus os dados relativos à base de dados montada a partir dos parãmetros
df_datasus<- hack_datasus(sistema, modalidade, tipo_arquivo, ano, UF, mes)
5 curtidas

Estive procurando uma alternativa em Python para ler os dados do Datasus, experimentei e descobri que o pacote dbfread funciona para os arquivos DBF (não compactados). Para os arquivos com extensão DBC (compactados), ainda não encontrei uma solução.

Abrindo arquivos DBF no Pandas

Usando a biblioteca dbfread é possível, segundo a sua documentação, abrir um arquivo DBF e jogá-lo em um DataFrame do Pandas.

Segue um exemplo com o arquivo CADMUN.dbf:

import dbfread, pandas as pd

dbf = dbfread.DBF('dados/CADMUN.dbf')

df = pd.DataFrame(iter(dbf))

In [9]: df.head()                                                               
Out[9]: 
   MUNCOD MUNCODDV SITUACAO MUNSINP  ... LATITUDE LONGITUDE ALTITUDE      AREA
0  000000  0000000    IGNOR   00000  ...    0.000     0.000      0.0     0.000
1  110000  1100000    IGNOR   26000  ...    0.000     0.000      0.0     0.000
2  110001  1100015    ATIVO   26016  ...  -11.929   -61.996    350.0  7066.702
3  110002  1100023    ATIVO   26004  ...   -9.913   -63.041    142.0  4426.558
4  110003  1100031    ATIVO   26020  ...  -13.492   -60.545    230.0  1314.355

[5 rows x 28 columns]

In [10]: len(df)                                                                
Out[10]: 5652

In [11]: df.columns                                                             
Out[11]: 
Index(['MUNCOD', 'MUNCODDV', 'SITUACAO', 'MUNSINP', 'MUNSIAFI', 'MUNNOME',
       'MUNNOMEX', 'OBSERV', 'MUNSINON', 'MUNSINONDV', 'AMAZONIA', 'FRONTEIRA',
       'CAPITAL', 'UFCOD', 'MESOCOD', 'MICROCOD', 'MSAUDCOD', 'RSAUDCOD',
       'CSAUDCOD', 'RMETRCOD', 'AGLCOD', 'ANOINST', 'ANOEXT', 'SUCESSOR',
       'LATITUDE', 'LONGITUDE', 'ALTITUDE', 'AREA'],
      dtype='object')

Infelizmente, o dbfread ainda não suporta arquivos DBC. Mas criei uma issue no repositório no Github para registrar a ideia.

4 curtidas

Eu criei um script interativo para baixar bases completas do Datasus.
Os arquivos são puxados direto do FTP.

3 curtidas

Especificamente sobre os dados do sistema CNES, vale à pena conhecer a página de documentação do sistema. Segue link abaixo:

http://cnes.datasus.gov.br/pages/downloads/documentacao.jsp

4 curtidas

O @turicas me indicou também esta ferramenta que converte dados do formato .dbc para .csv. Segundo ele, ele a tem usado para tratar os dados do DataSUS.

https://github.com/greatjapa/dbc2csv

2 curtidas

Esse artigo publicado no periódico “Cadernos de Saúde Pública” (vol. 35, n. 9, set, 2019) pode ser útil:

Microdatasus: pacote para download e pré-processamento de microdados do Departamento de Informática do SUS (DATASUS)

Os autores são da FioCruz e do Departamento de Estatística da Universidade Federal de Juiz de Fora.

2 curtidas

Obrigado pela referência, @Bruno! Aqui está o link direto para o pacote R Microdatasus, feito por um dos autores do artigo:

1 curtida

Parece que o DATASUS está desenvolvendo um Portal de Dados Abertos com os dados do SUS:

Em 19/05/2020 tinha 6 conjuntos de dados.

2 curtidas

@Bruno, foi um achado esse novo portal! Obrigado! Já acrescentei a informação também na postagem original.

1 curtida

Os dados de mortalidade do SIM, de 1996 a 2018, agora também podem ser usados na Base dos Dados Mais.

1 curtida

Não vi esse link em outros lugares, mas achei interessante esse site que o Ministério da Saúde desenvolveu para centralizar informações do SUS:

https://localizasus.saude.gov.br/

2 curtidas

Olá, alguém sabe como posso consultar a DB que o Painel Oncologia usa? Pelo que eu entendi eles já estão tradados.
Painel Oncologia DataSUS

Olá pessoALL,
Eu escrevi um pequeno tutorial de como fazer processamento paralelo para abrir os arquivos dbc, já que às vezes temos muitos deles para processar. Caso interesse, as dicas estão aqui Paralelizando a leitura de muitos arquivos no R. E se precisar juntar isso tudo em um CSV para posterior processamento, tem esse aqui Concatenando data.frames.
ABs

2 curtidas

Disponibilizei no Github um código em Python que escrevi para baixar e salvar em formato .parquet, de forma iterativa, arquivos do sistema SIA (PAUFAAMM.dbc) . Ele está apto para uso no Google Colab e permite salvar os arquivos desejados direto no Drive. As informações também podem ser consumidas diretamente no Notebook, através do Pandas Dataframe que é criado para cada arquivo. Ele utiliza a biblioteca PySUS.

3 curtidas

oi, vc teria um codigo no R para converter o .dbc para .csv ?

Seja bem vinda ao fórum, Alice!

Nas mensagens acima você encontra a resposta para a sua pergunta:

1 curtida

Oii, estou com algumas duvidas…
agora o site do datasus é
https://datasus.saude.gov.br/transferencia-de-arquivos/#
aonde eu teria que alterar pelo seu codigo?
e no caso, por ex, eu quero todos os anos de 2005 a 2010 de leptospirose pro brasil (pra retornar todos os municipios que tiveram casos confirmados). Os parametros mes, UF, ficaria como?
obrigada