Skip to content

Releases: GusFurtado/DadosAbertosBrasil

DadosAbertosBrasil v1.2.0

10 Sep 00:15
Compare
Choose a tag to compare

Com o objetivo de melhorar a acessibilidade do pacote, o DadosAbertosBrasil sempre deu suporte a versões antigas do Python (3.6) e do Pandas (0.x).

Entretanto, essas versões já foram descontinuadas pelos seus core developers, o que tem tornado cada vez mais difícil manter essa retrocompatibilidade.

Portanto, as versões 1.x do DadosAbertosBrasil continuarão oferecendo suporte a dependências antigas, porém não receberão novas atualizações, exceto por correções críticas, e ficarão hospedadas em uma branch separada no GitHub.

Nos próximos meses, será iniciado o desenvolvimento da versão 2.x, que incluirá um refatoramento do back-end, focando em melhorias de performance, segurança, boas práticas e no uso de dependências mais modernas.

Dito isso, seguem as atualizações da versão 1.2:

Fixed

  • Remoção do warning em ipea.lista_series;
  • Remover colunas duplicadas em ibge.localidades.

Deleted

  • favoritos.geojson foi removido após um período de descontinuidade, sendo substituido por ibge.malha.

Changed

  • uf.Governador foi promovido para o __init__ e pode ser importado diretamente via DadosAbertosBrasil.Governadores;
  • O valor default do argumento formato de ibge.malha foi alterado de "svg" para "geojson";
  • O back-end de UF.municipio foi alterado de favoritos.geojson para ibge.localidades.

DadosAbertosBrasil v1.1.0

14 Mar 15:52
Compare
Choose a tag to compare

Added

  • Expectativa de mercado para SELIC: O modo 'selic' foi adicionado à função expectativas do módulo bacen, conforme previsto na API.

As expectativas futuras para a taxa SELIC são parametrizadas pelo campo 'Reuniao' (Rx/yyyy, com x de 1 a 8 para cada ano yyyy), simbolizando as reuniões periódicas do Comitê de Política Monetária (Copom) do Banco Central do Brasil.

Contribuição de @danilogalisteu

DadosAbertosBrasil v1.0.0

29 Dec 19:17
Compare
Choose a tag to compare

Depois de meses de uso, acredito que o DadosAbertosBrasil chegou na sua versão estável. Já temos uma quantidade significante de usuários do pacote pelo país e o objetivo daqui para frente é evitar mudanças estruturais, mantendo a qualidade e o nível de suporte.

Added

  • Black Formatter: Todos os arquivos agora utilizam o formatador automático Black para manter um estilo consistente e agilizar o desenvolvimento.
  • dab_assets: Foi aumentada a concentração de dados no repositório dab_assets, incluindo a logo, dados de governadores e dados de UFs.

Fixed

  • favoritos: Várias funções não estavam funcionando, devido a uma alterações no submódulo ipea.

DadosAbertosBrasil v0.4.4

11 May 22:37
Compare
Choose a tag to compare

Release de Maio/2022

A versão 0.4.4 contém as atualizações do mês de Maio de 2022.

DadosAbertosBrasil.uf._Governador

O método governador da classe UF agora retorna um objeto _Governador contendo os seguintes atributos:

  • uf : str
  • nome : str
  • nome_completo : str
  • ano_eleicao : int
  • mandato_inicio : datetime.date
  • mandato_fim : datetime.date
  • partido : str
  • partido_sigla : str
  • cargo_anterior : str
  • vice_governador : str

Esse método agora não é mais atualizado manualmente por um dicionário. Ele será atualizado por um script que faz o scrape de uma tabela do Wikipedia, disponível neste repositório.

DadosAbertosBrasil.uf.UF

Vários métodos da classe UF foram convertidos para propriedades, pois, como eles se comportam como constantes e não possuem parâmetros, não faz sentido que sejam callable e é preferível bloquear a alterações dos valores para manter a integridade do dado.

As novas propriedades são:

  • densidade
  • galeria
  • geojson
  • governador
  • historia
  • municipios
  • populacao

dab_assets

Novo repositório para arquivos, scripts, imagens e dados do DadosAbertosBrasil.

Desta forma podemos atualizar os assets sem interferir nas atualizações do pacote principal, além de preservar o tamanho do repositório principal.

python-publish.yml

Novo workflow do GitHub Actions para automatizar a publicação do pacote no PyPI quando houver um novo release.

DadosAbertosBrasil v0.4.3

02 Apr 16:25
Compare
Choose a tag to compare

Release de Abril/2022

A versão 0.4.3 contém as atualizações do mês de Abril de 2022.

Documentação

A documentação disponível em https://www.gustavofurtado.com/dab.html foi atualizada com todas as alterações do primeiro trimestre de 2022.

DadosAbertosBrasil.ibge.lista_tabelas

Seguindo o objetivo do pacote de melhorar a acessibilidade dos dados públicos, a função lista_tabelas do módulo ibge recebeu novos argumentos para facilitar a consulta.

def lista_tabelas(
    contendo: Union[str, NoneType] = None,
    excluindo: Union[str, NoneType] = None,
    assunto: Union[str, int, NoneType] = None,
    classificacao: Union[str, int, NoneType] = None,
    periodo: Union[dict, str, NoneType] = None,
    periodicidade: Union[str, int, NoneType] = None,
    nivel: Union[str, int, NoneType] = None,
    pesquisa: Union[str, NoneType] = None,
    index: bool = False
) -> pandas.core.frame.DataFrame

Seguem alguns exemplos:

# Listar tabelas cujo assunto é "Trabalho" (17), com periodicidade trimestral (9),
# a um nível geográfico municipal (6) contendo classificação por grupo de idade (58).

>>> ibge.lista_tabelas(
...     assunto = 17,
...     periodicidade = 9,
...     nivel = 6,
...     classificacao = 58
... )

# Listar tabelas do Censo Demográfico (pesquisa 'CD'), contendo o termo 'rendimento' no título,
# porém não contendo 'Distribuição', definindo a coluna tabela_id como index do DataFrame.

>>> ibge.lista_tabelas(
...     pesquisa = 'CD',
...     contendo = 'rendimento',
...     excluindo = 'distribuição',
...     index = True
... )

# Buscar por tabelas que contenham o IPCA de Dezembro de 2019 (P5[201912]).

>>> ibge.lista_tabelas(
...     contendo = 'ipca',
...     periodo = {5: 201912}
... )

DadosAbertosBrasil v0.4.2

06 Mar 14:38
Compare
Choose a tag to compare

Release de Março/2022

Atualizações dos meses de Fevereiro e Março de 2022.

DadosAbertosBrasil.ipea

A principal novidade deste release é a padronização e expansão do módulo ipea.

Todas as colunas foram renomeadas de acordo com o padrão dos outros módulos e novos argumentos foram adicionados a quase todas as funções para melhorar a acessibilidade.

Segue o exemplo da função ipea.lista_series que agora contém seis argumentos para facilitar a pesquisa.

def lista_series(
        contendo: Optional[str] = None,
        excluindo: Optional[Union[str, List[str]]] = None,
        fonte: Optional[str] = None,
        ativo: Optional[bool] = None,
        numerica: Optional[bool] = None,
        index: bool = False
    ) -> pd.DataFrame:

DadosAbertosBrasil.favoritos.selic

A função selic foi expandida para comportar algumas variações de memória de cálculo.

    # Busca a taxa mensal anualizada dos quatro meses mais recentes.

    >>> import DadosAbertosBrasil as dab
    >>> dab.selic(
    ...     periodo = 'mensal',
    ...     anualizado = True,
    ...     ultimos = 4
    ... )
            data  valor
    0 2021-11-01   7.65
    1 2021-12-01   8.76
    2 2022-01-01   9.15
    3 2022-02-01  10.47

    # Captura a meta SELIC corrente.

    >>> dab.selic(periodo='meta', ultimos=1)
            data  valor
    0 2022-03-16  10.75

    # Captura os valores não anualizados da primeira semada de Janeiro/2022, utilizando a data como índice.

    >>> dab.selic(
    ...     periodo = 'diario',
    ...     anualizado = False,
    ...     inicio = '2022-01-03',
    ...     fim = '2022-01-07',
    ...     index = True
    ... )
                   valor
    data                
    2022-01-03  0.034749
    2022-01-04  0.034749
    2022-01-05  0.034749
    2022-01-06  0.034749
    2022-01-07  0.034749

DadosAbertosBrasil v0.4.1

30 Jan 13:29
Compare
Choose a tag to compare

Release de Janeiro/2022

Resolvi criar uma rotina de atualizações mensais. Talvez eu mude de ideia no futuro.

DadosAbertosBrasil.bacen.expectativas

Essa atualização é importante, pois corrige uma alteração na API de expectativas de mercado do Banco Central.
Foram adicionados novos indicadores, bem como alterados os nomes de alguns já existentes, e.g.:

'Taxa de câmbio'  -> 'Câmbio'
'Taxa Selic-over' -> 'Selic'

Utilize a função help(bacen.expectativas) para ver a lista completa de indicadores disponíveis.

DadosAbertosBrasil.ibge.Galeria

O objeto Galeria ficou mais interativo após receber novos dunder methods.

# Cria uma instância da galeria da localidade desejada.
>>> from DadosAbertosBrasil import ibge
>>> galeria = ibge.Galeria(2304400)

# Veja o tamanho da galeria pela função `len`.
>>> len(galeria)

# Utilize slicers para acessar a fotografia pelo seu índice.
>>> primeira_fotografia = galeria[0]
>>> cinco_ultimas_fotografias = galeria[-5:]

# Fotografias agora são callables.
>>> fotografia(altura=500)
'https://servicodados.ibge.gov.br/api/v1/resize/image?maxwidth=600&max...'

# Utilize for loop para navegador entre as fotografias:
>>> for foto in galeria:
...     print(foto(largura=400))
    

DadosAbertosBrasil v0.4.0

09 Dec 17:22
Compare
Choose a tag to compare

Nota do Autor

DadosAbertosBrasil é um projeto que iniciou junto com a pandemia de COVID-19 e possuiu alguns objetivos que evoluíram ao longo da jornada.

  • Desenvolver minhas habilidades em Python e Git;
  • Auxiliar na expansão de meu portfólio;
  • Apoiar novos estudos e aplicações de dados;
  • Democratizar a informação em meio a um governo obscurantista.

Foram centenas de horas dedicadas a esse projeto e ele finalmente chegou a um estado que eu considero satisfatório, cumprindo seus objetivos iniciais.

Irei suspender por tempo indeterminado o desenvolvimento deste projeto para poder focar em novas habilidades e aplicações. Porém, o DadosAbertosBrasil já faz parte da minha caixa de ferramentas e estará sempre recebendo a manutenção necessária. Muita coisa precisará ser atualizada em 2022, um ano com eleições gerais e censo demográfico.

Sem mais delongas, segue o changelog da versão 0.4.0.

Documentação Oficial

O website da documentação oficial agora será gerado por pdoc e foi atualizado em https://www.gustavofurtado.com/dab.html

Type Hinting & Docstrings

Todas as funções e classes do pacote tiveram seus respectivos type hinting e docstrings revisados, a fim de deixá-los mais aderentes ao padrão numpydoc.

camara & senado

Os objetos e funções dos módulos camara e senado foram refatorados e padronizados.

  • Eles agora são subclasses de um mesmo objeto DAB_Base;
  • Nomes das colunas foram padronizados;
  • Adição de um novo argumento url para removar URL, URI e e-mails da tabela final.
  • Todos os métodos e funções possuem os argumentos index e formato.

favoritos.pib

Nova função para captura da variação anual e trimestral do PIB (Produto Interno Bruto) do Brasil.

  • Capturar a variação porcentual trimestral do PIB
>>> favoritos.pib(periodo='trimestral')
       periodo      valor
0   1997-01-01   3.400572
1   1997-04-01   4.754002
2   1997-07-01   1.791279
3   1997-10-01   3.738518
4   1998-01-01   1.007575
..         ...     ...
  • Capturar PIB anual, pondo o período como index da tabela.
>>> favoritos.pib(periodo='anual', index=True)
               valor
periodo             
1997-01-01  3.394846
1998-01-01  0.338098
1999-01-01  0.467938
2000-01-01  4.387949
2001-01-01  1.389896
...              ...

Depreciação de favoritos.geojson

A função favoritos.geojson foi depreciada e deve ser eventualmente removida.
É recomendado que se usa a função ibge.malha, que foi expandida com o argumento formato.
Caso formato='geojson', então será retornado um arquivo GeoJSON semelhante ao da função depreciada.

>>> ibge.malha(localidade, formato='geojson')

DadosAbertosBrasil.uf.UF

Métodos da classe UF atualizados de acordo com as respectivas funções originais.

DadosAbertosBrasil v0.3.2

03 Oct 21:22
Compare
Choose a tag to compare

Este release expande e padroniza as funções do módulo senado.

A principal novidade, além de novas funções, é a possibilidade de retornar os dados por default no formato pandas.DataFrame, facilitando a visualização e navegação.

DadosAbertosBrasil.senado.Senador

Todos os métodos agora possuem um parâmetros formato que pode receber dois possíveis valores:

  • 'dataframe' para retornar uma tabela formatada de dados;
  • 'json' para retornar os dados brutos no formato JSON convertido para dict.

Caso formato='dataframe', é possível ativar o novo argumento index para definir a coluna 'codigo' como index do DataFrame.

>>> s = senado.Senador(5012)
>>> s.filiacoes(formato='dataframe', index=True)
       sigla                            nome data_filiacao data_desfiliacao
codigo                                                                     
565     REDE           Rede Sustentabilidade    2015-09-29              NaT
458     PSOL  Partido Socialismo e Liberdade    2011-01-28       2015-09-28

Algumas gambiarras internas foram reescritas e agora temos um novo atributo telefones para os senadores.

>>> s.telefones
['33036777', '33036568']

E, por último, a classe Senador agora possui dois novos métodos: cursos e profissoes.

>>> s.cursos()
                                                nome  grau_instrucao  \
0             licenciatura e bacharelado em Historia        Superior   
1                                            DIREITO        Superior   
2       MBA Executivo em Gestão e Políticas Públicas  Especialização   
3                                    Direito Público  Especialização   
4  Mestrado Profissional em Políticas Públicas e ...        Mestrado   

DadosAbertosBrasil.senado.lista_senadores

Esse é a função que eu mais reescrevi ao longo do desenvolvimento do módulo, mas agora finalmente cheguei em uma versão definitiva.

Ela unifica as funções lista_atual e lista_afastados, retorna um DataFrame e possui diversos novos parâmetros. Veja os exemplos.

Lista todos os senadores ativos, colocando o código como index da tabela.
    >>> senado.lista_senadores(index=True)
                   nome_parlamentar                nome_completo \
    codigo                                                         
    4981               Acir Gurgacz          Acir Marcos Gurgacz
    5982          Alessandro Vieira            Alessandro Vieira
    945                 Alvaro Dias        Alvaro Fernandes Dias
    ...                         ...                          ...
Lista senadores do partido PL do Rio de Janeiro.
    >>> senado.lista_senadores(partido='PL', uf='RJ')
      codigo nome_parlamentar              nome_completo       sexo \
    0   5936  Carlos Portinho  Carlos Francisco Portinho  Masculino
    1   5322          Romário     Romario de Souza Faria  Masculino
Lista senadores contendo 'Gomes' no nome, exceto os que contém 'Cid'.
    >>> senado.lista_senadores(contendo='Gomes', excluindo='Cid')
      codigo nome_parlamentar                nome_completo       sexo \
    0   3777    Eduardo Gomes  Carlos Eduardo Torres Gomes  Masculino
    1   5979     Leila Barros   Leila Gomes de Barros Rêgo   Feminino
    2   5557     Mailza Gomes        Mailza Assis da Silva   Feminino
Lista senadoras afastadas do sexo feminino.
    >>> senado.lista_senadores(tipo='afastados', sexo='F')
      codigo nome_parlamentar                    nome_completo      sexo \
    0   3713   Fátima Bezerra          Maria de Fátima Bezerra  Feminino
    1   5929      Juíza Selma       Selma Rosane Santos Arruda  Feminino
    2   5997     Nailde Panta  Nailde Fernandes Panta da Silva  Feminino
    ..   ...              ...                              ...       ...

Os mesmos argumentos também estão disponíveis para a função senado.lista_legislatura.

DadosAbertosBrasil.senado: Novas funções

  • senado.lista_blocos
  • senado.lista_partidos (função refatorada)
  • senado.lista_uso_palavra
  • senado.orcamento

DadosAbertosBrasil._utils.errors

As Exceptions deste módulo agora são importadas no DadosAbertosBrasil.__init__.

Isso significa que elas estão mais acessíveis para captura de erros. Veja um exemplo de antes-e-depois.

import DadosAbertosBrasil as dab

moeda = 'Moeda inválida'

# Antes
try:
    dab.bacen.cambio(moedas=moeda)
except dab._utils.errors.DAB_MoedaError:
    print('Moeda inválida')

# Depois
try:
    dab.bacen.cambio(moedas=moeda)
except dab.DAB_MoedaError:
    print('Moeda inválida')

DadosAbertosBrasil.UF

Os atributos deputados e senadores da classe DadosAbertosBrasil.UF foram ajustados, contendo todos os argumentos das funções originais e o novo formato do senado.lista_senadores.

DadosAbertosBrasil v0.3.1

19 Sep 21:02
Compare
Choose a tag to compare

Este release trás um pouco de história para o DadosAbertosBrasil.

O módulo ibge for expandido com novas funções e classes para coleta de textos e fotos históricos de todas as localidades do Brasil. Convenientemente, a função ibge.localidade foi atualizada para facilitar a busca pelos códigos das localidades.

DadosAbertosBrasil.ibge.Historia

Captura textos da história e fundação da localidade desejada. Veja o exemplo onde o histórico de Belo Horizonte é instanciado na variável bh contendo atributos como fonte, autor, ano, etc.

>>> from DadosAbertosBrasil import ibge
>>> bh = ibge.Historia(localidade=310620)
>>> bh.historico
'Foi à procura de ouro que, no distante 1701, o bandeirante João Leite...'

>>> bh.historico_fonte
'Belo Horizonte (MG). Prefeitura. 2014. Disponível em: ...'

Confira todos os parâmetros e atributos na documentação.

help(ibge.Historia)

DadosAbertosBrasil.ibge.Galeria

Cria uma galeria de fotografia da localidade desejada.
A galeria é uma lista de objetos Fotografia, onde cada uma contém seus metadados, incluindo a URL para visualizá-la na web.
Veja o exemplo em que pegamos a URL da primeira foto da galeria de fotos de Fortaleza.

>>> galeria = ibge.Galeria(2304400)
>>> foto = galeria.fotografias[0]

A variável galeria é um objeto do tipo Galeria, cujo atributo fotografias é uma lista de objetos Fotografia.

>>> print(foto)
<DadosAbertosBrasil.ibge: Fotografia 35389>

Chamamos o método url do objeto Fotografia para obter um link para acessá-lo:

>>> foto.url(altura=500)
'https://servicodados.ibge.gov.br/api/v1/resize/image?maxwidth=500&max...'

DadosAbertosBrasil.ibge.localidade

A função localidades foi expandida para facilitar e melhorar a performance da busca por localidades.
Agora é possível definir o nível geográficos das localidades buscadas, filtrar e ordenar dados e definir as subdivisões.

Captura todos os estados do Brasil

>>> ibge.localidades(nivel='estados')
    id sigla                 nome  regiao_id regiao_sigla   regiao_nome
0   11    RO             Rondônia          1            N         Norte
1   12    AC                 Acre          1            N         Norte
2   13    AM             Amazonas          1            N         Norte
3   14    RR              Roraima          1            N         Norte
4   15    PA                 Pará          1            N         Norte
.. ...   ...                  ...        ...          ...           ...

Captura todos os distritos do Brasil, colocando o ID como index.

>>> ibge.localidades(index=True)
                          nome  municipio_id  ... regiao_sigla   regiao_nome
id                                            ...                           
520005005      Abadia de Goiás       5200050  ...           CO  Centro-Oeste
310010405  Abadia dos Dourados       3100104  ...           SE       Sudeste
520010005            Abadiânia       5200100  ...           CO  Centro-Oeste
520010010       Posse d'Abadia       5200100  ...           CO  Centro-Oeste
310020305               Abaeté       3100203  ...           SE       Sudeste
...                        ...           ...  ...          ...           ...

Captura todos os municípios do estado do Rio de Janeiro (localidade=33)

>>> ibge.localidades(nivel='estados', divisoes='municipios', localidade=33)
         id                nome  microrregiao_id           microrregiao_nome  \
0   3300100      Angra dos Reis            33013         Baía da Ilha Grande   
1   3300159             Aperibé            33002      Santo Antônio de Pádua   
2   3300209            Araruama            33010                       Lagos   
3   3300225               Areal            33005                   Três Rios   
4   3300233  Armação dos Búzios            33010                       Lagos   
..      ...                 ...              ...                         ...

DadosAbertosBrasil.ibge.malha

A função malha foi atualizada com a nova versão da API do IBGE, permitindo uma parametrização de subdivisões semelhantes à da função ibge.localidades. Além disso, há agora a opção de gerar uma URL para a malha em formato SVG ou gerar um arquivo JSON nos formatos TopoJSON ou GeoJSON.

Captura a malha do Distrito Federal (localidade=53) em formato GeoJSON.

>>> ibge.malha(localidade=53, formato='geojson')
{'type': 'FeatureCollection',
    'features': [{'type': 'Feature',
        'geometry': {'type': 'Polygon',
            'coordinates': [[[-47.31, -16.0363], ...

Captura a malha de Joinville em formato SVG com qualidade mínima.

>>> ibge.malha(
...     nivel = 'municipios',
...     localidade = 4209102,
...     formato = 'svg',
...     qualidade = 'minima'
... )
'https://servicodados.ibge.gov.br/api/v3/malhas/municipios/4209102?...'

Captura a malha do Brasil subdividido por UF em formato TopoJSON.

>>> ibge.malha(
...     nivel = 'paises',
...     localidade = 'BR',
...     divisoes = 'uf',
...     formato = 'json'
... )
{'type': 'Topology',
    'arcs': [[[32967, 111009], [-821, 372]],
        [[32146, 111381],
        [133, 124],
        [15, 106], ...

Remoção da dependência do openpyxl

Anteriormente, a função ibge.coordenadas dependia do pacote openpyxl (ou qualquer engine de Excel) para executar o pd.read_excel no arquivo contendo as coordenadas. Esse arquivo foi substituído por um .csv e a função foi substituída por pd.read_csv sem a necessidade de uma engine para leitura.

Reestruturação interna no módulo ibge

O módulo ibge foi quebrado em quatro submódulos para facilitar a expansão do módulo e categorizar os diversos serviços do IBGE. Os módulos são:

  • _ibge.cidades;
  • _ibge.sidra;
  • _ibge.nomes;
  • _ibge.misc.

Na prática, não fará diferença, pois eles são importados automaticamente com o módulo ibge.

>>> from DadosAbertosBrasil import ibge

DadosAbertosBrasil.UF

Foram adicionados os métodos historia e galeria ao objeto UF.

>>> from DadosAbertosBrasil import UF
>>> ac = UF('acre')
>>> historia = ac.historia()
>>> galeria = ac.galeria()