From b128d2588d11d68b56ac8b4e14759229548bec5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=A3=20Bida=20Vacaro?= Date: Mon, 25 Nov 2024 12:27:37 -0300 Subject: [PATCH] linting pt.1 --- README.md | 14 +- condarecipe/pysus/meta.yaml | 6 +- docker/docker-compose.yaml | 2 +- docs/source/conf.py | 2 +- docs/source/rio.html | 193 +++++++++++----------- docs/source/tutorials/tutorials.rst | 2 +- pysus/ftp/databases/cnes.py | 15 +- pysus/ftp/databases/pni.py | 29 ++-- pysus/ftp/databases/sia.py | 22 +-- pysus/ftp/databases/sinan.py | 29 ++-- pysus/online_data/IBGE.py | 239 +++++++++++++++++----------- pysus/preprocessing/ESUS.py | 9 +- pysus/preprocessing/decoders.py | 21 ++- pysus/preprocessing/geodata.py | 88 ---------- pysus/preprocessing/sinan.py | 22 +-- setup.cfg | 2 +- 16 files changed, 340 insertions(+), 355 deletions(-) delete mode 100644 pysus/preprocessing/geodata.py diff --git a/README.md b/README.md index 45fa7c88..9881ba78 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ First, clone the Pysus repository: ```bash git clone https://github.com/fccoelho/PySUS.git -``` +``` then from within the PySUS directory build the container ```bash @@ -72,7 +72,7 @@ Point your browser to [http://127.0.0.1:8888](http://127.0.0.1:8888) and have fu Once you are done, you can stop the container with a simple `ctrl-c` from the terminal you started it or use the following command: ```bash # to find the container ID -docker ps +docker ps docker stop ``` ### Mounting your working directory in the container @@ -105,7 +105,7 @@ setx PYSUS_CACHEPATH "C:\Users\Me\desired\path\.pysus" In Docker, just add an extra parameter `-e PYSUS_CACHEPATH="/home/me/desired/path/.pysus"` when starting the container: ```bash -docker run -p 8888:8888 -e PYSUS_CACHEPATH="/home/me/desired/path/.pysus" pysus:latest +docker run -p 8888:8888 -e PYSUS_CACHEPATH="/home/me/desired/path/.pysus" pysus:latest ``` ## Examples @@ -164,7 +164,7 @@ Downloading and reading SINASC data: In[1]: from pysus.online_data.sinasc import download In[2]: df = download('SE', 2015) In[3]: df.head() -Out[3]: +Out[3]: NUMERODN CODINST ORIGEM ... TPROBSON PARIDADE KOTELCHUCK 0 19533794 MSE2805100001 1 ... 11 1 9 1 52927108 MSE2802700001 1 ... 11 1 9 @@ -180,7 +180,7 @@ Dowloading and reading SIM data: In[1]: from pysus.online_data.SIM import download In[2]: df = download('ba', 2007) In[3]: df.head() -Out[3]: +Out[3]: NUMERODO TIPOBITO DTOBITO ... UFINFORM CODINST CB_PRE 0 01499664 2 30072007 ... 29 RBA2914800001 C229 1 09798190 2 04072007 ... 29 RBA2914800001 R98 @@ -196,7 +196,7 @@ Dowloading and reading CIHA data: In[1]: from pysus.online_data.CIHA import download In[2]: df = download('mg', 2009, 7) In[3]: df.head() -Out[3]: +Out[3]: ANO_CMPT MES_CMPT ESPEC CGC_HOSP ... CAR_INT HOMONIMO CNES FONTE 0 2009 07 16505851000126 ... 2126796 1 1 2009 07 16505851000126 ... 2126796 2 @@ -212,7 +212,7 @@ Dowloading and reading SIA data: In[1]: from pysus.online_data.SIA import download In[2]: bi, ps = download('AC', 2020, 3, group=["BI", "PS"]) In[3]: bi.head() -Out[3]: +Out[3]: CODUNI GESTAO CONDIC UFMUN TPUPS ... VL_APROV UFDIF MNDIF ETNIA NAT_JUR 0 2000733 120000 EP 120040 07 ... 24.2 0 0 1023 1 2001063 120000 EP 120040 36 ... 7.3 0 0 1023 diff --git a/condarecipe/pysus/meta.yaml b/condarecipe/pysus/meta.yaml index e793e8d4..1eeaaef0 100644 --- a/condarecipe/pysus/meta.yaml +++ b/condarecipe/pysus/meta.yaml @@ -47,10 +47,10 @@ about: home: "https://github.com/fccoelho/PySUS" license: gpl-v3 license_family: GPL3 - license_file: + license_file: summary: "Tools for dealing with Brazil's Public health data" - doc_url: - dev_url: + doc_url: + dev_url: extra: recipe-maintainers: diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index d07f685d..28d5fd7a 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -1,5 +1,5 @@ version: '3.3' -services: +services: jupyter: build: context: ".." diff --git a/docs/source/conf.py b/docs/source/conf.py index 2bbb46b4..7beac097 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -75,7 +75,7 @@ language = 'en' locale_dirs = ['locale'] -gettext_compact = False +gettext_compact = False # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: diff --git a/docs/source/rio.html b/docs/source/rio.html index 60bedc70..e1405215 100644 --- a/docs/source/rio.html +++ b/docs/source/rio.html @@ -1,95 +1,95 @@ - - + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - + + + - - - + + + - - - + + +
- - - + + + - diff --git a/docs/source/tutorials/tutorials.rst b/docs/source/tutorials/tutorials.rst index edad7e1b..67bdc29c 100644 --- a/docs/source/tutorials/tutorials.rst +++ b/docs/source/tutorials/tutorials.rst @@ -5,7 +5,7 @@ Tutorials PySUS includes some Jupyter notebooks in its distribution package to serve as tutorials. -Preprocessing DATASUS data +Preprocessing DATASUS data -------------------------- #. :doc:`Preprocessing SINAN` #. :doc:`Preprocessing SIM` diff --git a/pysus/ftp/databases/cnes.py b/pysus/ftp/databases/cnes.py index 1c928522..e6e64272 100644 --- a/pysus/ftp/databases/cnes.py +++ b/pysus/ftp/databases/cnes.py @@ -11,13 +11,14 @@ class CNES(Database): "long_name": "Cadastro Nacional de Estabelecimentos de Saúde", "source": "https://cnes.datasus.gov.br/", "description": ( - "O Cadastro Nacional de Estabelecimentos de Saúde (CNES) é o sistema " - "de informação oficial de cadastramento de informações de todos os " - "estabelecimentos de saúde no país, independentemente de sua natureza " - "jurídica ou de integrarem o Sistema Único de Saúde (SUS). Trata-se do " - "cadastro oficial do Ministério da Saúde (MS) no tocante à realidade da " - "capacidade instalada e mão-de-obra assistencial de saúde no Brasil em " - "estabelecimentos de saúde públicos ou privados, com convênio SUS ou não." + "O Cadastro Nacional de Estabelecimentos de Saúde (CNES) é o " + "sistema de informação oficial de cadastramento de informações " + "de todos os estabelecimentos de saúde no país, independentemente " + "de sua natureza jurídica ou de integrarem o Sistema Único de " + "Saúde (SUS). Trata-se do cadastro oficial do Ministério da " + "Saúde (MS) no tocante à realidade da capacidade instalada e " + "mão-de-obra assistencial de saúde no Brasil em estabelecimentos " + "de saúde públicos ou privados, com convênio SUS ou não." ), } groups = { diff --git a/pysus/ftp/databases/pni.py b/pysus/ftp/databases/pni.py index 3843f3c7..6fa7d113 100644 --- a/pysus/ftp/databases/pni.py +++ b/pysus/ftp/databases/pni.py @@ -8,22 +8,25 @@ class PNI(Database): name = "PNI" paths = (Directory("/dissemin/publicos/PNI/DADOS"),) metadata = { - "long_name": "Sistema de Informações do Programa Nacional de Imunizações", + "long_name": ( + "Sistema de Informações do Programa Nacional de Imunizações" + ), "source": ( - "https://datasus.saude.gov.br/acesso-a-informacao/morbidade-hospitalar-do-sus-sih-sus/", - "https://datasus.saude.gov.br/acesso-a-informacao/producao-hospitalar-sih-sus/", + "https://datasus.saude.gov.br/acesso-a-informacao/morbidade-hospitalar-do-sus-sih-sus/", # noqa + "https://datasus.saude.gov.br/acesso-a-informacao/producao-hospitalar-sih-sus/", # noqa ), "description": ( - "O SI-PNI é um sistema desenvolvido para possibilitar aos gestores " - "envolvidos no Programa Nacional de Imunização, a avaliação dinâmica " - "do risco quanto à ocorrência de surtos ou epidemias, a partir do " - "registro dos imunobiológicos aplicados e do quantitativo populacional " - "vacinado, agregados por faixa etária, período de tempo e área geográfica. " - "Possibilita também o controle do estoque de imunobiológicos necessário " - "aos administradores que têm a incumbência de programar sua aquisição e " - "distribuição. Controla as indicações de aplicação de vacinas de " - "imunobiológicos especiais e seus eventos adversos, dentro dos Centros " - "de Referências em imunobiológicos especiais." + "O SI-PNI é um sistema desenvolvido para possibilitar aos " + "gestores envolvidos no Programa Nacional de Imunização, a " + "avaliação dinâmica do risco quanto à ocorrência de surtos ou " + "epidemias, a partir do registro dos imunobiológicos aplicados e " + "do quantitativo populacional vacinado, agregados por faixa " + "etária, período de tempo e área geográfica. Possibilita também " + "o controle do estoque de imunobiológicos necessário aos " + "administradores que têm a incumbência de programar sua aquisição " + "e distribuição. Controla as indicações de aplicação de " + "vacinas de imunobiológicos especiais e seus eventos adversos, " + "dentro dos Centros de Referências em imunobiológicos especiais." ), } groups = { diff --git a/pysus/ftp/databases/sia.py b/pysus/ftp/databases/sia.py index c91b0b50..d3873e97 100644 --- a/pysus/ftp/databases/sia.py +++ b/pysus/ftp/databases/sia.py @@ -14,16 +14,18 @@ class SIA(Database): "long_name": "Sistema de Informações Ambulatoriais", "source": "http://sia.datasus.gov.br/principal/index.php", "description": ( - "O Sistema de Informação Ambulatorial (SIA) foi instituído pela Portaria " - "GM/MS n.º 896 de 29 de junho de 1990. Originalmente, o SIA foi concebido " - "a partir do projeto SICAPS (Sistema de Informação e Controle Ambulatorial " - "da Previdência Social), em que os conceitos, os objetivos e as diretrizes " - "criados para o desenvolvimento do SICAPS foram extremamente importantes e " - "amplamente utilizados para o desenvolvimento do SIA, tais como: (i) o " - "acompanhamento das programações físicas e orçamentárias; (ii) o " - "acompanhamento das ações de saúde produzidas; (iii) a agilização do " - "pagamento e controle orçamentário e financeiro; e (iv) a formação de " - "banco de dados para contribuir com a construção do SUS." + "O Sistema de Informação Ambulatorial (SIA) foi instituído pela " + "Portaria GM/MS n.º 896 de 29 de junho de 1990. Originalmente, o " + "SIA foi concebido a partir do projeto SICAPS (Sistema de " + "Informação e Controle Ambulatorial da Previdência Social), em " + "que os conceitos, os objetivos e as diretrizes criados para o " + "desenvolvimento do SICAPS foram extremamente importantes e " + "amplamente utilizados para o desenvolvimento do SIA, tais" + " como: (i) o acompanhamento das programações físicas e " + "orçamentárias; (ii) o acompanhamento das ações de saúde " + "produzidas; (iii) a agilização do pagamento e controle " + "orçamentário e financeiro; e (iv) a formação de banco de dados " + "para contribuir com a construção do SUS." ), } groups = { diff --git a/pysus/ftp/databases/sinan.py b/pysus/ftp/databases/sinan.py index 5a1c7873..2c664e2b 100644 --- a/pysus/ftp/databases/sinan.py +++ b/pysus/ftp/databases/sinan.py @@ -16,20 +16,21 @@ class SINAN(Database): "description": ( "The Notifiable Diseases Information System - Sinan is primarily" "fed by the notification and investigation of cases of diseases " - "and conditions listed in the national list of compulsorily notifiable " - "diseases (Consolidation Ordinance No. 4, September 28, 2017, Annex)." - "However, states and municipalities are allowed to include other " - "important health problems in their region, such as difilobotriasis " - "in the municipality of São Paulo. Its effective use enables the dynamic " - "diagnosis of the occurrence of an event in the population, providing " - "evidence for causal explanations of compulsorily notifiable diseases " - "and indicating risks to which people are exposed. This contributes to " - "identifying the epidemiological reality of a specific geographical area. " - "Its systematic, decentralized use contributes to the democratization of " - "information, allowing all healthcare professionals to access and make " - "it available to the community. Therefore, it is a relevant tool to assist" - " in health planning, define intervention priorities, and evaluate the " - "impact of interventions." + "and conditions listed in the national list of compulsorily " + "notifiable diseases (Consolidation Ordinance No. 4, September 28," + " 2017, Annex). However, states and municipalities are allowed to " + "include other important health problems in their region, such as " + "difilobotriasis in the municipality of São Paulo. Its effective " + "use enables the dynamic diagnosis of the occurrence of an event " + "in the population, providing evidence for causal explanations of " + "compulsorily notifiable diseases and indicating risks to which " + "people are exposed. This contributes to identifying the " + "epidemiological reality of a specific geographical area. Its " + "systematic, decentralized use contributes to the democratization " + "of information, allowing all healthcare professionals to access " + "and make it available to the community. Therefore, it is a " + "relevant tool to assist in health planning, define intervention " + "priorities, and evaluate the impact of interventions." ), } diff --git a/pysus/online_data/IBGE.py b/pysus/online_data/IBGE.py index bfa5f7c2..3771b2ee 100644 --- a/pysus/online_data/IBGE.py +++ b/pysus/online_data/IBGE.py @@ -4,7 +4,7 @@ import ssl # Builtin from pathlib import Path from tempfile import TemporaryDirectory -from typing import Literal, Optional +from typing import Literal from urllib.error import HTTPError from zipfile import ZipFile @@ -35,57 +35,90 @@ def get_sidra_table( headers=None, ): """ - Wrapper for the SIDRA API. More information here: http://apisidra.ibge.gov.br/home/ajuda - :param table_id: código da tabela de onde se deseja extrair os dados. código pode ser obtido aqui: https://sidra.ibge.gov.br/acervo#/S/Q - :param territorial_level: 1 – Brasil, 2 – Grande Região, 3 – Unidade da Federação, 6 – Município, etc - :param geocode: geocódigo do IBGE: 3304557,3550308 – especifica os municípios do Rio de Janeiro e São Paulo. - all – especifica todos os municípios. in n3 11,12 - especifica os municípios contidos nas Unidades da Federação Rondônia e Acre. - - :param period: Os períodos podem ser especificados de forma avulsa, separados por vírgula (,), em faixas, separados por traço (-), ou de ambas as formas - Um período pode ter o formato AAAA, de 4 dígitos, que representa um ano, ou o formato AAAADD, de 6 dígitos, onde AAAA representa um ano e DD seu correspondente mês (01 a 12), trimestre (01 a 04), semestre (01 a 02), etc, de acordo com a periodicidade de divulgação dos dados da tabela. - - Exemplo 1: /p/2008,2010-2012 – especifica os anos de 2008, e 2010 a 2012. - - Exemplo 2: /p/201101-201112,201204,201208 – especifica os meses de janeiro a dezembro de 2012, abril de 2012 e agosto de 2012. - - O parâmetro p pode ser seguido pela constante all para especificar todos os períodos disponíveis. + Wrapper for the SIDRA API. + More information here: http://apisidra.ibge.gov.br/home/ajuda + :param table_id: código da tabela de onde se deseja extrair os dados. + código pode ser obtido aqui: https://sidra.ibge.gov.br/acervo#/S/Q + :param territorial_level: + 1 – Brasil, + 2 – Grande Região, + 3 – Unidade da Federação, + 6 – Município, etc + :param geocode: geocódigo do IBGE: 3304557,3550308 – especifica os + municípios do Rio de Janeiro e São Paulo. + all – especifica todos os municípios. in n3 11,12 - especifica os + municípios contidos nas Unidades da Federação Rondônia e Acre. + + :param period: Os períodos podem ser especificados de forma avulsa, + separados por vírgula (,), em faixas, separados por traço (-), ou de + ambas as formas. Um período pode ter o formato AAAA, de 4 dígitos, que + representa um ano, ou o formato AAAADD, de 6 dígitos, onde AAAA + representa um ano e DD seu correspondente mês (01 a 12), + trimestre (01 a 04), semestre (01 a 02), etc, de acordo com a + periodicidade de divulgação dos dados da tabela. + + Exemplo 1: /p/2008,2010-2012 – 2008, e 2010 a 2012. + + Exemplo 2: /p/201101-201112,201204,201208 – janeiro a dezembro de 2012, + abril de 2012 e agosto de 2012. + + O parâmetro p pode ser seguido pela constante all para especificar + todos os períodos disponíveis. Exemplo 3: /p/all - O parâmetro p pode ser seguido pela constante first e um número de períodos, indicando os primeiros períodos da lista de períodos disponíveis (períodos mais antigos). - O número de períodos pode ser omitido quando se tratar de apenas um aperíodo. + O parâmetro p pode ser seguido pela constante first e um número de + períodos, indicando os primeiros períodos da lista de períodos + disponíveis (períodos mais antigos). + O número de períodos pode ser omitido quando se tratar de apenas um + aperíodo. Exemplo 4: /p/first 12 Exemplo 5: /p/first - O parâmetro p pode ser seguido pela constante last e um número de períodos, indicando os últimos períodos da série (períodos mais recentes). - O número de períodos pode ser omitido quando se tratar de apenas um período. + O parâmetro p pode ser seguido pela constante last e um número de + períodos, indicando os últimos períodos da série (períodos mais + recentes). O número de períodos pode ser omitido quando se tratar de + apenas um período. Exemplo 6: /p/last 12 - Exemplo 7: /p/last (valor default, quando não especificado o parâmetro p) - :param variables:As variáveis são especificadas através de seus códigos, separados por vírgula (,). - A lista de variáveis pode incluir também as variáveis de percentual geradas automaticamente pelo Sidra (são variáveis cujos códigos são superiores a 1.000.000). + Exemplo 7: /p/last (default, quando não especificado o parâmetro p) + :param variables: As variáveis são especificadas através de seus códigos, + separados por vírgula (,). + A lista de variáveis pode incluir também as variáveis de percentual + geradas automaticamente pelo Sidra (são variáveis cujos códigos são + superiores a 1.000.000). - Exemplo 1: /v/63,69 – especifica o percentual no mês e o percentual acumulado no ano do IPCA. + Exemplo 1: /v/63,69 – especifica o percentual no mês e o percentual + acumulado no ano do IPCA. - O parâmetro v pode ser seguido pela constante all para especificar todas as variáveis da tabela, inclusive as variáveis de percentual geradas automaticamente pelo Sidra. + O parâmetro v pode ser seguido pela constante all para especificar + todas as variáveis da tabela, inclusive as variáveis de percentual + geradas automaticamente pelo Sidra. Exemplo 2: /v/all - O parâmetro v pode ser seguido pela constante allxp para especificar todas as variáveis da tabela, exceto as variáveis de percentual geradas automaticamente pelo Sidra. - - Exemplo 3: /v/allxp (valor default, quando não especificado o parâmetro v) - :param classification: informa o código de uma das classificações da tabela. - Como exemplos, temos 1 – Situação do domicílio, 2 – Sexo, 81 – Produto da lavoura temporária, etc. - :param categories: As categorias são especificadas através de seus códigos, de forma individual ou para compor uma soma, separadas por vírgula (,). + O parâmetro v pode ser seguido pela constante allxp para especificar + todas as variáveis da tabela, exceto as variáveis de percentual + geradas automaticamente pelo Sidra. + + Exemplo 3: /v/allxp (default, quando não especificado o parâmetro v) + :param classification: informa o código de uma das classificações da tabela + Como exemplos, temos 1 – Situação do domicílio, 2 – Sexo, 81 – Produto + da lavoura temporária, etc. + :param categories: As categorias são especificadas através de seus + códigos, de forma individual ou para compor uma soma, separadas por + vírgula (,). As categorias que compõem a soma devem ser separadas por espaço. - Exemplo 1: /c81/2692,2702,2694 2695 – especifica os produtos da lavoura temporária arroz, feijão e (batata doce + batata inglesa) + Exemplo 1: /c81/2692,2702,2694 2695 – especifica os produtos da lavoura + temporária arroz, feijão e (batata doce + batata inglesa) :param format: :param decimals: - :param headers: `y` para receber o header (valor default, caso o parâmetro h não seja especificado). `n` para não receber o header. + :param headers: `y` para receber o header (valor default, caso o parâmetro + h não seja especificado). `n` para não receber o header. :return: """ base_url = "https://apisidra.ibge.gov.br/values" @@ -111,7 +144,7 @@ def get_sidra_table( try: with (get_legacy_session() as s, s.get(url) as response): df = pd.DataFrame(response.json()) - except HTTPError as exc: + except HTTPError: response = requests.get(url) print(f"Consulta falhou: {response.text}") return None @@ -120,8 +153,8 @@ def get_sidra_table( def list_agregados(**kwargs): """ - Lista de agregados agrupados por pesquisa. - veja https://servicodados.ibge.gov.br/api/docs/agregados?versao=3#api-Agregados-agregadosGet + Lista de agregados agrupados por pesquisa. Veja + https://servicodados.ibge.gov.br/api/docs/agregados?versao=3#api-Agregados-agregadosGet # noqa para maiores detalhes :param kwargs: parâmetros válidos: período, assunto, classificacao, periodicidade,nivel. :return: Dataframe @@ -140,9 +173,11 @@ def list_agregados(**kwargs): def localidades_por_agregado(agregado: int, nivel: str): """ - Obtém as localidades associadas ao agregado de acordo com um ou mais níveis geográficos. + Obtém as localidades associadas ao agregado de acordo com um ou mais níveis + geográficos. :param agregado: codigo numérico do agregado - :param nivel: Identificador do nível geográfico ao qual pertence as localidades. Pode conter um ou mais níveis + :param nivel: Identificador do nível geográfico ao qual pertence as + localidades. Pode conter um ou mais níveis delimitados pelo caracter | (pipe). p.ex. N7|N6 :return: """ @@ -182,60 +217,82 @@ def lista_periodos(agregado: int): try: with (get_legacy_session() as s, s.get(url) as response): table = pd.DataFrame(response.json()) - except: + except Exception: return None return table class FetchData: """ - Obtém o conjunto de variáveis a partir do identificador do agregado, períodos pesquisados e identificador das variáveis - :param agregado: identifocador do agregados - :param periodos: Período do qual se deseja obter os resultados. Consulte os identificadores dos períodos na Base de - identificadores. Informe valores negativos para obter os últimos resultados. Pode conter um ou mais períodos - delimitados pelo caracter | (pipe) - :param variavel: Um ou mais identificadores de variável separados pelo caracter | (pipe). Caso omitido, assume o - valor allxp, que retorna quaisquer variáveis relacionada ao agregado. Para saber mais sobre as variáveis de cada - agregado, acesse seus respectivos metadados - :kwargs: parametros adicionais: - - **localidades**: Uma ou mais localidades delimitadas pelo caracter | (pipe). No caso do Brasil, o identificador é - BR. Para qualquer outra localidade que NÃO seja Brasil, essa deve seguir o padrão N[], - em que pode ser uma ou mais localidades separadas por vírgula. É possível ainda generalizar o - resultado, informando a classe da localidade, conforme os exemplos a seguir - - https://servicodados.ibge.gov.br/api/v3/agregados/1705/variaveis?localidades=N7 - - Obtém os resultados referentes às variáveis do agregado 1705 cujas localidades sejam regiões metropolitanas (N7) - - https://servicodados.ibge.gov.br/api/v3/agregados/1705/variaveis?localidades=N7[3501,3301] - - Obtém os resultados referentes às variáveis do agregado 1705 cujas localidades sejam as regiões metropolitanas - (N7) de São Paulo e Rio de Janeiro (3501,3301). Observe que 3501 e 3301 são, respectivamente, os identificadores - das regiões metropolitanas de São Paulo e Rio de Janeiro. Não podem ser confundidos, portanto, com os - identificadores dos municípios de São Paulo/SP e Rio de Janeiro/RJ, que são 3550308 e 3304557, respectivamente - - - **classificacao**: Além de estar relacionado à uma dada localidade e um determinado período, os resultados das - variáveis podem estar relacionados à outros conjuntos de dados, que na nomenclatura do SIDRA recebe o nome de - classificação. Como exemplo, considere o agregado Produção, venda, valor da produção e área colhida da lavoura - temporária nos estabelecimentos agropecuários. Além da localidade e do período, os resultados produzidos por - esse agregado referem-se aos produtos produzidos, condição do produtor, grupos de atividades econômica, grupos - de área, grupos de área colhida e pronafiano, que são as classificações do agregado - Para conhecer as - classificações de cada agregado, acesse seus respectivos metadados. Aos componentes da classificação, dar-se o - nome de categoria. Na prática, você fará uso das classificações para restringir a consulta, conforme os exemplos a seguir - - https://servicodados.ibge.gov.br/api/v3/agregados/1712/variaveis?classificacao=226[4844]&localidades=BR - - Obtém os resultados referentes às variáveis do agregado 1712 cujo produto produzido (226) seja abacaxi (4844) - no Brasil (BR) - - https://servicodados.ibge.gov.br/api/v3/agregados/1712/variaveis?classificacao=226[4844]|218[4780]&localidades=BR - - Obtém os resultados referentes às variáveis do agregado 1712 cujo produto produzido (226) seja abacaxi (4844) e - cuja condição do produtor (218) seja proprietário (4780) no Brasil (BR) - - **view**: Modo de visualização. Caso deseje que a resposta seja renderizada usando notação OLAP, configure - esse parâmetro com o valor OLAP - https://servicodados.ibge.gov.br/api/v3/agregados/1705/variaveis?view=OLAP&localidades=BR. - A outra opção é configurar esse parâmetro com o valor flat. No modo flat, o primeiro elemento do Array são - metadados, de forma que os resultados vêm a partir do segundo elemento + Obtém o conjunto de variáveis a partir do identificador do agregado, + períodos pesquisados e identificador das variáveis. + + :param agregado: Identificador do agregado. + :param periodos: Período do qual se deseja obter os resultados. Consulte os + identificadores dos períodos na Base de Identificadores. Informe + valores negativos para obter os últimos resultados. Pode conter um ou + mais períodos delimitados pelo caractere | (pipe). + :param variavel: Um ou mais identificadores de variável separados pelo + caractere | (pipe). Caso omitido, assume o valor allxp, que retorna + quaisquer variáveis relacionadas ao agregado. Para saber mais sobre as + variáveis de cada agregado, acesse seus respectivos metadados. + :kwargs: Parâmetros adicionais: + - **localidades**: Uma ou mais localidades delimitadas pelo caractere | + (pipe). No caso do Brasil, o identificador é BR. Para qualquer + outra localidade que NÃO seja Brasil, essa deve seguir o padrão + N[], em que pode ser uma + ou mais localidades separadas por vírgula. É possível ainda + generalizar o resultado, informando a classe da localidade, + conforme os exemplos a seguir: + + https://servicodados.ibge.gov.br/api/v3/agregados/1705/variaveis?localidades=N7 # noqa + + Obtém os resultados referentes às variáveis do agregado 1705 cujas + localidades sejam regiões metropolitanas (N7). + + https://servicodados.ibge.gov.br/api/v3/agregados/1705/variaveis?localidades=N7[3501,3301] # noqa + + Obtém os resultados referentes às variáveis do agregado 1705 cujas + localidades sejam as regiões metropolitanas (N7) de São Paulo e Rio + de Janeiro (3501,3301). Observe que 3501 e 3301 são os + identificadores das regiões metropolitanas de São Paulo e Rio de + Janeiro. Não podem ser confundidos com os identificadores dos + municípios de São Paulo/SP e Rio de Janeiro/RJ, que são 3550308 + e 3304557, respectivamente. + + - **classificacao**: Além de estar relacionado a uma dada localidade e + a um determinado período, os resultados das variáveis podem estar + relacionados a outros conjuntos de dados, que na nomenclatura do + SIDRA recebem o nome de classificação. Como exemplo, considere o + agregado Produção, venda, valor da produção e área colhida da + lavoura temporária nos estabelecimentos agropecuários. Além da + localidade e do período, os resultados produzidos por esse agregado + referem-se aos produtos produzidos, condição do produtor, grupos de + atividades econômicas, grupos de área, grupos de área colhida e + pronafiano, que são as classificações do agregado. Para conhecer as + classificações de cada agregado, acesse seus respectivos metadados. + Aos componentes da classificação, dá-se o nome de categoria. Na + prática, você fará uso das classificações para restringir a + consulta, conforme os exemplos a seguir: + + https://servicodados.ibge.gov.br/api/v3/agregados/1712/variaveis?classificacao=226[4844]&localidades=BR # noqa + + Obtém os resultados referentes às variáveis do agregado 1712 cujo + produto produzido (226) seja abacaxi (4844) no Brasil (BR). + + https://servicodados.ibge.gov.br/api/v3/agregados/1712/variaveis?classificacao=226[4844]|218[4780]&localidades=BR # noqa + + Obtém os resultados referentes às variáveis do agregado 1712 cujo + produto produzido (226) seja abacaxi (4844) e cuja condição do + produtor (218) seja proprietário (4780) no Brasil (BR). + + - **view**: Modo de visualização. Caso deseje que a resposta seja + renderizada usando notação OLAP, configure esse parâmetro com o + valor OLAP - + https://servicodados.ibge.gov.br/api/v3/agregados/1705/variaveis?view=OLAP&localidades=BR. # noqa + A outra opção é configurar esse parâmetro com o valor flat. No modo + flat, o primeiro elemento do array são metadados, de forma que os + resultados vêm a partir do segundo elemento. """ def __init__( @@ -262,11 +319,11 @@ def to_dataframe(self): """ -HTTPSConnectionPool(host='servicodados.ibge.gov.br', port=443): - Max retries exceeded with url: - /api/v3/agregados/{...} +HTTPSConnectionPool(host='servicodados.ibge.gov.br', port=443): + Max retries exceeded with url: + /api/v3/agregados/{...} Caused by SSLError( - SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] + SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:1129)' SOLUTION: https://github.com/scrapy/scrapy/issues/5491#issuecomment-1241862323 @@ -309,8 +366,8 @@ def get_population( "POP" - 1992-presente: Estimativas populacionais estratificadas por idade e sexo. "censo" - 1991, 2000 e 2010: Censos Demográficos - "POPTCU" - 1992-presente: Estimativas populacionais enviadas para o TCU, - estratificadas por idade e sexo pelo MS/SGEP/Datasus. + "POPTCU" - 1992-presente: Estimativas populacionais enviadas para o + TCU, estratificadas por idade e sexo pelo MS/SGEP/Datasus. "projpop": Estimativas preliminares para os anos intercensitários dos totais populacionais, estratificadas por idade e sexo pelo MS/SGEP/Datasus. diff --git a/pysus/preprocessing/ESUS.py b/pysus/preprocessing/ESUS.py index b52b308c..5552f583 100644 --- a/pysus/preprocessing/ESUS.py +++ b/pysus/preprocessing/ESUS.py @@ -5,7 +5,8 @@ def cases_by_age_and_sex(UF, start="2020-03-01", end="2020-08-31"): """ - Fetches ESUS covid line list and aggregates by age and sex returning these counts between start and end dates. + Fetches ESUS covid line list and aggregates by age and sex returning these + counts between start and end dates. :param UF: State code :param start: Start date :param end: end date @@ -25,7 +26,8 @@ def cases_by_age_and_sex(UF, start="2020-03-01", end="2020-08-31"): inplace=True, ) print( - f"Removed {old_size - len(df)} rows with missing dates of symptoms, notification or testing" + f"Removed {old_size - len(df)} rows with missing dates of symptoms," + " notification or testing" ) # Desconsiderando os resultados negativos ou inconclusivos @@ -42,7 +44,8 @@ def cases_by_age_and_sex(UF, start="2020-03-01", end="2020-08-31"): df.set_index("datesint", inplace=True) df.sort_index(inplace=True, ascending=True) - # vamos limitar a data inicial e a data final considerando apenas a primeira onda + # vamos limitar a data inicial e a data final considerando apenas a + # primeira onda df = df.loc[start:end] diff --git a/pysus/preprocessing/decoders.py b/pysus/preprocessing/decoders.py index 4463545f..23215a6c 100644 --- a/pysus/preprocessing/decoders.py +++ b/pysus/preprocessing/decoders.py @@ -19,9 +19,10 @@ @np.vectorize def decodifica_idade_SINAN(idade, unidade: str = "Y"): """ - Em tabelas do SINAN frequentemente a idade é representada como um inteiro que precisa ser parseado - para retornar a idade em uma unidade cronológica padrão. - :param unidade: unidade da idade: 'Y': anos, 'M' meses, 'D': dias, 'H': horas + Em tabelas do SINAN frequentemente a idade é representada como um inteiro + que precisa ser parseado para retornar a idade em uma unidade cronológica + padrão. + :param unidade: unidade da idade: 'Y' anos, 'M' meses, 'D' dias, 'H' horas :param idade: inteiro ou sequencia de inteiros codificados. :return: """ @@ -61,7 +62,9 @@ def decodifica_idade_SIM(idade, unidade="D"): """ Em tabelas do SIM a idade encontra-se codificada :param idade: valor original da tabela do SIM - :param unidade: Unidade de saida desejada: 'Y': anos, 'M' meses, 'D': dias, 'H': horas, 'm': minutos. Valor default: 'D' + :param unidade: Unidade de saida desejada: + 'Y' anos, 'M' meses, 'D' dias, 'H' horas, 'm' minutos. + Valor default: 'D' :return: """ fator = {"Y": 365.0, "M": 30.0, "D": 1.0, "H": 1 / 24.0, "m": 1 / 1440.0} @@ -249,9 +252,13 @@ def classify_age( :param start: início do primeiro grupo :param end: fim do último grupo :param freq: tamanho dos grupos. Por padrão considera cada valor um grupo. - :param open_end: cria uma classe no final da lista de intervalos que contém todos acima daquele último valor. Default True - :param closed: onde os intervalos devem ser fechados. Possíveis valores: {'left', 'right', 'both', 'neither'}. Default 'left' - :param interval: IntervalIndex do pandas. Caso seja passado todos os outros parâmetros de intervalo são desconsiderados. Defaul None + :param open_end: cria uma classe no final da lista de intervalos que contém + todos acima daquele último valor. Default True + :param closed: onde os intervalos devem ser fechados. + Possíveis valores: {'left', 'right', 'both', 'neither'}. + Default 'left' + :param interval: IntervalIndex do pandas. Caso seja passado todos os outros + parâmetros de intervalo são desconsiderados. Defaul None :return: """ if interval: diff --git a/pysus/preprocessing/geodata.py b/pysus/preprocessing/geodata.py deleted file mode 100644 index e516bcf0..00000000 --- a/pysus/preprocessing/geodata.py +++ /dev/null @@ -1,88 +0,0 @@ -""" -This module contains a set of functions to deal with geodatadecode -commonly encoded variables -Created on 15/10/2020 -by gabrielmcf -license: GPL V3 or Later -""" - -__docformat__ = "restructuredtext en" -# from geobr import read_municipality -import warnings - -import pandas as pd - -warnings.warn( - "The 'geodata' module is deprecated and will be removed in a future release. " - "Please use 'new_module' instead.", - DeprecationWarning, - stacklevel=2, -) - - -# def add_data_to_municipality( -# counts, -# map_year=2019, -# codmun_col="CODMUNRES", -# title_cols=["SEXO", "IDADE_ANOS"], -# value_col="COUNTS", -# nan_string="nan", -# ): -# -# """ -# Adiciona dados de mortalidade aos seus respectivos municípios. Gera um GeoDataFrame do GeoPandas. -# :param counts: dataframe contendo os dados a serem agregados. -# :param map_year: ano do mapa a ser usado (biblioteca geobr). -# :param codmun_col: coluna com geocode do município -# :param title_cols: colunas que serão utilizadas para formar o título das colunas no GeoDataFrame. -# :param value_col: coluna com o valor a ser adicionado ao GeoDataFrame -# :return: -# """ -# -# # Extrai código do estado dos municípios. -# # 2 primeiros dígitos do código são o estado -# states = ( -# counts[counts[codmun_col] != nan_string][codmun_col] -# .apply(lambda x: str(x)[:2]) -# .unique() -# ) -# geo_df = read_municipality(code_muni=states[0], year=map_year) -# -# all_fields = [codmun_col] + title_cols + [value_col] -# -# if len(states) > 1: -# for state in states[1:]: -# geo_df = geo_df.append(read_municipality(code_muni=state, year=map_year)) -# -# column_names = column_name_list(counts, title_cols) -# geo_df[column_names] = 0 -# -# for i, mun in geo_df.iterrows(): -# data = counts[ -# (counts[codmun_col] == mun["code_muni"]) & (counts[value_col] > 0.0) -# ] -# for _, item in data.iterrows(): -# geo_df.loc[i, column_name(item, title_cols)] = item[value_col] -# -# return geo_df.fillna(0) -# -# -# def column_name_list(df, title_cols): -# unique_indices = pd.DataFrame(df.groupby(title_cols).indices.keys()) -# titles = unique_indices.apply(column_name, axis=1) -# return titles.tolist() -# -# -# def column_name(item, title_cols=None): -# if title_cols: -# name = item[title_cols[0]] -# if len(title_cols) > 1: -# for col in title_cols[1:]: -# name = f"{name}-{item[col]}" -# else: -# name = item[0] -# if len(item) > 1: -# for col in item[1:]: -# name = f"{name}-{col}" -# -# return name diff --git a/pysus/preprocessing/sinan.py b/pysus/preprocessing/sinan.py index bf4076ab..cb6945ed 100644 --- a/pysus/preprocessing/sinan.py +++ b/pysus/preprocessing/sinan.py @@ -49,10 +49,8 @@ def get_geocodes(geoc): """ url = ( "http://cidades.ibge.gov.br/services/jSonpMuns.php?" - "busca=330&featureClass=P&style=full&maxRows=5&name_startsWith={}".format( - geoc - ) - ) + "busca=330&featureClass=P&style=full&maxRows=5&name_startsWith={}" + ).format(geoc) resp = requests.get(url) for d in resp.json()["municipios"]: if int(geoc) == int(d["c"]): @@ -80,7 +78,8 @@ def _address_generator(df, default=""): def geocode(sinan_df, outfile, default_city): """ Geocode cases based on addresses included. - :param default_city: default city to use in case of bad Geocode found in file. It can be "city, state" + :param default_city: default city to use in case of bad Geocode found in + file. It can be "city, state" :param sinan_df: Dataframe generated from sinan DBF :param outfile: File on Which """ @@ -104,9 +103,10 @@ def geocode(sinan_df, outfile, default_city): raise NameError("Google could not find {}".format(ad)) if location.latlng == []: print( - "Search for {} returned {} as coordinates, trying reduced address:".format( - ad, location.latlng - ) + ( + "Search for {} returned {} as coordinates, trying " + "reduced address:" + ).format(ad, location.latlng) ) ad = ",".join(ad.split(",")[2:]) print(ad) @@ -120,8 +120,8 @@ def geocode(sinan_df, outfile, default_city): print("Successfully geolocated {}".format(ad)) except IndexError: print( - "Search for {} returned {} as coordinates, skipping".format( - ad, location.latlng - ) + ( + "Search for {} returned {} as coordinates, " "skipping" + ).format(ad, location.latlng) ) of.write("{},nan,nan\n".format(nu)) diff --git a/setup.cfg b/setup.cfg index 44a24472..157d9dfb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -3,7 +3,7 @@ license_file = LICENSE [options] packages = find: -include = +include = pysus [build_sphinx]