GithubHelp home page GithubHelp logo

turicas / brasil.io Goto Github PK

View Code? Open in Web Editor NEW
910.0 63.0 144.0 3.28 MB

Backend do Brasil.IO (para código dos scripts de coleta de dados, veja o link na página de cada dataset)

Home Page: https://brasil.io/

License: GNU General Public License v3.0

Python 78.29% Shell 0.50% HTML 14.76% JavaScript 3.62% CSS 2.27% Makefile 0.36% Dockerfile 0.18% Procfile 0.02%
opendata brazil python data dados-abertos brasil hacktoberfest

brasil.io's Introduction

Brasil.IO - Dados abertos para um Brasil mais ligado

Django CI

Acesse os datasets disponíveis em https://brasil.io/.

Sobre o projeto

Apesar de existirem diversas bases de dados públicas disponíveis no Brasil (principalmente depois da criação da LAI - Lei de Acesso à Informação), nem sempre esses dados estão acessíveis. Se a informação não está em formato estruturado/legível por máquina, utilizando formatos abertos ou falta documentação (metadados) ela está mais próxima de ser fechada do que aberta.

O Brasil.IO nasceu para resolver esse problema: tornar dados abertos mais acessíveis. Fazemos isso por meio da criação de programas que automatizam o processo de coleta, limpeza e enriquecimento dos dados (que chamamos de libertação de dados) e disponibilizando os dados para consulta e download. Além disso, fazemos ativismo, utilizando a LAI, para que tenhamos mais dados abertos disponíveis e com melhor qualidade.

Colabore

Temos alguns documentos com instruções para te ajudar a colaborar com o projeto:

Licença

GNU General Public License version 3

brasil.io's People

Contributors

augusto-herrmann avatar berinhard avatar caiocarrara avatar dependabot[bot] avatar diraol avatar drunpy avatar eduardostalinho avatar endoedgar avatar eternoinconformado avatar felippem avatar flavioamieiro avatar furansa avatar hilam avatar humbhenri avatar jessicapaz avatar josecatalani avatar jtrecenti avatar juhhcarmona avatar juliakastrup avatar karranb avatar karranbesensp avatar lucashanke avatar luisberns avatar marcmatias avatar monteirocamis avatar mtrpires avatar rhenanbartels avatar riverfount avatar thenets avatar turicas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

brasil.io's Issues

Implementar formulários

  • Página "contato": pode ser um Google Form
  • Página "Sugira um dataset para libertarmos": pode ser um Google Form

Utilizar somente `Last-Modified` ou campo dentro do corpo do resultado?

A utilização do campo Last-Modified, além de ser compatível com a filosofia REST, é útil para sistemas de cache.

A utilização de um campo específico para última data de atualização dentro do corpo da representação do recurso retornado facilita o uso do dado por desenvolvedores e possibilita que não-desenvolvedores tenham esse dado só de baixar a representação do recurso (sem precisar olhar os headers HTTP - coisa que provavelmente não saberão fazer).

Como será a funcionalidade de busca/filtros?

Perguntas a serem respondidas:

  • Quais parâmetros aceitar na query string para filtrar dados? Filtros por determinados valores, ordernação etc.
  • Quais parâmetros estarão presentes em recursos do tipo "coleção" e recursos do tipo "instância"?
  • Teremos busca por texto completo? Faz sentido?

Suportar `?expand`, para automaticamente expandir sub-recursos?

Essa funcionalidade poderá ser útil, principalmente para reduzir o número de requisições, porém pode ser custosa em termos de processamento e aumentar muito o tempo de resposta. Por conta disso, se suportada, deve ter um limite (exemplo: expandir apenas o primeiro nível).

Criar modelo de dados inicial

  • Criar models básicos (Dataset, Link, Version, Table e Field)
  • Habilitar Django Admin
  • Levantar dados sobre bases já libertadas (salarios-magistrados, socios-brasil e cursos-prouni)
  • Criar management command para atualizar esses models

Fix pg memory error

Internal Server Error: /dataset/documentos-brasil
It happens when we try to filter by some specific fields (like document type = CPF in documentos-Brasil dataset).

OperationalError at /dataset/documentos-brasil could not resize shared memory segment “/PostgreSQL.125637135” to 50438144 bytes: No space left on device

Atualizar o Footer

Adicionar no footer

  • link para listar quem está doando,
  • link para equipe
  • link para listar quem está usando

Criar um módulo para federalizar a API/Brasil.io

Imagina que poderia ter uma instância do Brasil.io voltado as políticas de dados abertos de um determinado munícipio; Ao mesmo tempo os recursos dessa API pode ser espelhada/acessada por qualquer outro nó na rede do "Brasil.io";

Imagina que um Órgão público pode utilizar esse mesmo módulo já para oferecer acesso API; fazendo parte dessa rede maior de dados/APIs abertas;

Enfim, é um pouco do CKAN + DSpace (Handle); Quando mais um ambiente entra no ecossistema é mais um nó fornecendo e possibilitando consumo/replicação de dados pela rede.

Dados ambientais sobre municípios

A ideia é exatamente o que eu procurava, porém eu precisava de dados mais detalhados sobre os municípios em si, principalmente sobre meio ambiente...

Fica a sugestão para futuras implementações

Implementar busca através de ElasticSearch

Atualmente estamos utilizando a busca através do PostgreSQL (índice Gin), mas o índice demora muito para ser atualizado (core.models.DynamicModelQuerySet.update_search_index), o que pode atrasar bastante o processo de importação de novos datasets. Uma possiblidade seria utilizar um outro serviço, como o elasticsearch.

Tarefas:

  • Instalar/configurar elasticsearch no projeto
  • Alterar código que cria índice para utilizar ES
  • Alterar código da view que faz a busca para utilizar ES
  • Criar índices no servidor de produção

Forçar o login para acessar as rotas especiais

Para a primeira versão não precisamos implementar os planos completamente, apenas será necessário que a usuária esteja autenticada para acessar todas as views especiais. Por enquanto a API fica aberta.

Tarefas:

  • Adicionar "BETA" ao logotipo
  • Colocar @login_required em todas views especiais
  • Adicionar warning no template das views especiais explicitando que por enquanto é de graça, mas cobraremos pelo acesso a essas páginas
  • Caso a usuária não esteja autenticada e tente acessar uma view especial, mostrar mensagem explicando que aquela página requer cadastro (que por enquanto está gratuito -- talvez possa ser o mesmo warning) com um link para a página de cadastro (ou então pode redirecionar para a tela de cadastro e mostrar esse warning lá -- se possível, depois do cadastro redirecionar para a página que foi acessada inicialmente).

O warning pode ser algo nessa linha (não precisa deixar super bonito agora):

  <div class="col s12 m12">
    <div class="card horizontal">
      <div class="card-stacked">
        <div class="card-content">
          <h4>
            <i class="material-icons">info</i>
            Contas Gratuitas
          </h4>
          <p>
            Essa página é restrita a quem possui uma conta no Brasil.IO.
            Durante nossa fase BETA as contas serão todas gratuitas - após esse
            período será necessária a assinatura do site para acessar todas as
            páginas restritas.
          </p>
        </div>
      </div>
    </div>
  </div>

Criar página de relação entre pessoas e empresas

  • definir casos de uso
  • identificar datasets que precisam ser importados no neo4j
  • criar infra neo4j
  • criar script de importação no neo4j
  • criar endpoints na API que rodem as consultas desejadas
  • criar frontend que consulta os novos endpoints

Reescrever página "Manifesto"

Falar sobre:

  • Confiança em nossos dados: todos os scripts são software livre
  • Jornalismo aberto
    • Citação das fontes (primárias, secundárias etc.)
    • Descrição da metodologia
    • Liberação do código que gerou os dados
    • Liberação dos dados resultantes da análise
    • Links para sites externos que corroborem as afirmações

Ideias de fontes de dados

Implementar página do dataset

  • Card na home com link para página do dataset
  • Página do dataset: Nome, autor, licença, link para dados, link para código
  • Listagem de links
  • Listagem de Fields do schema

ValueError at /dataset/eleicoes-brasil invalid literal for int() with base 10: ‘None’

Internal Server Error: /dataset/eleicoes-brasil

ValueError at /dataset/eleicoes-brasil invalid literal for int() with base 10: ‘None’

Request Method: GET Request URL: https://brasil.io/dataset/eleicoes-brasil?search=&ano_eleicao=&sigla_uf=CE&num_turno=None&descricao_cargo=&sigla_partido=&descricao_sexo=&cpf_candidato=&nome_candidato=&nome_urna_candidato=&des_situacao_candidatura=&desc_sit_tot_turno= Django Version: 2.0.4 Python Executable: /app/.heroku/python/bin/python Python Version: 3.6.4 Python Path: ['/app', ‘/app/.heroku/python/bin’, ‘/app’, ‘/app/.heroku/python/lib/python36.zip’, ‘/app/.heroku/python/lib/python3.6’, ‘/app/.heroku/python/lib/python3.6/lib-dynload’, ‘/app/.heroku/python/lib/python3.6/site-packages’] Server time: Sab, 12 Mai 2018 15:38:40 +0000 Installed Applications: ['django.contrib.admin',

Criar template/design base

  • Criar o layout
  • Implementar o layout em HTML/CSS

Páginas: home, manifesto, datasets, sugira um dataset, contato, apoie.

Form de sugestão de dataset:

<iframe
  src="https://docs.google.com/forms/d/e/1FAIpQLSebnx76uRb8Ua9GpKtfpNKmCzdaH99PMwl3XnZdxpiit-J24w/viewform?embedded=true"
  width="760" height="500" frameborder="0" marginheight="0"
  marginwidth="0">
  Carregando formulário...
</iframe>

Form de contato:

<iframe
  src="https://docs.google.com/forms/d/e/1FAIpQLSdwqEDhxqwNoqoSdFKWp4LSmXll9bgdMPUp3OUTQ1D_wbjELg/viewform?embedded=true"
  width="760" height="500" frameborder="0" marginheight="0"
  marginwidth="0">
  Carregando formulário...
</iframe>

Tratar campos decimal como monetários

Escrever uma função que verifica se o valor se parece com um tipo decimal (n números, um ponto, dois números) e o formatar como um valor monetário

1234567.89 -> R$ 1.234.567,89

Adicionar visualização de grafo com rede sociedades da empresa

Na página de resumo da pessoa jurídica, necessitamos de uma visualização em grafo da empresa e das relações de sociedade da mesma. Usando TIM BRASIL S/A como exemplo:

O grafo deve ser um grafo direcionado já que ele contém tanto as relações com as empresas da qual a TIM BRASIL S/A é sócia e também as relações com as empresas que compõem o quadro societário da TIM BRASIL S/A.

Já utilizei o D3.js para esse tipo de visualização e ele atende bem. Para recuperar o grafo da api do brasil.io, basta fazer esta requisição.

Suportar SPARQL?

Em princípio, retornaremos os dados em JSON-LD, que é RDF. Com isso, poderíamos disponibilizar um recurso para consultas SPARQL.
Qual software usar?

Como escolher o "dado oficial"?

A ideia da API é que qualquer um possa publicar dados. Dessa forma, um usuário poderá publicar o dado populacao referente ao recurso /unidades-federativas/rj/municipios/tres-rios, mas qualquer outro usuário também poderá fazê-lo. Perguntas:

  • A API deve, pró-ativamente (por padrão), selecionar um "melhor dado" quando for feita uma requisição a /unidades-federativas/rj/municipios/tres-rios/populacao? Se sim, qual seria a heurística? Essa pergunta é importante para facilitar o uso, principalmente por bibliotecas-cliente (para que o usuário tenha o dado sem precisar investir tempo analisando qual a melhor fonte).
  • Quais filtros prover para esses casos? Algumas sugestões:
    • Ordenar por data de envio
    • Selecionar por autor

O projeto está ativo?

Achei este projeto recentemente e achei muito interessante, mas ele parece estar inativo, é o caso?

Adicionar botão para 'experimentar dataset'

eu vi a página de datasets (https://brasil.io/datasets) e pensei em adicionar um segundo link junto do visualizar: experimentar dataset/abrir no binder/(ou qualquer nome melhor =P)

o Binder é um ambiente executável para jupyter notebooks, então a ideia seria adicionar um notebook em outro repositório (ou talvez até aqui no turicas/brasil.io mesmo) com um exemplo de como usar o dataset. eu fiz algo similar nesse repo:
https://github.com/luizirber/2018-desertos
e o link pra acessar no Binder é
https://mybinder.org/v2/gh/luizirber/2018-desertos/master?filepath=Usando%20Pandas%20para%20encontrar%20os%20desertos%20de%20not%C3%ADcias%20no%20Brasil.ipynb

já tem alguém trabalhando em algo parecido, ou é fora do escopo do projeto?

Criar termos de uso

A API contará com envio de dados de diversos usuários e, para isso, precisaremos de termos de uso.
Não tenho experiência, nem conhecimento na criação desse tipo de documento, mas acho que devemos explicitar que:

  • Usuários que abusarem (altas taxas de requisição sem possível explicação, por exemplo) poderão ser banidos para não prejudicar o uso da API por outros usuários;
  • Usuários que enviarem dados se responsabilizam que as informações cedidas são verdadeiras;
  • Todo o conteúdo enviado por usuários (com exceção de alguns dados sobre sua conta, como senha, e-mail e API tokens) será disponibilizado a qualquer um pela API, gratuitamente.

Um bom ponto de partida pode ser o documento Termos de Uso do Participa.BR.

Alguém se disponibiliza a criar esse documento? Algum advogado por aqui?

Endpoint para recuperar o grupo empresarial de uma empresa

Imagine que temos a seguinte configuração de sociedade para empresas:

A --é sócia de--> B --é sócia de--> C --é sócia de--> D <--é sócia de-- E

A ideia é ter um endpoinnt que, partindo de A, monte uma árvore de sociedades considerando sempre as relações de saída. No exemplo acima, o endpoint deveria retornar o seguinte grafo para a busca pela empresa A:

A --é sócia de--> B --é sócia de--> C --é sócia de--> D

Endpoint na API para retornar caminhos no grafo de sócios

Atualmente a listagem do caminho entre as empresas está sendo feita nesta página que foi uma prova de conceito desenvolvida por mim e pelo @turicas.

A ideia é viabilizar um endpoint na api de grafos para já retornar o grafo completo. Para isso, é necessário:

  • Modificar o PathSerializer para retornar não só o menor caminho, mas todos eles;
  • Criar um novo endpoint que se comunique com o PathSerializer;

Essa tarefa é uma tarefa necessária para a conclusão da tarefa #64.

Visualização em grafo para caminhos no grafo de sócios

Assim como teremos os grafos na página de detalhe da empresa (ver #63 para mais info), devemos ter o grafo direcionado demonstrando o caminho societário entre uma empresa e outra.

Atualmente esse caminho está sendo apresentado como uma lista nesta página especial. A ideia é apresentar o output no formato de grafo ao invés de uma listagem.

Depende do endpoint #65 estar pronto!

Próximos passos, tasks, bugs, etc

Cara tentando achar aqui o que posso ajudar, mas não consegui ver qual direção seguir, tem alguma prioridade? bugs? ou coisa assim?

Comunidades

Boa tarde,

Seria possível ter a lista das comunidades de um município?

Dockerização do ambiente completo (dev|test|production)

Atualmente temos um arquivo docker-compose para levantar um servidor de banco de dados.

Para facilitar o setup do ambiente sem ter que mexer com o pyenv, pensei em facilitar arquivos Dockefile* e docker-compose* para os ambiente de desenvolvimento, testing (Travis) e produção.
Neste caso a app django ficaria dentro de um container.

Para simplificar ainda mais, contaremos com um make file que tem instruções simples para: buildar, levantar, parar, ver logs, rodar tests, etc... Então no lugar de rodar comandos docker ... ou docker-compose ... ficaria algo tipo:

  • make dev_compose_build para fazer docker build do stack
  • make dev_compose_up para iniciar a app. pronto!
  • make dev_compose_stop para parar todos os containers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.