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.
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.
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.
Para ambientes locais, você pode seguir os seguintes passos:
-
Criar ambiente isolado com virtualenv
$ mkvirtualenv salicml -p /usr/bin/python3.6
-
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
Nosso algoritmos utilizam a biblioteca pandas, uma excelente biblioteca para lidar com dados em formato de tabela. Nosso flow de trabalho é:
-
Gerar pandas dataframes a partir de um banco de dados.
-
Gerar arquivos
pickle
comprimidos destes dataframes. -
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.
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.
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
empickles
:$ 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
-
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
Aqui são descritos os passos necessários para quem acabou de instalar o ambiente:
- Baixar os arquivos
pickle
$ inv get-pickles
- Popular o banco com projetos
$ inv update-models
- Treinar as métricas
$ inv train-metrics
- Subir o servidor
$ inv run
O salic-ml é desenvolvido sob a Licença GPLv3.