Skip to content

Commit

Permalink
[dados] br_anvisa_medicamentos_industrializados (#260)
Browse files Browse the repository at this point in the history
* Adiciona microdados.

* Adiciona arquivo para baixar dados originais automaticamente.

* Conserta questões apontadas pelo @mavalentim.

* Atualiza table_config e descrição.
  • Loading branch information
rdahis authored Feb 26, 2021
1 parent b1eccbf commit c87149e
Show file tree
Hide file tree
Showing 11 changed files with 578 additions and 0 deletions.
7 changes: 7 additions & 0 deletions bases/br_anvisa_medicamentos_industrializados/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Como capturar os dados de br_anvisa_medicamentos_industrializados?

1. Para capturar esses dados, basta verificar o link dos dados originais indicado em `dataset_config.yaml` no item `website`.

2. Caso tenha sido utilizado algum código de captura ou tratamento, estes estarão contidos em `code/`. Se o dado publicado for em sua versão bruta, não existirá a pasta `code/`.

Os dados publicados estão disponíveis em: https://basedosdados.org/dataset/br-anvisa-medicamentos-industrializados
77 changes: 77 additions & 0 deletions bases/br_anvisa_medicamentos_industrializados/code/build.do
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@

//----------------------------------------------------------------------------//
// prefacio
//----------------------------------------------------------------------------//

clear all

cd "path/dados_EDA_industrializados"

do "code/clean_string.do"

//----------------------------------------------------------------------------//
// build
//----------------------------------------------------------------------------//

import delimited "input/br_bd_diretorios_brasil_municipio.csv", clear varn(1) encoding("utf-8")
keep id_municipio municipio sigla_uf
clean_string municipio
tempfile munic
save `munic'

! mkdir "output/microdados"

foreach ano of numlist 2014(1)2020 {

! mkdir "output/microdados/ano=`ano'"

foreach mes of numlist 1(1)12 {

if `mes' <= 9 local mes_dois_digitos 0`mes'
if `mes' >= 10 local mes_dois_digitos `mes'

! mkdir "output/microdados/ano=`ano'/mes=`mes'"

import delimited "input/EDA_Industrializados_`ano'`mes_dois_digitos'.csv", clear varn(1) delim(";") case(preserve)

ren ANO_VENDA ano
ren MES_VENDA mes
ren UF_VENDA sigla_uf
ren MUNICIPIO_VENDA municipio
ren PRINCIPIO_ATIVO principio_ativo
ren DESCRICAO_APRESENTACAO descricao_apresentacao
ren QTD_VENDIDA qtde_vendida
ren UNIDADE_MEDIDA unidade_medida
ren CONSELHO_PRESCRITOR conselho_prescritor
ren UF_CONSELHO_PRESCRITOR sigla_uf_conselho_prescritor
ren TIPO_RECEITUARIO tipo_receituario
ren CID10 cid10
ren SEXO sexo
ren IDADE idade
ren UNIDADE_IDADE unidade_idade

replace unidade_medida = lower(unidade_medida)

clean_string municipio

replace municipio = "brasilia" if sigla_uf == "DF"
replace municipio = "brazopolis" if sigla_uf == "MG" & municipio == "brasopolis"
replace municipio = "sao vicente do serido" if sigla_uf == "PB" & municipio == "serido"
replace municipio = "tacima" if sigla_uf == "PB" & municipio == "campo de santana"
replace municipio = "joca claudino" if sigla_uf == "PB" & municipio == "santarem"
replace municipio = "belem do sao francisco" if sigla_uf == "PE" & municipio == "belem de sao francisco"
replace municipio = "lagoa de itaenga" if sigla_uf == "PE" & municipio == "lagoa do itaenga"
replace municipio = "presidente juscelino" if sigla_uf == "RN" & municipio == "serra caiada"

merge m:1 municipio sigla_uf using `munic'
drop if _merge == 2
drop _merge

order id_municipio sigla_uf
drop ano mes municipio

export delimited "output/microdados/ano=`ano'/mes=`mes'/microdados.csv", replace

}
}
*
90 changes: 90 additions & 0 deletions bases/br_anvisa_medicamentos_industrializados/code/clean_string.do
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@

// program to clean string variables
// author: Ricardo Dahis
// last updated: 2021/02/10

cap program drop clean_string
program clean_string

qui replace `1' = ustrlower(`1')

//-------------------//
// lower case
//-------------------//

foreach c in á à â ã ä {
qui replace `1' = usubinstr(`1', "`c'", "a", .)
}
foreach c in é è ê ë {
qui replace `1' = usubinstr(`1', "`c'", "e", .)
}
foreach c in í ì î ï {
qui replace `1' = usubinstr(`1', "`c'", "i", .)
}
foreach c in ó ò ô õ ö {
qui replace `1' = usubinstr(`1', "`c'", "o", .)
}
foreach c in ú ù ü {
qui replace `1' = usubinstr(`1', "`c'", "u", .)
}
*

qui replace `1' = usubinstr(`1', "ç", "c", .)
qui replace `1' = usubinstr(`1', "ñ", "n", .)


//-------------------//
// upper case
//-------------------//

foreach C in Á À Â Ä Ã {
qui replace `1' = usubinstr(`1', "`C'", "A", .)
}
foreach C in É È Ê Ë {
qui replace `1' = usubinstr(`1', "`C'", "E", .)
}
foreach C in Í Ì Î Ï {
qui replace `1' = usubinstr(`1', "`C'", "I", .)
}
foreach C in Ó Ò Ô Õ Ö {
qui replace `1' = usubinstr(`1', "`C'", "O", .)
}
foreach C in Ú Ù Ü {
qui replace `1' = usubinstr(`1', "`C'", "U", .)
}
*

qui replace `1' = usubinstr(`1', "Ç", "C", .)
qui replace `1' = usubinstr(`1', "Ñ", "N", .)


//-------------------//
// other characters
//-------------------//

qui replace `1' = usubinstr(`1', "_", " ", .)
qui replace `1' = subinstr(`1', ".", "", .)
qui replace `1' = subinstr(`1', ",", "", .)
qui replace `1' = subinstr(`1', " ", " ", .)
qui replace `1' = subinstr(`1', "[", "", .)
qui replace `1' = subinstr(`1', "]", "", .)
qui replace `1' = subinstr(`1', "{", "", .)
qui replace `1' = subinstr(`1', "}", "", .)
qui replace `1' = subinstr(`1', "'", "", .)
qui replace `1' = subinstr(`1', "`", "", .)


//-------------------//
// spacing
//-------------------//

qui replace `1' = subinstr(`1', " ", " ", .)
qui replace `1' = strtrim(`1')

end






Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@

#---------------------------------------------------------------#
# preface
#---------------------------------------------------------------#

import os
import requests
from time import time
from multiprocessing.pool import ThreadPool

ROOT = "path/dados_EDA_industrializados"

if not os.path.exists(ROOT):
os.mkdir(ROOT)
os.mkdir("input")
os.chdir(ROOT)

#---------------------------------------------------------------#
# main: download data
#---------------------------------------------------------------#

# source: https://likegeeks.com/downloading-files-using-python/#Download_multiple_files_Parallelbulk_download

def url_response(url):

path, url = url
r = requests.get(url, stream = True)

with open(path, 'wb') as f:
for ch in r:
f.write(ch)

urls = []
years = range(2014,2021)
months = ['01','02','03','04','05','06','07','08','09','10','11','12']

for year in years:
for month in months:
path = os.path.join("input", "EDA_Industrializados_"+str(year)+month+".csv")
url = "https://stgdwsngpcpd01.blob.core.windows.net/dados-abertos/EDA_Industrializados_"+str(year)+month+".csv"
urls.append((path,url))

number_threads = 10
ThreadPool(number_threads).imap_unordered(url_response, urls) # runs in background
72 changes: 72 additions & 0 deletions bases/br_anvisa_medicamentos_industrializados/dataset_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
dataset_id: br_anvisa_medicamentos_industrializados # AUTO GENERATED

url_ckan: https://basedosdados.org/dataset/br-anvisa-medicamentos-industrializados
url_github: https://github.com/basedosdados/mais/tree/master/bases/br_anvisa_medicamentos_industrializados

# Descreva a base.
# Ela é sobre o que?
# Quais as principais fontes de dados?
# Há links para FAQs e explicações?
description: | # REQUIRED
Dados de venda de medicamentos industrializados sujeitos à escrituração no SNGPC - Sistema Nacional de Gerenciamento de Produtos Controlados.
# Qual organização disponibiliza os dados originais?
# Opções: escolher dessa lista -> https://basedosdados.org/api/3/action/organization_list
organization: agencia-nacional-de-vigilancia-sanitaria-anvisa

# Qual departamento/grupo/pessoa mantém os dados originais?
author:
name: Anderson da Mota Ribeiro
email: [email protected]

# Onde encontrar os dados originais e mais informações?
website:
- https://dados.gov.br/dataset/venda-de-medicamentos-industrializados-sngpc

# Quais grupos caracterizam a base?
# Opções: escolher dessa lista -> https://basedosdados.org/api/3/action/group_list
groups:
- saude

# Quais etiquetas caracterizam a base?
# Opções: escolher dessa lista -> https://basedosdados.org/api/3/action/tag_list
# Caso crie etiquetas novas, as regras são:
# - letras minúsculas
# - sem acentos
# - não repita nomes de grupos (ex. educacao, saude, meio ambiente, economia, etc.)
tags:
- remedio
- depressao
- venda
- farmacia

# Em quais línguas a base (ou a fonte original) está disponível?
# Regras: minúsculo, sem acentos.
# Opções: portugues, ingles, espanhol, frances, chines, russo, hindi, alemao, etc.
languages:
- portugues

# Os dados originais estão disponíveis de graça?
free: sim

# Are microdata available for download?
microdata: sim

# Existe uma API na fonte original?
API: nao

# É necessário registrar um usuário para baixar os dados originais?
registration: nao

# Como os dados originais estão disponibilizados?
availability: online

# A fonte original requer IP brasileiro para acesso?
brazilian_IP: nao

# Essa base está sob qual licença?
# A licença MIT se aplica a bases públicas.
# Caso não seja pública, ver opções aqui: https://help.data.world/hc/en-us/articles/115006114287-Common-license-types-for-datasets
license:
name: MIT # REQUIRED
url: <url>
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
Query para publicar a tabela.
Esse é o lugar para:
- modificar nomes, ordem e tipos de colunas
- dar join com outras tabelas
- criar colunas extras (e.g. logs, proporções, etc.)
Qualquer coluna definida aqui deve também existir em `table_config.yaml`.
# Além disso, sinta-se à vontade para alterar alguns nomes obscuros
# para algo um pouco mais explícito.
TIPOS:
- Para modificar tipos de colunas, basta substituir STRING por outro tipo válido.
- Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name`
- Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types
*/
CREATE VIEW basedosdados-dev.br_anvisa_medicamentos_industrializados.microdados AS
SELECT
SAFE_CAST(ano AS INT64) ano,
SAFE_CAST(mes AS INT64) mes,
SAFE_CAST(id_municipio AS INT64) id_municipio,
SAFE_CAST(sigla_uf AS STRING) sigla_uf,
SAFE_CAST(principio_ativo AS STRING) principio_ativo,
SAFE_CAST(descricao_apresentacao AS STRING) descricao_apresentacao,
SAFE_CAST(qtde_vendida AS INT64) qtde_vendida,
SAFE_CAST(unidade_medida AS STRING) unidade_medida,
SAFE_CAST(conselho_prescritor AS STRING) conselho_prescritor,
SAFE_CAST(sigla_uf_conselho_prescritor AS STRING) sigla_uf_conselho_prescritor,
SAFE_CAST(tipo_receituario AS INT64) tipo_receituario,
SAFE_CAST(cid10 AS STRING) cid10,
SAFE_CAST(sexo AS INT64) sexo,
SAFE_CAST(idade AS INT64) idade,
SAFE_CAST(unidade_idade AS INT64) unidade_idade
from basedosdados-dev.br_anvisa_medicamentos_industrializados_staging.microdados as t
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"name": "id_municipio", "description": "ID Munic\u00edpio - IBGE 7 D\u00edgitos", "is_in_staging": true, "is_partition": false, "type": "INTEGER", "mode": "NULLABLE"}, {"name": "sigla_uf", "description": "Sigla da Unidade da Federa\u00e7\u00e3o do endere\u00e7o da farm\u00e1cia ou drogaria, cadastrado no banco de dados da Anvisa, representando a UF onde ocorreu a venda.", "is_in_staging": true, "is_partition": false, "type": "STRING", "mode": "NULLABLE"}, {"name": "principio_ativo", "description": "Nome do princ\u00edpio ativo do medicamento industrializado, conforme cadastrado no registro do medicamento, no banco de dados da Anvisa. Quando um medicamento tem mais de um princ\u00edpio ativo, cada um deles \u00e9 separado pelo caractere \"+\".", "is_in_staging": true, "is_partition": false, "type": "STRING", "mode": "NULLABLE"}, {"name": "descricao_apresentacao", "description": "Apresenta\u00e7\u00e3o do Medicamento. Representa o modo como um medicamento \u00e9 apresentado na embalagem.", "is_in_staging": true, "is_partition": false, "type": "STRING", "mode": "NULLABLE"}, {"name": "qtde_vendida", "description": "Quantidade vendida de caixas ou frascos do medicamento.", "is_in_staging": true, "is_partition": false, "type": "INTEGER", "mode": "NULLABLE"}, {"name": "unidade_medida", "description": "Indica se a quantidade vendida do medicamento foi de caixas ou frascos.", "is_in_staging": true, "is_partition": false, "type": "STRING", "mode": "NULLABLE"}, {"name": "conselho_prescritor", "description": "Conselho de Classe do profissional que prescreveu o medicamento vendido.", "is_in_staging": true, "is_partition": false, "type": "STRING", "mode": "NULLABLE"}, {"name": "sigla_uf_conselho_prescritor", "description": "Sigla da Unidade Federativa do Conselho de Classe do profissional que prescreveu o medicamento vendido.", "is_in_staging": true, "is_partition": false, "type": "STRING", "mode": "NULLABLE"}, {"name": "tipo_receituario", "description": "Tipo de receitu\u00e1rio utilizado na prescri\u00e7\u00e3o.", "is_in_staging": true, "is_partition": false, "type": "INTEGER", "mode": "NULLABLE"}, {"name": "cid10", "description": "Classifica\u00e7\u00e3o Internacional de Doen\u00e7a (aplic\u00e1vel apenas a medicamentos antimicrobianos).", "is_in_staging": true, "is_partition": false, "type": "STRING", "mode": "NULLABLE"}, {"name": "sexo", "description": "Sexo do paciente (aplic\u00e1vel apenas a medicamentos antimicrobianos).", "is_in_staging": true, "is_partition": false, "type": "INTEGER", "mode": "NULLABLE"}, {"name": "idade", "description": "Valor num\u00e9rico que representa a idade do paciente, em meses ou anos (aplic\u00e1vel apenas a medicamentos antimicrobianos).", "is_in_staging": true, "is_partition": false, "type": "INTEGER", "mode": "NULLABLE"}, {"name": "unidade_idade", "description": "Unidade de medida da idade do paciente, que pode ser em meses ou anos (aplic\u00e1vel apenas a medicamentos antimicrobianos).", "is_in_staging": true, "is_partition": false, "type": "INTEGER", "mode": "NULLABLE"}, {"name": "ano", "description": "Ano da venda do medicamento.", "is_in_staging": true, "is_partition": true, "type": "INTEGER", "mode": "NULLABLE"}, {"name": "mes", "description": "M\u00eas da venda do medicamento.", "is_in_staging": true, "is_partition": true, "type": "INTEGER", "mode": "NULLABLE"}]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"name": "id_municipio", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "sigla_uf", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "principio_ativo", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "descricao_apresentacao", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "qtde_vendida", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "unidade_medida", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "conselho_prescritor", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "sigla_uf_conselho_prescritor", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "tipo_receituario", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "cid10", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "sexo", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "idade", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}, {"name": "unidade_idade", "description": "<descri\u00e7\u00e3o da coluna>", "is_in_staging": true, "is_partition": false, "type": "STRING"}]
Loading

0 comments on commit c87149e

Please sign in to comment.