Automate the Salic proposal admission process


License
GPL-3.0
Install
pip install salic-ml==0.0.6

Documentation

Salic - Machine Learning

O salic-ml é um projeto aberto que utiliza inteligência artificial para otimizar e automatizar o ciclo de vida de projetos culturais viabilizados pela Lei Rouanet e acompanhados pelo sistema Salic.

O projeto se iniciou em março de 2018, em uma parceria entre o LAPPIS e o Ministério da Cultura (MinC). A primeira fase do projeto teve foco no levantamento do ciclo de vida de projetos culturais e em seus principais pontos de melhoria. Em julho de 2018 foi iniciada a Fase 2 do projeto e foram definidas as primeiras metas e entregas de curto e médio prazo. Detalhes de pesquisa e planejamento estão disponíveis da seção Wiki e discussões e principais ideias podem ser encontradas na seção Issues.

A parceria contou com a contribuição de diversos funcionários do MinC e do LAPPIS e entre os idealizadores e principais contribuidores, é possível citar: Carla Rocha e Fábio Mendes (coordenadores do LAPPIS) e Joênio Costa, Luciano Prestes, Victor Moura, Eduardo Nunes, Fabíola Malta, Rodrigo Oliveira, Pablo Diego, João Guilherme, Daniel Guerreiro, Felipe Duerno, Alexandre Torres, Lucas Mattioli, Marlon Mendes, Ricardo Poppi e Rodrigo Maia.

O projeto salic-ml é dividido em uma API REST para disponibilização de indicadores a respeito dos projetos submetidos para a lei rouanet e um pacote de algoritmos utilizados para o cálculo de métricas.

Contribuição

Para acompanhar nosso planejamento por sprint e a longo prazo, instale o plugin ZenHub para o GitHub e acesse a aba que fica ao lado da aba de Pull requests neste repositório.

Requisitos

Existem duas maneiras de executar este projeto, sendo uma com ambiente local e outra utilizando Docker.

Para um ambiente de desenvolvimento local, você irá precisar da versão 3.6, ou superior, do Python. Além disso, é recomendado que você possua instalado o virtualenv, um ótimo isolador de ambientes Python e junto com ele o virtualenvwrapper.

Instalação

Para ambientes locais, você pode seguir os seguintes passos:

  1. Criar ambiente isolado com virtualenv

    $ mkvirtualenv salicml -p /usr/bin/python3.6
  2. Instalar as dependências dentro do ambiente virtual

    $ python setup.py develop

Para ambientes docker, basta executar o docker-compose:

    $ sudo docker-compose -f docker/docker-compose.yml up

Como lidamos com os dados

Nosso algoritmos utilizam a biblioteca pandas, uma excelente biblioteca para lidar com dados em formato de tabela. Nosso flow de trabalho é:

  1. Gerar pandas dataframes a partir de um banco de dados.

  2. Gerar arquivos pickle comprimidos destes dataframes.

  3. Acessar estes arquivos pickle com nossa api de dados:

    from salicml.data import data
    
    data.planilha_orcamentaria

Todos os dataframes em forma de arquivos pickle, são armazenados neste repositório da pasta data/raw, e ficam disponíveis para acesso via Python pela nossa api de dados.

Reprodução de pesquisas

Após a instalação, execute o seguinte comando a partir da raiz do diretório:

$ jupyter-notebook

Este comando abrirá uma página o navegador. A partir deste navegador, entre no diretório research/notebooks e abra o notebook desejado. Estrutura de pastas para armazenar os notebooks de estudo e pesquisa:

  • Doing: notebooks que estão sendo desenvolvidos.

  • Exploratory: notebooks usados para exploração. Pode conter "rascunhos", notebooks não finalizados ou finalizados mas com pouca relevância. Seguem o formato <Descrição do Notebook>-<Versão>.

  • Report: Notebooks com os resultados das pesquisas. Esta pasta contém as versões de notebooks estáveis e atualizados das pesquisas realizadas.

Tasks comuns

Este projeto utiliza tasks do invoke para automatizar tarefas.

  • Subir o servidor de desenvolvimento da API:

    $ inv run
  • Popular o banco de dados local com os projetos do banco de dados remoto:

    $ inv update-models
  • Baixar os arquivos pickles:

    $ inv get-pickles
  • Gerar dataframes de teste

    $ inv gen-test-df
  • Setar quais datasets usar (desenvolvimento, produção ou teste)

    $ inv set-data datatype=prod
    $ inv set-data datatype=dev
    $ inv set-data datatype=test
  • Transformar arquivos csv em pickles:

    $ inv pickle
  • Treinar os algoritmos de cálculo de métricas:

    $ inv train-metrics
  • Gerar um arquivo pickle a partir de uma consulta de banco:

    $ inv run-sql
  • Criar migrações:

    $ inv make
  • Executar migrações:

    $ inv migrate
  • Alias para python manage.py:

    $ inv manager

Outros comandos

  • Para que tenha acesso a lista de comandos digite em seu terminal:

     $ invoke --list
    
  • Para ler a descrição de um comando específico (exemplo comando run):

     $ invoke --help run
    

Primeiros passos

Aqui são descritos os passos necessários para quem acabou de instalar o ambiente:

  1. Baixar os arquivos pickle
    $ inv get-pickles
  2. Popular o banco com projetos
     $ inv update-models
  3. Treinar as métricas
    $ inv train-metrics
  4. Subir o servidor
    $ inv run

Licença

O salic-ml é desenvolvido sob a Licença GPLv3.