Python

Tutorial para obter o CNES no Python 3 de forma automática

Escrito por Erick Faria · 23 min. >
dados de carga horária do cnes no python

O Cadastro Nacional de Estabelecimento de Saúde (CNES) é um registro administrativo que contém informações de recursos Humanos em saúde do Brasil. É o registro mais completo que existe sobre os recursos humanos e físicos na saúde pública brasileira. Nesse post vou compartilhar com vocês um script que lê automaticamente os dados de carga horária do CNES no python.

O Cadastro Nacional de Estabelecimentos de Saúde

O CNES é a melhor fonte para estudos de força de trabalho e sobre a infraestrutura pública de saúde no Brasil. O CNES é composto por várias tabelas e é preenchido pelos municípios ou pelos estabelecimentos. Todos os estabelecimentos de saúde precisam ter um número de CNES, é o identificador único do estabelecimento e nele contém as informações sobre o estabelecimento e os recursos humanos.

O CNES é muito utilizado em pesquisas na área da saúde. Muitos pesquisadores utilizam o CNES para diversas finalidades e geralmente encontram dificuldades para trabalhar com o CNES no python. Aqui no blog eu já publiquei artigos em que o CNES era a fonte das informações. Veja aqui um estudo que publiquei mostrando a distribuição espacial dos estabelecimentos de saúde em Belo Horizonte.

Após anos de experiência com o CNES eu resolvi compartilhar esse tutorial para ajudar as pessoas que desejam seguir nessa linha de pesquisa a automatizar a aquisição e o tratamento do CNES no Python. Esse tutorial faz a aquisição dos dados públicos, por meio do repositório oficial que você pode adquirir aqui: download do CNES

Além dos dados que citei no parágrafo anterior eu utilizei os dicionários e a documentação oficial que pode ser obtida por aqui: Documentação do CNES. Para a criação das labels e identificação dos profissionais de saúde foi utilizado a tabela de CBO. Os dados do CNES podem ser adquiridos por todas as pessoas. Esse tutorial é um facilitador para a aquisição e tratamento desses dados do CNES no python.

É importante ressaltar que esse tutorial faz apenas o uso dos dados e documentos públicos, divulgados pelo Ministério da Saúde do Brasil. A finalidade é compartilhar o código para a aquisição e transformação dos dados e rótulos utilizando a documentação oficial citada. As possíveis inconsistências ou erro nos dados, assim como questões relacionadas a privacidade dos dados, devem ser endereçados ao Ministério da Saúde do Brasil.

Como executar esse tutorial

Esse tutorial foi escrito na linguagem python e utilizou a plataforma Google Colab. Os dados utilizados são do Cadastro Nacional de Estabelecimentos de Saúde (CNES) que podem ser adquiridos livremente no site do Datasus. Os dados são livres e abertos para todas as pessoas que desejam utilizar. Caso você tenha alguma dúvida em relação aos dados, entre em contato com o Ministério da Saúde do Brasil.

Para executar esse tutorial eu aconselho que você leia com atenção cada bloco de código e execute separadamente no seu ambiente python. Eu separei o código por blocos para facilitar a explicação e o passo a passo de como eu desenvolvi o código e como fiz para trabalhar com o CNES no Python.

Ambiente de execução desse tutorial

Esse tutorial foi desenvolvido utilizando o Google Colab. Todos os caminhos que estão escritos nesse tutorial foram feitos na plataforma do google. Se você deseja apenas copiar e colar esse tutorial, eu aconselho que faça no Colab, pois o código irá funcionar sem a necessidade de mudanças.

Se você preferir pode reutilizar esse contepudo na sua IDE de preferência. Apenas preste atenção em adaptações necessárias para você poder trabalhar com o CNES no Python.

Se você está iniciando no python e não conhece o Google Colab, veja esse vídeo a seguir onde ensino como dar os primeiros passos.

Passo a passo de como ler os dados de Carga Horária do CNES no Python

Para facilitar o uso desse tutorial eu separei em blocos de código e a respectiva explicação de cada bloco. Se você não está familiarizado(a) com o python, vou deixar duas dicas para você. A primeira é o livro de Fundamentos em Python: Guia completo para Iniciantes. Com esse livro você conseguirá dar os primeiros passos no python e aprenderá os fundamentos que serão necessários para executar esse tutorial.

A segunda dica são os conteúdos sobre a biblioteca Pandas, que estão disponívels nesse blog. O Pandas é utilizado em todo o momento nesse tutorial e sem um conhecimento prévio de pandas você terá muita dificuldade em executar os códigos.

Com esses tópicos acima você já terá a base necessária para entender os códigos presentes nesse tutorial e está pronto(a) para trabalhar com os dados do CNES no Python.

Importação das bibliotecas

O primeiro passo é fazer a importação das bibliotecas no python. Além dos pacotes conhecidos de ciência de dados como Pandas e Numpy, faremos a importação do pacote zipfile para descompactar os arquivos; datetime para lidarmos e trabalharmos com datas; ftplib para conseguirmos acessar os dados por meio do FTP do datasus.

import zipfile
import datetime
import pandas as pd
import numpy as np
from ftplib import FTP

Download dos dados do CNES por meio da FTP do Datasus

Para fazermos o download dos dados de carga horária do CNES no python, precisamos acertar os parâmetros de data que queremos. Nesse tutorial eu coloquei como automático sempre o mês anterior em relação ao mês que você executar o código.

O CNES geralmente demora de um a dois meses para ser disponibilizado, logo esteja atento(a) se o mês que você está procurando já está disponível.

# Balaio Científico - Carga horária do Cnes no Python

today = datetime.date.today()
first = today.replace(day=1)
last_month = first - datetime.timedelta(days=1)
month = last_month.strftime('%m')

Com os parâmetros definidos chegou o momento de fazer o download do CNES. A primeira variável com o nome de cnes é onde iremos definir o caminho do arquivo, com base no código anterior. As três próximas linhas serão para fazer a conexão com o FTP do datasus no caminho que definimos.

Após a conexão, iremos iniciar o download dos dados do CNES. Você verá na parte esquerda do seu Google Colab – caso vê esteja seguindo a minha sugestão – na aba de arquivos, o arquivo compactado do CNES. isso significa que você fez o download com sucesso.

# Balaio Científico - Carga horária do Cnes no Python

# Seleciona o caminho do banco do CNES do último mês
cnes = f'BASE_DE_DADOS_CNES_{last_month.year}{month}.zip'

ftp = FTP(f'ftp.datasus.gov.br') # Faz a conexão com o FTP do datasus
ftp.login() # Login sem necessidade de usuário e senha
ftp.cwd('cnes') #Diretório para os arquivos do CNES

# Download dos dados
with open(f'{cnes}', 'wb') as fp:
  ftp.retrbinary(f'RETR {cnes}', fp.write)

ftp.quit() # Fecha a conexão com o FTP

Quando você executar o comando acima, você verá uma tela parecida com essa abaixo. No canto esquerdo destacado em verde você verá o arquivo sendo salvo e a célula do código em execução. Aguarde até a célula concluir a execução e você terá os dados do CNES no Python.

Captura de tela do download dos dados do CNES. Esse processo pode demorar um pouco, aguarde alguns minutos até que você possa ver o CNES no Python
Cnes no Python – Download dos dados

Se você encontrar o erro que o CNES não foi encontrado, verifique no FTP do Datasus (ftp.datasus.gov.br) se o dado do CNES que você está procurando já está disponível. Geralmente o Datasus demora um mês para disponibilizar o CNES, mas atrasos podem ocorrer.

Esse processo pode demorar um pouco, pois depende de alguns fatores como a qualidade da conexão e o tamanho do arquivo do CNES. Em meus testes, quando estava escrevendo esse tutorial, demorou cerca de 20 minutos para ter os dados do CNES no Python.

Extração dos Arquivos

Após o download, nós precisamos fazer a extração dos arquivos do CNES. O CNES é composto por várias tabelas e cada uma delas contém uma informação específicia. como nesse tutorial estamos nos concentrando nos dados de carga horária do cnes no python, precisamos extrair essa tabela.

Se você estiver no Google Cloab, basta copiar e colar a célula abaixo que a extração acontecerá de forma automática. Caso contrário você precisa mudar: f'/content/{cnes}', 'r' e '/content/' para o diretório em que você deseja trabalhar.

# Balaio Científico - Carga horária do CNES no Python

with zipfile.ZipFile(f'/content/{cnes}', 'r') as zip_ref:
    zip_ref.extractall('/content/')

Ao executar o comando acima você verá que todas as tabelas irão aparecer na parte esqueda do seu Google Colab. Caso você não esteja vendo todos os arquivos, atualize clicando no botão indicado na seta verde.

Nessa imagem você poderá ver todas das tabelas do CNES no Python. Todos os arquivos foram salvos na máquina virtual do google Colab
Todas as tabelas do CNES no Python

Leitura da tabela de carga horária do CNES no Python

Após a extração dos arquivos você verá uma série de tabelas no formato CSV na área de arquivos do Google Colab ou na pasta que você destinou. Se você precisar de ajuda, confere meu vídeo em que ensino como Importar dados no Python usando o pandas.

Cada tabela dessa é destinada a uma finalidade e contém informações de uma dimensão sobre os estabelecimentos de saúde do Brasil.

Nós vamos ler apenas a tabela de Carga Horária do SUS. Essa tabela no CNES está com o nome de tbCargaHorariaSus. É nessa tabela que encontramos informações acerca dos Recursos Humanos e da Força de Trabalho no SUS.

# Balaio Científico - Carga horária do CNES no Python

cnes = pd.read_csv(f'tbCargaHorariaSus{last_month.year}{last_month.month}.csv', sep=';'encoding='latin-1')

Após executar o comando acima você terá feito a importação dos dados do CNES no Python. Eu recomendo que agora você faça um check nos dados para verificar a importação. Aqui no Balaio Científico eu tenho um post que ensina como fazer análise de Estatística Descritiva no Python. Visite esse post caso você queira conhecer mais.

Limpeza dos dados do CNES

Com a importação feita nós precisamos fazer uma limpeza nos dados do CNES. Além de ser uma ação rotineira a limpeza dos dados do CNES é necessária, pois possuem muitos erros. Por ser um registro administrativo preenchido por diversas pessoas pelo país, é comum encontrarmos dados inconsistentes, dados duplicados, etc.

Os problemas presentes no CNES não invalidam o seu uso e não diminui a importância do CNES. Entretanto, é importante que façamos essa etapa para removermos o máximo de incoerências em nossas análises.

O primeiro passo é removermos os casos duplicados. Eu não sei porque, mas é comum encontrarmos muitos casos duplicados no CNES. Se você olhar a fundo é possível encontrar o mesmo profissional de saúde duas vezes no conjunto de dados. Para evitar de contar o mesmo profissional duas vezes, precisamos remover os casos que duplicam.

# Balaio Científico - Carga horária do CNES no Python
# Remove as linhas que todos os casos estão duplicados
cnes.drop_duplicates(inplace=True)

Veja no código abaixo que eu selecionei apenas algumas colunas de interesse, como: num_unidade, cod_cbo e qtd_ch_ambulatorial. Eu selecionei apenas essas colunas, pois são apenas elas que interessam para meu estudo de Carga horária de profissionais de saúde pública no Brasil.

cnes = cnes.loc[:,['CO_UNIDADE', 'CO_CBO', 'QT_CARGA_HORARIA_AMBULATORIAL']]

cnes = cnes.rename({'CO_UNIDADE':'num_unidade',
             'CO_CBO':'cod_cbo',
             'QT_CARGA_HORARIA_AMBULATORIAL':'qtd_ch_ambulatorial'},axis=1)

Execute o comando cnes.head() para ter uma visualização das primeiras linhas do CNES no Python. Assim você poderá visualizar se a importação dos dados foi feito corretamente.

Agora nós vamos colocar os casos de Carga Horária faltante como 0. Casos omissos ou faltantes em programação nós chamamos de Missing. No CNES alguns profissionais vem sem a quantidade de carga horária, o que é um valor incoerente, pois se essa pessoa está no conjunto de dados do CNES essa pessoa deveria ter suas horas registradas.

Por uma decisão metodológica, no estudo que criei esse script eu defini os valores missing da carga horária como 0. Você pode ignorar essa parte caso prefira fazer diferente.

# Balaio Científico - Carga horária do CNES no Python
# Filtra os casos Missing de Carga Horária Ambulatorial
cnes.fillna({'qtd_ch_ambulatorial':0}, inplace=True)

Após a mudança dos valores missing para 0 nós podemos transformar a variável de carga horária ambulatorial para Integer. Essa também é uma decisão metogológica minha, pois poderiamos deixar como float. como no CNES a carga horária é padronizada como números inteiros, eu optei por transformar a variável como integer.

# Transforma a Variável de Carga Horária Ambulatorial em Integer
cnes['qtd_ch_ambulatorial'] = cnes['qtd_ch_ambulatorial'].astype('int64')

Transformações nas CBOs dos profissionais do CNES

Agora chegou a hora de fazermos mudanças na variável de CBO. A CBO é um código que nos permite identificar qual o nome da profissão que está no CNES. Se você deseja conhecer mais sobre a CBO visite o site do Ministério do Trabalho do Brasil.

O primeiro passo é fazer a transformação de algumas CBOs que eventualmente podem estar em um formato antigo para o formato mais recente. Apesar do CNES ser atualizado mensalmente e a pessoa responsável precisar atualizar a CBO, caso tenha alguma atualização. É possível encontrar alguma CBO desatualizada. Para isso vamos utilizar o comando replace().

# Balaio Científico - Carga horária do CNES no Python
# Transforma códigos que possuem letra em número
cnes.cod_cbo.replace({
'1312C1':131220,'2231A1':223158,'2231A2':223159,'2231F3':225203,
'2231F4':225122,'2231F5':225290,'2231F6':225121,'2231F7':225130,
'223116':225130,'2231F8':223165,'2231F9':223166,'2231G1':223167,
'2232B1':223293,'2235C1':223565,'2235C2':223565,'2235C3':223565,
'2241E1':224140,'2236I1':223665,'3135D1':313510,'3135D2':324190,
'3222B3':515135,'3222E1':322245,'3222E2':322250,'3222E3':322255,
'3224F1':322425,'3224F2':322430,'3522G1':515125,'3522G2':515130,
'5151H1':516220,'5151F1':515140,'5152A1':515290,'1999A1':999999,
'225190':225340,'1999A2':999999}, inplace=True)

Agora com todas as CBOs em formato numérico nós podemos transformar a variável para o tipo numérico inteiro.

# Balaio Científico - Carga horária do CNES no Python
cnes['cod_cbo'] = cnes['cod_cbo'].astype('int64')

Algumas pessoas preenchem incorretamente ou não sabem a CBO do profissional de saúde. Podem haver casos que uma determinada profissão/ocupação não tem um CBO definido ainda. Nesses casos no CNES você encontrará CBO como 999999. No código abaixo nós vamos definir esse CBO como missing.

# Balaio Científico - Carga horária do CNES no Python
cnes.fillna({'cod_cbo':999999}, inplace=True)

Agora que fizemos a limpeza prévia de todas as CBOs, vamos definir as labels de cada código de CBO. Como estamos tratando com dados de carga horária do CNES no python, nós precisamos identificar quem são os profissionais por meio da CBO.

Esse processo vai nos permitir criar uma variável com o nome dos profissionais de saúde. Essa lista que está disponível a seguir você pode consultar na relação de CBO do Ministério do Trabalho. Eu utilizei a CBO mais recente, versão 2002.

# Balaio Científico - Carga horária do CNES no Python
# Nomeia as labels
cnes['cod_cbo_label'] = cnes.cod_cbo.map({
131205:'Diretor de serviços de saúde',
131210:'Gerente de serviços de saúde',
131215:'Tecnólogo em gestão hospitalar',
131220:'Gerontólogo',
142710:'Tecnólogo em sistemas biomédicos',
203005:'Pesquisador em Biologia Ambiental',
203010:'Pesquisador em Biologia Animal',
203015:'Pesquisador em Biologia de microorganismos e parasitas',
203020:'Pesquisador em Biologia Humana',
203025:'Pesquisador em Biologia Vegetal',
203305:'Pesquisador de clínica médica',
203310:'Pesquisador de medicina básica',
203315:'Pesquisador em medicina veterinária',
203320:'Pesquisador em saúde coletiva',
213150:'Físico (medicina)',
221105:'Biólogo',
221205:'Biomédico',
223101:'Médico acupunturista',
223102:'Médico alergista e imunologista',
223103:'Médico anatomopatologista',
223104:'Médico anestesiologista',
223105:'Médico angiologista',
223106:'Médico cardiologista',
223107:'Médico cirurgião cardiovascular',
223108:'Médico cirurgião de cabeça e pescoço',
223109:'Médico cirurgião do aparelho digestivo',
223110:'Médico cirurgião geral',
223111:'Médico cirurgião pediátrico',
223112:'Médico cirurgião plástico',
223113:'Médico cirurgião torácico',
223114:'Médico citopatologista',
223115:'Médico clínico',
223116:'Médico de família e comunidade',
223117:'Médico dermatologista',
223118:'Médico do trabalho',
223119:'Médico em eletroencefalografia',
223120:'Médico em endoscopia',
223121:'Médico em medicina de tráfego',
223122:'Médico em medicina intensiva',
223123:'Médico em medicina nuclear',
223124:'Médico em radiologia e diagnóstico por imagem',
223125:'Médico endocrinologista e metabologista',
223126:'Médico fisiatra',
223127:'Médico foniatra',
223128:'Médico gastroenterologista',
223129:'Médico generalista',
223130:'Médico geneticista',
223131:'Médico geriatra',
223132:'Médico ginecologista e obstetra',
223133:'Médico hematologista',
223134:'Médico hemoterapeuta',
223135:'Médico homeopata',
223136:'Médico infectologista',
223137:'Médico legista',
223138:'Médico mastologista',
223139:'Médico nefrologista',
223140:'Médico neurocirurgião',
223141:'Médico neurofisiologista clínico',
223142:'Médico neurologista',
223143:'Médico nutrologista',
223144:'Médico oftalmologista',
223145:'Médico oncologista clínico',
223146:'Médico ortopedista e traumatologista',
223147:'Médico otorrinolaringologista',
223148:'Médico patologista',
223149:'Médico pediatra',
223150:'Médico perito',
223151:'Médico pneumologista',
223152:'Médico coloproctologista',
223153:'Médico psiquiatra',
223154:'Médico radioterapeuta',
223155:'Médico reumatologista',
223156:'Médico sanitarista',
223157:'Médico urologista',
223158:'Médico broncoesofalogista',
223159:'Médico hansenologista',
223160:'Médico em cirurgia vascular',
223161:'Médico cancerologista pediátrico',
223162:'Médico da estratégia de saúde da família',
223163:'Médicocancerologista clínico',
223164:'Médico da estratégia de saúde da família',
223165:'Médico em medicina preventiva e social',
223166:'Médico residente',
223167:'Médico cardiologista intervencionista',
223204:'Cirurgião dentista - auditor',
223208:'Cirurgião dentista - clínico geral',
223212:'Cirurgião dentista - endodontista',
223216:'Cirurgião dentista - epidemiologista',
223220:'Cirurgião dentista - estomatologista',
223224:'Cirurgião dentista - implantodontista',
223228:'Cirurgião dentista - odontogeriatra',
223232:'Cirurgião dentista - odontologista legal',
223236:'Cirurgião dentista - odontopediatra',
223240:'Cirurgião dentista - ortopedista e ortodontista',
223244:'Cirurgião dentista - patologista bucal',
223248:'Cirurgião dentista - periodontista',
223252:'Cirurgião dentista - protesiólogo bucomaxilofacial',
223256:'Cirurgião dentista - protesista',
223260:'Cirurgião dentista - radiologista',
223264:'Cirurgião dentista - reabilitador oral',
223268:'Cirurgião dentista - traumatologista bucomaxilofacial',
223272:'Cirurgião dentista de saúde coletiva',
223276:'Cirurgião-dentista - odontologia do trabalho ',
223280:'Cirurgião-dentista - dentística ',
223284:'Cirurgião-dentista - disfunção temporomandibular e dor orofacial ',
223288:'Cirurgião-dentista - odontologia para pacientes com necessidades especiais ',
223293:'Cirurgião-dentista da Estratégia de Saúde da Família',
223305:'Médico veterinário',
223310:'Zootecnista',
223405:'Farmacêutico',
223410:'Farmacêutico bioquímico',
223415:'Farmacêutico analista clínico ',
223420:'Farmacêutico de alimentos ',
223425:'Farmacêutico práticas integrativas e complementares ',
223430:'Farmacêutico em saúde pública ',
223435:'Farmacêutico industrial ',
223440:'Farmacêutico toxicologista ',
223445:'Farmacêutico hospitalar e clínico ', 
223505:'Enfermeiro',
223510:'Enfermeiro auditor',
223515:'Enfermeiro de bordo',
223520:'Enfermeiro de centro cirúrgico',
223525:'Enfermeiro de terapia intensiva',
223530:'Enfermeiro do trabalho',
223535:'Enfermeiro nefrologista',
223540:'Enfermeiro neonatologista',
223545:'Enfermeiro obstétrico',
223550:'Enfermeiro psiquiátrico',
223555:'Enfermeiro puericultor e pediátrico',
223560:'Enfermeiro sanitarista',
223565:'Enfermeiro da Estratégia de Saúde da Família',
223570:'Perfusionista',
223605:'Fisioterapeuta geral',
223625:'Fisioterapeuta respiratória',
223630:'Fisioterapeuta neurofuncional',
223635:'Fisioterapeuta traumato-ortopédica funcional',
223640:'Fisioterapeuta osteopata',
223645:'Fisioterapeuta quiropraxistas',
223650:'Fisioterapeuta acupunturista',
223655:'Fisioterapeuta esportivo',
223660:'Fisioterapeuta do trabalho',
223665:'Técnico em orientação e mobilidade de cegos e deficientes visuais ',
223705:'Dietista',
223710:'Nutricionista',
223810:'Fonoaudiólogo',
223815:'Fonoaudiólogo educacional',
223820:'Fonoaudiólogo em audiologia ',
223825:'Fonoaudiólogo em disfagia ',
223830:'Fonoaudiólogo em linguagem ',
223835:'Fonoaudiólogo em motricidade orofacial ', 
223840:'Fonoaudiólogo em saúde coletiva ',
223845:'Fonoaudiólogo em voz ',
223905:'Terapeuta ocupacional',
223910:'Ortoptista',
223915:'Musicoterapeuta(Antigo)',
224105:'Avaliador Físico',
224110:'Ludomotricista',
224115:'Preparador de atleta',
224120:'Preparador físico',
224125:'Técnico de desporto individual e coletivo (exceto futebol)',
224130:'Técnico de laboratório e fiscalização desportiva',
224135:'Treinador profissional de futebol',
224140:'Profissional da educação física na saúde ',
225103:'Médico infectologista',
225105:'Médico acupunturista',
225106:'Médico legista',
225109:'Médico nefrologista',
225110:'Médico alergista e imunologista',
225112:'Médico neurologista',
225115:'Médico angiologista',
225118:'Médico nutrologista',
225120:'Médico cardiologista',
225121:'Médico oncologista clínico',
225122:'Médico cancerologista pediátrico',
225124:'Médico pediatra',
225125:'Médico clínico',
225127:'Médico pneumologista',
225130:'Médico de família e comunidade',
225133:'Médico psiquiatra',
225135:'Médico dermatologista',
225136:'Médico reumatologista',
225139:'Médico sanitarista',
225140:'Médico do trabalho',
225142:'Médico da estratégia de saúde da família',
225145:'Médico em medicina de tráfego',
225148:'Médico anatomopatologista',
225150:'Médico em medicina intensiva',
225151:'Médico anestesiologista',
225155:'Médico endocrinologista e metabologista',
225160:'Médico fisiatra',
225165:'Médico gastroenterologista',
225170:'Médico generalista',
225175:'Médico geneticista',
225180:'Médico geriatra',
225185:'Médico hematologista',
225195:'Médico homeopata',
225203:'Médico em cirurgia vascular',
225210:'Médico cirurgião cardiovascular',
225215:'Médico cirurgião de cabeça e pescoço',
225220:'Médico cirurgião do aparelho digestivo',
225225:'Médico cirurgião geral',
225230:'Médico cirurgião pediátrico',
225235:'Médico cirurgião plástico',
225240:'Médico cirurgião torácico',
225245:'Médico foniatra',
225250:'Médico ginecologista e obstetra',
225255:'Médico mastologista',
225260:'Médico neurocirurgião',
225265:'Médico oftalmologista',
225270:'Médico ortopedista e traumatologista',
225275:'Médico otorrinolaringologista',
225280:'Médico coloproctologista',
225285:'Médico urologista',
225290:'Médico cancerologista cirúrgico',
225295:'Médico cirurgião da mão',
225305:'Médico citopatologista',
225310:'Médico em endoscopia',
225315:'Médico em medicina nuclear',
225320:'Médico em radiologia e diagnóstico por imagem',
225325:'Médico patologista',
225330:'Médico radioterapeuta',
225335:'Médico patologista clínico - medicina laboratorial',
225340:'Médico hemoterapeuta',
225345:'Médico hiperbarista',
225350:'Médico neurofisiologista clínico',
226105:'Quiropraxista ',
226110:'Osteopata ',
226305:'Musicoterapeuta ',
226310:'Arteterapeuta ',
226315:'Equoterapeuta ',
226320:'Naturólogo ',
231315:'Professor de educação física no ensino fundamental',
232110:'Professor de biologia no ensino médio',
232120:'Professor de educação física no ensino médio',
233135:'Professor de técnicas de enfermagem',
234405:'Professor de ciências biológicas no ensino superior',
234410:'Professor de educação física no ensino superior',
234415:'Professor de enfermagem do ensino superior',
234420:'Professor de farmácia e bioquímica',
234425:'Professor de fisioterapia',
234430:'Professor de fonoaudiologia',
234435:'Professor de medicina',
234440:'Professor de medicina veterinária',
234445:'Professor de nutrição',
234450:'Professor de odontologia',
234455:'Professor de terapia ocupacional',
234460:'Professor de zootecnia do ensino superior',
251505:'Psicólogo educacional ',
251510:'Psicólogo clínico',
251515:'Psicólogo do esporte',
251520:'Psicólogo hospitalar',
251525:'Psicólogo jurídico',
251530:'Psicólogo social',
251535:'Psicólogo do trânsito',
251540:'Psicólogo do trabalho',
251545:'Neuropsicólogo',
251550:'Psicanalista',
251555:'Psicólogo acupunturista',
251605:'Assistente social ',
322105:'Técnico em acupuntura',
322110:'Podólogo',
322115:'Técnico em quiropraxia',
322120:'Massoterapeuta',
322125:'Terapeuta holístico',
322130:'Esteticista',
322135:'Doula ',
322205:'Técnico de enfermagem',
322210:'Técnico de enfermagem de terapia intensiva',
322215:'Técnico de enfermagem do trabalho',
322220:'Técnico de enfermagem psiquiátrica',
322225:'Instrumentador cirúrgico',
322230:'Auxiliar de enfermagem',
322235:'Auxiliar de enfermagem do trabalho',
322240:'Auxiliar de saúde (navegação marítima) ',
322245:'Técnico de enfermagem da Estratégia de Saúde da Família',
322250:'Auxiliar de enfermagem da Estratégia de Saúde da Família',
322255:'(Antigo) Perfusionista ',
322305:'Técnico em óptica e optometria',
322405:'Técnico em saúde bucal',
322410:'Protético dentário',
322415:'Auxiliar em saúde bucal',
322420:'Auxiliar de Prótese Dentária',
322425:'Técnico em saúde bucal da Estratégia de Saúde da Família',
322430:'Auxiliar em saúde bucal da Estratégia de Saúde da Família',
322505:'Técnico de ortopedia',
322605:'Técnico de imobilização ortopédica',
324105:'Técnico em métodos eletrográficos em encefalografia',
324110:'Técnico em métodos gráficos em cardiologia',
324115:'Técnico em radiologia e imagenologia',
324120:'Tecnólogo em radiologia',
324125:'Tecnólogo oftálmico ',
324190:'Técnico em equipamento médico hospitalar',
324205:'Técnico em patologia clínica',
324210:'Auxiliar técnico em patologia clínica',
325105:'Auxiliar técnico em laboratório de farmácia',
325110:'Técnico em laboratório de farmácia',
325115:'Técnico em farmácia',
325210:'Técnico em nutrição e dietética',
325305:'Técnico em biotecnologia',
325310:'Técnico em imunobiológicos',
351605:'Técnico em segurança do trabalho ',
351610:'Técnico em higiene ocupacional ',
352210:'Agente de saúde pública',
422110:'Recepcionista de consultório médico ou dentário',
422115:'Recepcionista de seguro de saúde',
515105:'Agente comunitário de saúde',
515110:'Atendente de enfermagem',
515115:'Parteira leiga',
515120:'Visitador sanitário',
515125:'Agente de saúde indígena',
515130:'Agente indígena de saneamento',
515135:'Socorrista (exceto médicos e enfermeiros)',
515140:'Agente de combate a endemias',
515205:'Auxiliar de banco de sangue',
515210:'Auxiliar de farmácia de manipulação',
515215:'Auxiliar de laboratório de análises clínicas',
515220:'Auxiliar de laboratório de imunobiológicos',
515225:'Auxiliar de produção farmacêutica',
515290:'Microscopista',
516210:'Cuidador de idosos',
516220:'Cuidador em saúde',
521130:'Atendente de farmácia – balconista',
810305:'Mestre de produção farmacêutica',
915305:'Técnico em manutenção de equipamentos e instrumentos médico-hospitalares'})

Agora você estará vendo uma variável do tipo texto com o nome de todos os(as) profissionais de saúde do CNES. Essa variável será valiosa para análises, pois permitirá maior facilidade e legibilidade. Cada linha no CNES representa um vínculo profissional. O que acabamos de fazer acima é definir uma nova variável com o nome dos profissionais baseado na variável CBO. Ao executar o bloco de código acima, seu CNES estará semelhante a imagem abaixo.

Dados do CNES no Python com a coluna dos profissionais de saúde

Agora vamos criar outra variável com foco nos profissionais da atenção básica em saúde. Essa variável irá te dar a relação de apenas profissionais que atuam diretamente na saúde e irá desconsiderar demais profissionais que podem estar no CNES, tais como: técnicos em segurança do trabalho, técnicos de limpeza, etc.

Esse filtro é para facilitar o trabalho de profissionais por categoria. Para isso nós pegamos o conjunto de uma determinada CBO e agrupamos em um código, criando assim uma variável categória. Veja nesse exemplo: (cnes['cod_cbo'] >= 223101) & (cnes['cod_cbo'] <= 223199). No exemplo nós pegamos todas as CBOs que estão entre 223101 e 223199 e agrupamos na categoria 1 que se refere aos médicos.

# Balaio Científico - Carga horária do CNES no Python
# Define as ocupações da saúde pelo CBO ANTIGO.
# Altera o código da categoria "outros" de 45 para 99.
cnes['cod_cbo_saude'] = np.select([
(cnes['cod_cbo'] >= 223101) & (cnes['cod_cbo'] <= 223199),
(cnes['cod_cbo'] >= 223201) & (cnes['cod_cbo'] <= 223299),
(cnes['cod_cbo'] >= 223301) & (cnes['cod_cbo'] <= 223399),
(cnes['cod_cbo'] >= 223401) & (cnes['cod_cbo'] <= 223499),
(cnes['cod_cbo'] >= 223501) & (cnes['cod_cbo'] <= 223599),
(cnes['cod_cbo'] == 223605),
(cnes['cod_cbo'] >= 223701) & (cnes['cod_cbo'] <= 223799),
(cnes['cod_cbo'] == 223610),
(cnes['cod_cbo'] == 223620),
(cnes['cod_cbo'] >= 224101) & (cnes['cod_cbo'] <= 224199),
(cnes['cod_cbo'] == 221105),
(cnes['cod_cbo'] == 221205),
(cnes['cod_cbo'] >= 251501) & (cnes['cod_cbo'] <= 251599),
(cnes['cod_cbo'] >= 251601) & (cnes['cod_cbo'] <= 251699),
(cnes['cod_cbo'] == 324120),
(cnes['cod_cbo'] == 131215),
(cnes['cod_cbo'] == 142710),
(cnes['cod_cbo'] >= 203005) & (cnes['cod_cbo'] <= 203025),
(cnes['cod_cbo'] >= 203305) & (cnes['cod_cbo'] <= 203320),
(cnes['cod_cbo'] == 231315),
(cnes['cod_cbo'] == 232110),
(cnes['cod_cbo'] == 232120),
(cnes['cod_cbo'] == 233135),
(cnes['cod_cbo'] >= 234405) & (cnes['cod_cbo'] <= 234460),
(cnes['cod_cbo'] == 213150),
(cnes['cod_cbo'] >= 131205) & (cnes['cod_cbo'] <= 131220),
(cnes['cod_cbo'] >= 322205) & (cnes['cod_cbo'] <= 322245),
(cnes['cod_cbo'] == 322245),
(cnes['cod_cbo'] >= 322230) & (cnes['cod_cbo'] <= 322240),
(cnes['cod_cbo'] == 322250),
(cnes['cod_cbo'] == 515110),
(cnes['cod_cbo'] == 322405),
(cnes['cod_cbo'] == 322425),
(cnes['cod_cbo'] == 322415),
(cnes['cod_cbo'] == 322430),
(cnes['cod_cbo'] == 322410),
(cnes['cod_cbo'] == 322420),
(cnes['cod_cbo'] >= 322101) & (cnes['cod_cbo'] <= 322199),
(cnes['cod_cbo'] >= 322301) & (cnes['cod_cbo'] <= 322399),
(cnes['cod_cbo'] >= 322501) & (cnes['cod_cbo'] <= 322599),
(cnes['cod_cbo'] >= 322601) & (cnes['cod_cbo'] <= 322699),
(cnes['cod_cbo'] >= 324105) & (cnes['cod_cbo'] <= 324115),
(cnes['cod_cbo'] >= 324201) & (cnes['cod_cbo'] <= 324299),
(cnes['cod_cbo'] >= 325101) & (cnes['cod_cbo'] <= 325199),
(cnes['cod_cbo'] >= 325301) & (cnes['cod_cbo'] <= 325399),
(cnes['cod_cbo'] >= 351601) & (cnes['cod_cbo'] <= 351699),
(cnes['cod_cbo'] == 915305),
(cnes['cod_cbo'] == 515105),
(cnes['cod_cbo'] == 352210),
(cnes['cod_cbo'] >= 515115) & (cnes['cod_cbo'] <= 515135),
(cnes['cod_cbo'] >= 515201) & (cnes['cod_cbo'] <= 515299),
(cnes['cod_cbo'] == 516210),
(cnes['cod_cbo'] == 516220),
(cnes['cod_cbo'] == 422110),
(cnes['cod_cbo'] == 422115),
(cnes['cod_cbo'] == 521130),
(cnes['cod_cbo'] == 810305),
(cnes['cod_cbo'] == 223615),
(cnes['cod_cbo'] >= 225103) & (cnes['cod_cbo'] <= 225195),
(cnes['cod_cbo'] >= 225203) & (cnes['cod_cbo'] <= 225295),
(cnes['cod_cbo'] >= 225305) & (cnes['cod_cbo'] <= 225350),
(cnes['cod_cbo'] >= 223204) & (cnes['cod_cbo'] <= 223293),
(cnes['cod_cbo'] >= 223305) & (cnes['cod_cbo'] <= 223310),
(cnes['cod_cbo'] >= 223405) & (cnes['cod_cbo'] <= 223410),
(cnes['cod_cbo'] >= 223505) & (cnes['cod_cbo'] <= 223570),
(cnes['cod_cbo'] == 223605),
(cnes['cod_cbo'] >= 223625) & (cnes['cod_cbo'] <= 223665),
(cnes['cod_cbo'] >= 223705) & (cnes['cod_cbo'] <= 223710),
(cnes['cod_cbo'] >= 223810) & (cnes['cod_cbo'] <= 223845),
(cnes['cod_cbo'] == 223905),
(cnes['cod_cbo'] >= 224105) & (cnes['cod_cbo'] <= 224140),
(cnes['cod_cbo'] == 221105),
(cnes['cod_cbo'] == 221205),
(cnes['cod_cbo'] >= 251505) & (cnes['cod_cbo'] <= 251555),
(cnes['cod_cbo'] == 251605),
(cnes['cod_cbo'] == 324120),
(cnes['cod_cbo'] == 131215),
(cnes['cod_cbo'] == 142710),
(cnes['cod_cbo'] >= 203005) & (cnes['cod_cbo'] <= 203025),
(cnes['cod_cbo'] >= 203305) & (cnes['cod_cbo'] <= 203320),
(cnes['cod_cbo'] == 231315),
(cnes['cod_cbo'] == 232110),
(cnes['cod_cbo'] == 232120),
(cnes['cod_cbo'] == 233135),
(cnes['cod_cbo'] >= 234405) & (cnes['cod_cbo'] <= 234460),
(cnes['cod_cbo'] == 213150),
(cnes['cod_cbo'] >= 131205) & (cnes['cod_cbo'] <= 131210),
(cnes['cod_cbo'] >= 322205) & (cnes['cod_cbo'] <= 322225),
(cnes['cod_cbo'] == 322245),
(cnes['cod_cbo'] >= 322230) & (cnes['cod_cbo'] <= 322240),
(cnes['cod_cbo'] == 322250),
(cnes['cod_cbo'] == 322255),
(cnes['cod_cbo'] == 515110),
(cnes['cod_cbo'] == 322405),
(cnes['cod_cbo'] == 322425),
(cnes['cod_cbo'] == 322415),
(cnes['cod_cbo'] == 322430),
(cnes['cod_cbo'] == 322410),
(cnes['cod_cbo'] == 322420),
(cnes['cod_cbo'] >= 322105) & (cnes['cod_cbo'] <= 322135),
(cnes['cod_cbo'] == 322305),
(cnes['cod_cbo'] == 322505),
(cnes['cod_cbo'] == 322605),
(cnes['cod_cbo'] >= 324105) & (cnes['cod_cbo'] <= 324115),
(cnes['cod_cbo'] >= 324205) & (cnes['cod_cbo'] <= 324220),
(cnes['cod_cbo'] >= 325105) & (cnes['cod_cbo'] <= 325115),
(cnes['cod_cbo'] >= 325305) & (cnes['cod_cbo'] <= 325310),
(cnes['cod_cbo'] >= 351605) & (cnes['cod_cbo'] <= 351610),
(cnes['cod_cbo'] == 915305),
(cnes['cod_cbo'] == 515105),
(cnes['cod_cbo'] == 352210),
(cnes['cod_cbo'] >= 515115) & (cnes['cod_cbo'] <= 515135),
(cnes['cod_cbo'] >= 515205) & (cnes['cod_cbo'] <= 515225),
(cnes['cod_cbo'] == 516210),
(cnes['cod_cbo'] == 516220),
(cnes['cod_cbo'] == 422110),
(cnes['cod_cbo'] == 422115),
(cnes['cod_cbo'] == 521130),
(cnes['cod_cbo'] == 810305),
(cnes['cod_cbo'] >= 226100) & (cnes['cod_cbo'] <= 226199),
(cnes['cod_cbo'] >= 226300) & (cnes['cod_cbo'] <= 226399),
(cnes['cod_cbo'] == 223915),
(cnes['cod_cbo'] == 515140),
(cnes['cod_cbo'] == 325210),
(cnes['cod_cbo'] == 223910),
(cnes['cod_cbo'] == 324125),
(cnes['cod_cbo'] == 131220)], 
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,17,17,17,17,17,
17,17,18,19,20,20,21,21,22,23,23,24,24,25,25,26,27,28,29,
30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,49,1,1,1,
2,3,4,5,6,6,7,8,9,10,11,12,13,14,15,16,16,17,17,17,17,17,
17,17,18,19,20,20,21,21,5,22,23,23,24,24,25,25,26,27,28,
29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,
46,47,48,49,50,51], default=99)

Após criar a variável categórica, chegou o momento de definirmos os rótulos. Isso irá facilitar a compreensão e o entendimento de qual categoria profissional estamos trabalhando.

# Balaio Científico - Carga horária do CNES no Python
#  Nomeia as categorias de CBO saúde.
cnes['cod_cbo_saude_label'] = cnes.cod_cbo_saude.map({
1:'Médicos',
2:'Cirurgiões-dentistas',
3:'Veterinários',
4:'Farmacêuticos',
5:'Enfermeiros',
6:'Fisioterapeuta',
7:'Nutricionistas',
8:'Fonoaudiólogos',
9:'Terapeutas Ocupacionais',
10:'Profissionais da Educação Física',
11:'Biólogos',
12:'Biomédicos',
13:'Psicólogos e psicanalistas',
14:'Assistentes sociais',
15:'Tecnólogos em Radiologia',
16:'Tecnólogos em gestão hospitalar e sistemas biomédicos',
17:'Pesquisadores e professores das ciências biológicas e das ciências da saúde',
18:'Físico médico',
19:'Diretores e gerentes de serviços de sáude',
20:'Técnicos de enfermagem',
21:'Auxiliares de enfermagem',
22:'Atendente de enfermagem',
23:'Técnicos em saúde bucal',
24:'Auxiliares de saúde bucal',
25:'Protéticos dentários e auxiliares de prótese dentária',
26:'Tecnólogos e Técnicos em terapias alternativas e estéticas',
27:'Técnicos em óptica e optometria',
28:'Técnicos em próteses ortopédicas',
29:'Técnicos de imobilização ortopédica',
30:'Técnicos em equipamentos médicos e odontológicos',
31:'Técnicos e auxiliares técnicos em patologia clínica',
32:'Técnicos em manipulação farmacêutica',
33:'Técnicos de apoio à biotecnologia',
34:'Técnicos em segurança no trabalho',
35:'Técnico em manutenção de equipamentos e instrumentos médico-hospitalares',
36:'Agentes Comunitários de Saúde',
37:'Trabalhadores em serviços de promoção e apoio à saúde (exceto ACS, ACE e Atendente de Enfermagem)',
38:'Auxiliares de laboratório da saúde',
39:'Cuidadores de idosos',
40:'Cuidadores em saúde',
41:'Recepcionistas de consultório médico ou dentário',
42:'Recepcionistas de seguro de saúde',
43:'Atendentes de farmácia – balconista',
44:'Mestres de Produção Farmacêutica',
45:'Osteopatas e quiropraxistas',
46:'Profissionais das terapias criativas, equoterápicas e naturológicas',
47:'Agentes de Combate a Endemias',
48:'Técnicos em nutrição e dietética',
49:'Ortoptistas',
50:'Tecnólogos oftálmicos',
51:'Gerontólogos',
99:'Outros - não saúde'})

Ao executar o comando acima, seu DataFrame estará parecido com esse da imagem abaixo. A essa altura do tutorial você tem os dados do estabelecimento do CNES, a CBO do profissional e informações categoricas a respeito do vínculo desse profissional.

Dados do Cnes no Python com as categorias dos profissionais e as agregações feitas
Dados do CNES no python com as agregações de categórias e rótulos

Identificando Especialidades Médicas no CNES

Agora que nós identificamos por meio da tabela de CBO os profissionais da saúde, chegou o momento de identificar os médicos especialistas. Para identificar esse grupo precisamos novamente recorrer a tabela de CBO e agregar os médicos especialistas.

# Balaio Científico - Carga horária do CNES no Python
# Cria variável de especialidades médicas.
cnes['cod_cbo_especialidades'] = cnes.cod_cbo.replace({
225130:29,223116:29,223162:29,223164:29,225142:29,223115:16,225125:16,223129:16,225170:16,223102:2,225110:2,
223105:4,225115:4,223106:6,225120:6,223145:5,223161:5,225122:5,225290:5,223163:5,225121:5,223117:18,225135:18,
223159:18,223125:19,225155:19,223128:21,225165:21,223131:23,225180:23,223136:27,225103:27,223122:34,225150:34,
223139:38,225109:38,223141:38,225350:38,223142:40,225112:40,223149:47,225124:47,223151:48,225127:48,223158:48,
223153:49,225133:49,223119:49,223155:52,225136:52,223107:7,225210:7,223167:7,223108:9,225215:9,225295:8,223109:10,
225220:10,223110:11,225225:11,223111:12,225230:12,225190:25,223112:13,225235:13,223113:14,225240:14,223160:15,
225203:15,223152:17,225280:17,223132:24,225250:24,223138:28,225255:28,223140:39,225260:39,223144:42,225265:42,
223146:43,225270:43,223147:44,225275:44,223127:44,225245:44,223157:53,225285:53,223104:3,225151:3,223133:25,
223134:25,225185:25,225340:25,223120:20,225310:20,223123:36,225315:36,223143:41,225118:41,223148:45,223103:45,
223114:45,225325:45,225148:45,225305:45,223124:50,225320:50,223154:51,225330:51,225335:46,223101:1,
225105:1,223135:26,225195:26,223130:22,225175:22,223137:35,223150:35,225106:35,223118:30,225140:30,223156:37,
225139:37,223165:37,223121:31,225145:31,223126:54,225160:54,223166:54,225345:54})

Após a criação das categorias de especialidades na etapa anterior, chegou o momento de criarmos as labels e darmos nomes aos códigos dos médicos especialistas.

# Balaio Científico - Carga horária do CNES no Python
# Cria a Label da variável de especialidades médicas
cnes['cod_cbo_especialidades_label'] = cnes.cod_cbo_especialidades.map({
1:'Acupuntura',
2:'Alergia e Imunologia',
3:'Anestesiologia',
4:'Angiologia',
5:'Cancerologia',
6:'Cardiologia',
7:'Cirurgia Cardiovascular',
8:'Cirurgia da Mão',
9:'Cirurgia de Cabeça e Pescoço',
10:'Cirurgia do Aparelho Digestivo',
11:'Cirurgia Geral',
12:'Cirurgia Pediátrica',
13:'Cirurgia Plástica',
14:'Cirurgia Torácica',
15:'Cirurgia Vascular',
16:'Clínica médica',
17:'Coloproctologia',
18:'Dermatologia',
19:'Endocrinologia e Metabologia',
20:'Endoscopia',
21:'Gastroenterologia',
22:'Genética Médica',
23:'Geriatria',
24:'Ginecologia e Obstetrícia',
25:'Hematologia e Hemoterapia',
26:'Homeopatia',
27:'Infectologia',
28:'Mastologia',
29:'Medicina de Família e Comunidade',
30:'Medicina do Trabalho',
31:'Medicina do Tráfego',
34:'Medicina Intensiva',
35:'Medicina Legal e Perícia Médica',
36:'Medicina Nuclear',
37:'Medicina Preventiva e social',
38:'Nefrologia',
39:'Neurocirurgia',
40:'Neurologia',
41:'Nutrologia',
42:'Oftalmologia',
43:'Ortopedia e Traumatologia',
44:'Otorrinoloaringologia',
45:'Patologia',
46:'Patologia clínica-medicina laboratorial',
47:'Pediatria',
48:'Pneumologia',
49:'Psiquiatria',
50:'Radiologia e Diagnóstico por Imagem',
51:'Radioterapia',
52:'Reumatologia',
53:'Urologia',
54:'Outras'})

Seu conjunto de dados estará com uma configuração semelhante a imagem abaixo. Você verá na coluna cod_cbo_especialidades_label um monte de casos como NaN. isso ocorre, pois o código anterior cria label apenas para os médicos especialistas. Como o CNES é composto por todos os profissionais da saúde, os profissionais não médicos não terão seus rótulos atribuídos.

Dados do CNES no python com todas as variáveis criadas até agora.
Cnes no Python com todas as variáveis até o momento criada

Se você deseja verificar se os rótulos foram atribuídos corretamente, basta executar o seguinte comando: cnes[cnes['cod_cbo_saude']==1]. Esse comando irá filtrar apenas os médicos do CNES e você verá o rótulo de todos os profissionais. Veja na imagem abaixo um exemplo.

Filtro aplicado nos dados do CNES no python com apenas os profissionais médicos do CNES
Dados do Cnes no Python com o filtro aplicado para mostrar apenas os médicos

Agora vamoscriar a label, definindo os rótulos e escrevendo o nome dos respectivos códigos que definimos no código anterior.

Por fim, vamos transformar a variável de carga horária ambulatorial para definirmos categorias entre os números. Foram criadas categorias de carga horária de 10 em 10 até 40 horas semanais, e depois entre 40 e 80 horas semanais. Acima de 80 horas semanais foram definidas como inconsistente ou valor faltante.

# Balaio Científico - Carga horária do CNES no Python
# Cria as categorias da Variável Carga Horária Total
cnes['cod_ch_ambulatorial'] = np.select ([
    (cnes['qtd_ch_ambulatorial'] >= 1) & (cnes['qtd_ch_ambulatorial'] <= 19),
    (cnes['qtd_ch_ambulatorial'] == 20),
    (cnes['qtd_ch_ambulatorial'] >= 21) & (cnes['qtd_ch_ambulatorial'] <= 29),
    (cnes['qtd_ch_ambulatorial'] == 30),
    (cnes['qtd_ch_ambulatorial'] >= 31) & (cnes['qtd_ch_ambulatorial'] <= 39),
    (cnes['qtd_ch_ambulatorial'] == 40),
    (cnes['qtd_ch_ambulatorial'] >= 41) & (cnes['qtd_ch_ambulatorial'] <= 80)], 
    [1,2,3,4,5,6,7], default=8)

No código a seguir eu crio a variável de rótulos, onde vou definir a label das categorias de carga horária que defini anteriormente.

# Balaio Científico - Carga horária do CNES no Python
cnes['cod_ch_total_label'] = cnes.cod_ch_ambulatorial.map({
1:'1 a 19 horas',
2:'20 horas',
3:'21 a 29 horas',
4:'30 horas',
5:'31 a 39 horas',
6:'40 horas',
7:'Mais de 40 horas',
8:'Sem informação ou inconsistente'})

Ao final desse tutorial seus dados devem estar com aspecto semelhante a imagem abaixo. Aqui você tem em mãos todos os profissionais do CNES e as respectivas CBOs mapeadas para todos os profissionais. A partir de agora você pode começar a realizar suas análises.

Resultado Final dos dados do CNES no Python

Salva os dados

Após todo o trabalho chegou o momento de salvarmos nosso arquivo de carga horária do CNES. Para esse arquivo eu gosto de salvar no formato parquet, com a compressão zip para economizar espaço no computador. Caso você prefira, você pode salvar em outro formato como o csv.

# Balaio Científico - Carga horária do CNES no Python
cnes.to_parquet(f'/content/cnes_ch_{year}{month}.parquet.gzip',
              compression='gzip', index=False)

Considerações Finais

Espero que esse tutorial facilite a sua vida e te ajude na análise dos dados de Carga horária do CNES no Python. Esse tutorial é resultado de anos de trabalho e que resolvi compartilhar com a comunidade para facilitar o trabalho de outras pessoas.

Várias etapas desse tutorial foram decisões metodológicas e contou com ajudas de colegas nos quais extendo meus sinceros agradecimentos. Se esse código te ajudou, me ajuda compartilando ele para seus amigos, deixe um comentário e me ajude a aumentar a comunidade do Balaio Científico. Para mim é um prazer ter a sua visita. Volte sempre.

Escrito por Erick Faria
Engenheiro de Dados com Ph.D. em Geografia e experiência em análise espacial e geoprocessamento. Expertise em processamento de grandes volumes de dados geoespaciais, imagens de satélite e dados de mercado, utilizando ferramentas como Spark, Databricks e Google Earth Engine. Experiência em projetos de mercado de carbono, modelos preditivos para investimentos agrícolas e liderança de projetos de dados em saúde pública. Habilidades em Python, R, SQL e diversas ferramentas de engenharia de dados. Profile