Giter Site home page Giter Site logo

arianerocha / brasil.io Goto Github PK

View Code? Open in Web Editor NEW

This project forked from turicas/brasil.io

0.0 0.0 0.0 1.28 MB

Backend da API do https://Brasil.IO/

License: GNU General Public License v3.0

Shell 1.46% Python 66.18% HTML 26.72% CSS 4.67% JavaScript 0.97%

brasil.io's Introduction

Brasil.IO - Dados abertos para um Brasil mais ligado

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

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

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

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

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 balneabilidade-bahia.

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

python manage.py import_data --no-input balneabilidade-bahia balneabilidade balneabilidade-bahia.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_balneabilidadebahia_balneabilidade), 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).

Deploying on Dokku

Dokku is a very small plataform-as-a-service software, it works like Heroku and can be used to easily deploy apps in your own infrastructure.

  • On remote machine:
    • Install dokku
    • Install needed plugins:
      • dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
      • dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
    • Run dokku apps:create brasilio-web
  • On local machine:
    • git remote add dokku dokku@HOSTNAME:brasilio-web
    • git push dokku master
  • On remote machine:
    • dokku postgres:create brasilio-pgsql
    • dokku postgres:expose brasilio-pgsql
    • dokku postgres:link brasilio-pgsql brasilio-web
    • dokku config:set brasilio-web DEBUG=False
    • dokku ps:scale brasilio-web web=4
    • dokku domains:add brasilio-web brasil.io
    • dokku domains:add brasilio-web api.brasil.io
    • dokku domains:add brasilio-web www.brasil.io
    • dokku letsencrypt brasilio-web
    • Put .csv.xz files inside /root/data and run: dokku storage:mount brasilio-web /root/data:/data
    • dokku run brasilio-web /bin/bash
    • Inside container:
      • cd /app && python manage.py migrate
      • cd /app && python manage.py createsuperuser
      • cd /app && python manage.py update_data
      • cd /app && python manage.py import_data <dataset-slug> <tablename> /data/<filename.csv.xz>

Licença

GNU General Public License version 3

brasil.io's People

Contributors

turicas avatar berinhard avatar juhhcarmona avatar lucashanke avatar karranb avatar eduardostalinho avatar jessicapaz avatar mtrpires avatar diraol avatar flavioamieiro avatar juliakastrup avatar karranbesensp avatar drunpy avatar thenets avatar monteirocamis 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.