Documentação Fluxo ETL: SIM-DOFET

1. Descrição dos dados

Dados do Sistema de Informação sobre Mortalidade - Declaração de Óbitos Fetais (SIM-DOFET) reunidos pela Plataforma de Ciência de Dados aplicada à Saúde (PCDaS).

Os dados foram obtidos junto ao DATASUS (Ministério da Saúde), tratados e enriquecidos seguindo uma metodologia própria de ETL (Extract, Transform, Load) da PCDaS, resultando em um dataset anual com todos os registros das declarações de óbitos fetais contidas no DOFET de 1996 a 2020.

A atualização dos dados é realizada pelo DATASUS, e a PCDaS extrai os registros anuais assim que disponibilizados. As colunas com nomes em MAIÚSCULAS representam dados originais advindos do DATASUS e colunas com nomes iniciando em minúsculo representam dados resultantes de transformação ou enriquecimento.

2. ETL

O processo de Extração, Transformação e Carregamento (Extract, Transform, Load – ETL) é um processo que envolve:

  • Extração de dados de fontes externas;
  • Transformação dos dados para atender às necessidades de negócios;
  • Carregamento dos dados;

Extract

  • Acessar o servidor FTP do DATASUS através do link: ftp://datasus.gov.br/dissemin/publicos/SIM/CID10/DOFET e baixar os arquivos com extensão .dbc contendo os microdados anônimos do DOFET para cada ano disponível/desejado;

Transform

  • Tratar o conjunto de dados adquirido de maneira a:
    • Eliminar valores inválidos;
    • Decodificar e enriquecer os dados de acordo com dicionário de dados;
    • Enriquecer os dados relacionados a município;
    • Enriquecer os dados relacionados a UF;
    • Enriquecer os dados relacionados a Classificação Estatística Internacional de Doenças e Problemas Relacionados com a Saúde (CID10);
    • Enriquecer os dados relacionados a data;
    • Enriquecer com informações de semana e ano epidemiológico;
    • Enriquecer os dados relacionados a coordenadas geográficas;
    • Enriquecer os dados relacionados a Código Brasileiro de Ocupação (CBO);

Load

  • Indexar dados tratados do SIM-DOFET em um banco de dados NoSQL localizado em infraestrutura da PCDaS no Laboratório Nacional de Computação Científica (LNCC);
  • Coletar log de indexação.

A implementação de todo o fluxo ETL descrito foi feita em uma ferramenta criada para agendar e monitorar fluxos de trabalho, tecnologia esta utilizada no momento da criação deste tutorial, mas que se encontra em constante evolução. Este processo ETL foi executado para cada ano selecionado e disponível no servidor FTP do DATASUS através do link: ftp://datasus.gov.br/dissemin/publicos/SIM/CID10/DOFET . Uma visão geral do fluxo ETL é apresentada no diagrama a seguir:

Detalhes de código/dados da implementação do fluxo ETL são apresentados a seguir.

2.1 Fase Extract:

1: Acessando o servidor FTP do DATASUS através do link: ftp://datasus.gov.br/dissemin/publicos/SIM/CID10/DOFET e baixando os arquivos com extensão .dbc contendo os dados do SIM-DOFET para para cada ano disponível/desejado;

2.2 Fase Transform:

Detalhes do tratamento dos dados são apresentados a seguir, onde colunas com nomes em maiúsculo representam dados originais advindos do DATASUS e colunas com nomes em minúsculo representam dados resultantes de tratamento:

1. Eliminando valores inválidos:

Coluna Valores Aceitos Valores inválidos são substituídos por
GESTACAO [1,2,3,4,5,6,9] 9
TIPOBITO [1,2] 9
SEXO [0,1,2,'M','F'] 0
RACACOR [1,2,3,4,5] 9
LOCOCOR [1,2,3,4,5,9] 9
ESCMAE [1,2,3,4,5,9] 9
GRAVIDEZ [1,2,3,9] 9
PARTO [1,2,9] 9
OBITOPARTO [1,2,3,9] 9
ASSISTMED [1,2,9] 9
ATESTANTE [1,2,3,4,5,9] 9
IDADEMAE números inteiros NULL
NATURAL números inteiros NULL
OCUP números inteiros NULL
OCUPMAE números inteiros NULL
PESO números inteiros NULL
QTDFILVIVO números inteiros NULL
QTDFILMORT números inteiros NULL
FILHVIVOS números inteiros NULL
FILHMORT números inteiros NULL

As colunas CRM e MEDICO foram removidas do conjunto de dados, por se tratar de dados sensíveis.

2. Decodificando e enriquecendo os dados:

Coluna Códigos Coluna Resultante
TIPOBITO {1:'óbito fetal', 2:'óbito não fetal'} def_tipo_obito
SEXO {M':1, 'F':2} SEXO
SEXO {0:"Ignorado",1:"Masculino", 2:"Feminino"} def_sexo
RACACOR {1:"Branca",2:"Preta",3:"Amarela",4:"Parda",5:"Indígena", 9:"Ignorado"} def_raca_cor
LOCOCOR {9:"Ignorado",1:"Hospital",2:"Outro Estab. Saúde", 3:"Domicílio", 4:"Via Pública", 5:"Outros"} def_loc_ocor
ESCMAE {1:"Nenhuma",2:"1 a 3 anos",3:"4 a 7 anos",4:"8 a 11 anos",5:"12 e mais",9:"Ignorado"} def_escol_mae
GRAVIDEZ {9:'Ignorado', 1:'Única',2:'Dupla',3:'Tripla ou mais'} def_gravidez
PARTO {9:"Ignorado",1:"Vaginal",2:"Cesáreo"} def_parto
OBITOPARTO {9:'Ignorado', 1:'Antes',2:'Durante',3:'Depois'} def_obito_parto
OBITOGRAV {9:'Ignorado', 1:'Sim',2:'Não'} def_obito_grav
OBITOPUERP {9:'Ignorado', 1:'Sim, até 42 dias',2:'sim, de 43 dias a 01 ano',3:'Não'} def_obito_puerp
ASSISTMED {9:'Ignorado', 1:'Com assitência',2:'Sem assistência'} def_assist_med
ATESTANTE {9:'Ignorado', 1:'Sim',2:'Substituto',3:'IML',4:'SVO',5:'Outros'} def_atestante
ESC {1:"Nenhuma",2:"1 a 3 anos",3:"4 a 7 anos",4:"8 a 11 anos",5:"12 e mais",9:"Ignorado"} def_escol
ESTCIV {1:"Solteiro", 2:"Casado", 3:"Viúvo",4:"Separado Judic./Divorciado",9:"Ignorado"} def_est_civil
GESTACAO {1:'Menos de 22 semanas', 2:'22 a 27 semanas', 3:'28 a 31 semanas', 4:'32 a 36 semanas', 5:'37 a 41 semanas', 6:'42 semanas e mais', 9:'Ignorado'} def_gestacao
EXAME {9:'Ignorado', 1:'Sim',2:'Não'} def_exame
CIRURGIA {9:'Ignorado', 1:'Sim',2:'Não'} def_cirurgia
NECROPSIA {9:'Ignorado', 1:'Sim',2:'Não'} def_necropsia
CIRCOBITO {9:'Ignorado', 1:'Acidente',2:'Suicídio', 3:'Homicídio',4:'Outros'} def_circ_obito
ACIDTRAB {9:'Ignorado', 1:'Sim',2:'Não'} def_acid_trab
FONTE {9:'Ignorado', 1:'Boletim de ocorrência',2:'Hospital',3:'Família',4:'Outra'} def_fonte
QTDFILVIVO {"0":"Sem Filhos", "1 a 3": "1 a 3 filhos", "4 a 6": "4 a 6 filhos", "7 a 8": "7 a 8 filhos", "9 a 13": "9 a 13 filhos", "14 a 98": "14 ou mais filhos","99": "Ignorado"} def_num_filhos_vivos
QTDFILMORT {"0":"Sem Filhos", "1": "1 filho", "2 a 4": "2 a 4 filhos", "5 a 98": "5 ou mais filhos", "99": "Ignorado"} def_num_filhos_mortos

3. Enriquecimento de dados com tabelas auxiliares

3.1 Enriquecendo os dados relacionados a município:

O enriquecimento dos dados do SIM-DOFET relacionados a município foram baseados nos dados disponíveis no seguinte arquivo:

Coluna base Operação Colunas Resultantes
CODMUNRES Truncar para um máximo de 6 caracteres CODMUNRES
CODMUNRES Fazer junção ("left join") com base na coluna 'MUNCOD' em 'municipios' ["res_MUNNOME", "res_MUNNOMEX", "res_AMAZONIA", "res_FRONTEIRA", "res_CAPITAL", "res_UFCOD", "res_MSAUDCOD", "res_RSAUDCOD", "res_CSAUDCOD", "res_LATITUDE", "res_LONGITUDE", "res_ALTITUDE", "res_AREA", "res_codigo_adotado"]
CODMUNOCOR Truncar para um máximo de 6 caracteres CODMUNOCOR
CODMUNOCOR Fazer junção ("left join") com base na coluna 'MUNCOD' em 'municipios' ["ocor_MUNNOME", "ocor_MUNNOMEX", "ocor_AMAZONIA", "ocor_FRONTEIRA", "ocor_CAPITAL", "ocor_UFCOD", "ocor_MSAUDCOD", "ocor_RSAUDCOD", "ocor_CSAUDCOD", "ocor_LATITUDE", "ocor_LONGITUDE", "ocor_ALTITUDE", "ocor_AREA", "ocor_codigo_adotado"]

3.2. Enriquecendo os dados relacionados a UF:

O enriquecimento dos dados do SIM-DOFET relacionados a UF foram baseados nos dados disponíveis no seguinte arquivo:

Coluna base Operação Colunas Resultantes
res_UFCOD Fazer junção ("left join") com base na coluna 'CODIGO' em 'ufs' ["res_SIGLA_UF", "res_CODIGO_UF", "res_NOME_UF"]
res_CODIGO_UF Definir a região da UF de acordo com o primeiro dígito de seu código {1:'Norte', 2:'Nordeste', 3:'Sudeste', 4:'Sul', 5:'Centro-Oeste'} res_REGIAO
ocor_UFCOD Fazer junção ("left join") com base na coluna 'CODIGO' em 'ufs' ["ocor_SIGLA_UF", "ocor_CODIGO_UF", "ocor_NOME_UF"]
ocor_CODIGO_UF Definir a região da UF de acordo com o primeiro dígito de seu código {1:'Norte', 2:'Nordeste', 3:'Sudeste', 4:'Sul', 5:'Centro-Oeste'} ocor_REGIAO

3.3. Enriquecendo os dados relacionados a CID10:

O enriquecimento dos dados do SIM-DOFET relacionados a CID10 foram baseados nos dados disponíveis nos seguintes arquivos:

Coluna base Operação Colunas Resultante
CAUSABAS Truncar para um máximo de 3 caracteres CAUSABAS_tmp_1
CAUSABAS Truncar para um máximo de 4 caracteres CAUSABAS_tmp_2
CAUSABAS_tmp_1 Fazer junção ("left join") com base na coluna 'cod_capitulo' em 'CID10' e extração da coluna 'descr_capitulo' causabas_capitulo
CAUSABAS_tmp_1 Fazer junção ("left join") com base na coluna 'cod_grupo' em 'CID10' e extração da coluna 'descr_grupo' causabas_grupo
CAUSABAS_tmp_1 Fazer junção ("left join") com base na coluna 'cod_categoria' em 'CID10' e extração da coluna 'descr_categoria' causabas_categoria
CAUSABAS_tmp_2 Fazer junção ("left join") com base na coluna 'cod_subcategoria em 'CID10' e extração da coluna 'descr_subcategoria' causabas_subcategoria
CAUSABAS_tmp_1 e CAUSABAS_tmp_2 Remoção de colunas NULL

3.4 Enriquecendo os dados relacionados à ocupação da mãe:

O enriquecimento dos dados do SIM-DOFET relacionados ao CBO foram baseados nos dados disponíveis no seguinte arquivo:

CBO

Coluna base Operação Coluna Resultante
OCUPMAE Fazer junção ("left join") com base na coluna OCUPMAE def_cbo

4. Enriquecendo os dados relacionados a data:

Para cálculo da semana e ano epidemiológico foi utilizado o pacote epiweeks.

Coluna base Operação Coluna Resultante
DTOBITO Converter para tipo data data_obito
data_obito Extrair ano (se 1996 <= ano <= 2020) ano_obito
data_obito Extrair dia da semana dia_semana_obito
DTNASC Converter para tipo data data_nasc
data_nasc Extrair ano (se ano < ano_obito) ano_nasc
data_nasc Extrair dia da semana dia_semana_nasc
data_obito Extrair semana e ano epidemiológico def_semana_ano_epi
def_semana_ano_epi Extrair semana epidemiológica def_semana_epi
def_semana_ano_epi Extrair ano epidemiológico def_ano_epi

5. Enriquecendo os dados relacionados a coordenadas:

Coluna base Operação Coluna Resultante
res_LATITUDE e res_LONGITUDE Concatenar coordenadas res_coordenadas
ocor_LATITUDE e ocor_LONGITUDE Concatenar coordenadas ocor_coordenadas

Retorno da fase de tratamento (exemplo):

2.3. Fase Load:

1. Indexando dados tratados do SIM-DOFET em um banco de dados NoSQL:

Uma vez finalizada a trasformação/preparação dos dados, estes são indexados em um servidor de banco de dados NoSQL localizado na infraestrutura da PCDaS no LNCC.

3. Dados e Dicionário de Variáveis

O download e a prévia do conjunto de dados resultante de todo o tratamento realizado e indexado no banco de dados NoSQL estão disponíveis na PCDaS, assim como o dicionário de variáveis.

4. Avaliação dos Dados

Para conferir as visualizações de avaliação dos dados acesse o link.

4.1 Descrição das visualizações de Avaliação dos Dados

Foi criado um painel composto por diversos gráficos, com intuito de possibilitar a visualização de potenciais inconsistências na base de dados. Duas visualizações funcionam como base da exploração, e portanto existem para serem checadas após a aplicação de filtros. As restantes mostram, uma a uma, variáveis que assumem valores considerados suspeitos.

A visualização Quantidade de óbitos por UF de Ocorrência é uma tabela que mostra como a quantidade de óbitos (ou registros) está distribuída pelas UFs do país. O campo utilizado do conjunto de dados nesta visualização é "ocor_NOME_UF".

O gráfico Quantidade de Óbitos por Ano exibi como a quantidade de óbitos (ou registros) varia ao longo dos anos, o campo ilustrado possui o nome "ano_obito" na base de dados.

A visualização Quantidade de Filhos Vivos (Acima de 17 Filhos) é um gráfico de barras que utiliza a variável "QTDFILVIVO". Esta visualização mostra a quantidade de registros cujas mães possuiam mais de 17 filhos vivos. Cada barra representa um valor referente a uma quantidade de filhos vivos. São excluídos valores menores que '17' e iguais a '99'. Diversas mães existentes na base, possuem mais de 50 filhos vivos, segundo os dados. A visualização Quantidade de Filhos Mortos (Acima de 17 Filhos) é idêntica a anterior, mas para o caso de filhos mortos e a variável exposta é "QTDFILMORT".

O gráfico Idade da Mãe (Até 10 Anos) de barras horizontais expõe a variável 'IDADEMAE'. Nos dados, vemos diversas mães com idade de '0', '1', '2', '3', etc.

A visualização Sexo do Feto (Até a 11 Semana de Gestação) é também um gráfico de barras horizontais que são mostrados casos onde o sexo do feto foi determinado no período de:

  1. Até 3 semanas de gestação
  2. Da 3 até a 11 semanas de gestação

Existem muitos registros com sexo definido e menos de 3 semanas de gestação. As variáveis utilizadas nesta construção são "def_sexo" e "SEMAGESTAC".

O histograma Peso dos Fetos em Intervalos de 300g (Acima de 4800g) mostra a distribuição da variável "PESO" cada barra representa um intervalo de 300 gramas. É possível observar através dele a existência de muitos fetos com mais de 9000g.

Por fim, o mapa Óbitos Sem UF de Residência exibe o local de ocorrência dos registros que não possuem valor de "res_SIGLA_UF".

5. Dashboards

Os dados SIM-DOFET indexados possibilitam o desenvovimento de dashboards para a visualização simples, rápida e dinâmica de grandes quantidades de dados. Os dashboards desenvolvidos estão disponíveis para visualização na PCDaS na seção de Análise visual.

6. Créditos

Laboratório Nacional de Computação Científica (LNCC)

Plataforma de Ciência de Dados aplicada à Saúde (PCDaS)

Instituto de Comunicação e Informação Científica e Tecnológica em Saúde (ICICT)

Fundação Oswaldo Cruz (Fiocruz)

Sistema Único de Saúde (SUS)