Giter VIP home page Giter VIP logo

brasil.io's Introduction

Brasil.IO - Dados abertos para um Brasil mais ligado

Django CI

O Problema

Muitos dados públicos brasileiros estão disponíveis (principalmente depois da criação da Lei de Acesso à Informação), mas não necessariamente acessíveis. Mesmo que a informação esteja disponível, nem sempre ela está disponível em um formato legível por máquina, ou utilizando um formato aberto, ou possui descrição (metadados) que facilitem a interpretação (manual ou automática) desses dados. Quanto menos acessível é uma informação, mais perto de ser fechada ela está.

Além do problema relativo à acessibilidade, não existe um lugar comum em que todos os dados disponíveis estejam organizados e catalogados, dificultando ainda mais o acesso (ou a descoberta que esse tipo de informação está disponível).

O objetivo do projeto não é concorrer com iniciativas correlatas do Governo (como o dados.gov.br) e de outras organizações -- pelo contrário, gostaríamos de disponibilizar os dados que essas organizações já disponibilizam, porém de forma integrada e estruturada, permitindo a qualquer um (independente de vínculo) possa disponibilizar dados, independente da fonte.

A Solução

O projeto Brasil.IO foi criado com o objetivo de ser referência para quem procura ou quer publicar dados abertos sobre o Brasil de forma organizada, legível por máquina e usando padrões abertos. O projeto foi idealizado e está sendo desenvolvido por Álvaro Justen, com a colaboração de outros desenvolvedores.

Colabore

Entre em contato com o Brasil.IO por chat!

Veja CONTRIBUTING.md para mais detalhes sobre como montar seu pull request.

Há duas formas de rodar o projeto em sua máquina, uma utilizando o PostgreSQL como um container Docker e outra utilizando o PostgreSQL rodando diretamente em sua máquina. Vamos começar pela que utiliza o Docker:

Primeiramente, certifique-se de que você tenha instalados:

e em seguida clone o repositório:

# Clonar o repositório:
git clone [email protected]:turicas/brasil.io.git

Siga os passos:

# Instale o Python 3.6.4 usando o pyenv:
pyenv install 3.6.4

# Criar um virtualenv:
pyenv virtualenv 3.6.4 brasil.io

# Copie o arquivo de env de exemplo e edite o .env de acordo com suas preferências
cp env.example .env

# Criar containers e ativar o virtualenv
cd brasil.io
source .activate

# Instalar dependências
pip install -r requirements.txt

# Iniciar os containers (bancos de dados, e-mail)
docker-compose up

# Criar schema e popular base de dados
python manage.py migrate
python manage.py update_data

# Iniciar o servidor HTTP
python manage.py runserver

Caso você escolha não utilizar o docker, siga os seguintes passos:

Certifique-se de que você tenha instalados:

e em seguida clone o repositório:

# Clonar o repositório:
git clone [email protected]:turicas/brasil.io.git

Após instalar o PostgreSQL crie o banco de dados que será utilizado pelo projeto. Como o docker não está sendo utilizado será necessário comentar algumas linhas no arquivo .activate. Comente as seguintes linhas:

DOCKER_COMPOSE_FILE=docker-compose.yml

if [ -f "$DOCKER_COMPOSE_FILE" ]; then
   docker-compose -p $PROJECT_NAME -f $DOCKER_COMPOSE_FILE up -d
fi

e siga os passos:

# Instale o Python 3.6.4 usando o pyenv:
pyenv install 3.6.4

# Criar um virtualenv:
pyenv virtualenv 3.6.4 brasil.io

# Modifique o arquivo .env para as configurações do seu banco de dados
# Caso você use as configurações padrões, o arquivo será parecido com:
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=<senha>
POSTGRES_DB=brasilio
DATABASE_URL=postgres://postgres:[email protected]:5432/brasilio

# Ativar o virtualenv
cd brasil.io
source .activate

# Instalar dependências
pip install -r requirements.txt

# Criar schema e popular metadados dos datasets
python manage.py migrate
python manage.py update_data

# Iniciar o servidor HTTP
python manage.py runserver

Para importar alguma base de dados para rodar no sistema é necessário o baixar o dump aqui.

Alguns arquivos demoram bastante para serem importados, pois são muito grandes. Um exemplo de arquivo menor é o dataset cursos-prouni.

Após fazer o download do arquivo basta executar o seguinte comando:

python manage.py import_data --no-input cursos-prouni cursos cursos-prouni.csv.xz

Nota 1: caso queira importar diversos datasets, crie um diretório data, coloque lá os diretórios de dados existentes no Google Drive e execute o arquivo scripts/import-datasets.sh, que executará todos os import_data.

Nota 2: você pode baixar um arquivo grande e importar somente parte dele para que o processo não demore muito. Para isso, basta descompactar o CSV e criar um novo arquivo com menos linhas, exemplo: xzcat socios.csv.xz | head -10000 | xz -z > socios-10k.csv.xz. Essa dica é particularmente útil para você ter o sistema todo funcionando (como as páginas especiais, que dependem de diversos datasets).

O comando import_data irá executar as seguintes operações:

  • Deletar a tabela que contém os dados (data_cursosprouni_cursos), caso exista;
  • Criar uma nova tabela, usando os metadados sobre ela que estão em Table e Field;
  • Criar um gatilho no PostgreSQL para preenchimento automático do índice de busca de texto completo;
  • Importar os dados do CSV usando rows.utils.pgimport (que usa o comando COPY da interface de linha de comando psql);
  • Rodar o comando SQL VACUUM ANALYSE para que o PostgreSQL preencha estatísticas sobre a tabela (isso ajudará a melhorar o desempenho de diversas consultas);
  • Criar os índices em campos que estão marcados como possíveis de serem usados como filtros na interface, para otimizar a busca;
  • Preencher um cache em Field contendo todas as possíveis opções para os campos que estão marcados como "choiceable" (são os campos filtráveis e que possuem poucas opções de valor, como unidade federativa, ano etc.).

Nota 1: você pode pular algumas das etapas acima passando as opções --no-xxx para o comando.

Nota 2: em um computador moderno (Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz, 16GB RAM e SSD) os dados costumam demorar entre 2.3 a 2.7MB/s para serem importados completamente (esse valor é o do dado descompactado).

Deployment no Dokku

Veja deploy-dokku.md.

Licença

GNU General Public License version 3

brasil.io's People

Contributors

augusto-herrmann avatar berinhard avatar caiocarrara avatar diraol avatar drunpy avatar eduardostalinho avatar endoedgar avatar felippem avatar flavioamieiro avatar furansa avatar jessicapaz avatar jtrecenti avatar juhhcarmona avatar juliakastrup avatar karranb avatar karranbesensp avatar lucashanke avatar luisberns avatar monteirocamis avatar mtrpires avatar thenets avatar turicas avatar

Watchers

 avatar  avatar

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.