[Gastosabertos-dev] CSV -> Restful API

Edgar Zanella Alvarenga e em vaz.io
Quarta Março 25 00:28:35 UTC 2015


On 24/03/2015 20:40, Luiz Armesto wrote:
> Achei a ideia bem interessante e útil. Também me parece que é
> possível descrever bem o processo de criação de uma API para
> fornecer dados de um CSV e com isso tentarmos automatizar.
>
> As inferências de tipos de dados das colunas e de quais possuem
> identificador único parece ser bem tranquilo.

Sim, e possíveis de serem criados em classes independentes, tornando
o sistema mais modular e fácil de expandir.

> Quais colunas possuem dados categóricos também não acho que seria
> difícil.

Sim, se não for numérico ou data, contamos o número de valores
distintos. De for um número menos que o número de linhas, provavelmente
é categórico.

> A parte de achar a hierarquia pode ser meio complicado. Precisaria
> mesmo de confirmação de um usuário. 
> Não sei se compreendi direito a ideia da contagem das colunas. Tem
> algum exemplo simples para demonstrar? 

Veja o email que o Andres enviou, não tinha sido claro em como escrevi.

> Em uma hierarquia simples, se entendi bem, acho que essa contagem
> funcionaria com uma frequência boa, mas em cenários mais complexos
> não sei.

Sim, com certeza teremos a confirmação do usuário no final, mas mesmo
sem isso acho que algumas regras mínimas cobrirão a maior parte dos
casos, o que vai ser bom para oso usuários que não tiverem idéia que
vale a pena separarem seus próprios dados em categorias.

> Sobre uma possível arquitetura, acho que seria interessante
> desmembrar essa ferramenta em duas, que formariam um pipeline.
>
> Teriamos uma ferramenta que recebe o CSV e uma espécie de schema (um
> json por exemplo) -- o schema descreveria o modelo do banco de dados,
> como processar o CSV para popular o banco e quais os endpoints serão
> criados, uma espécie de receita --  e a partir dele criaria os
> modelos e a API em si. Uma outra ferramenta, separada, que seria a de
> inferência. Ela receberia o CSV, faria todo o trabalho de inferência
> e confirmação e teria como saída esse schema. O que acham?

Acho ótimo, não tinha pensado em quebrar dessa forma mas faz todo 
sentido.
Só não entendi porque descreveu o pipeline no email na ordem reversa! 
Tá
estudando alemão ou alguma stack language? :)

Mas o que acho mais interessante de irmos nessa direção é que teremos 
uma
ferramenta de uso genérico que poderá interessar muito mais gente do 
que
se focarmos em algo que pareça apenas para dados orçamentários. Ao 
invés
de um nome como OpenSpending, seria algo como MagicAPI (nome fantasia 
que
me veio agora, não precisam levar muito a sério). Quem sabe mais tarde
até expandimos para outros datasources que não CSV's.

abs,
Edgar

> []s
>
> 2015-03-24 18:38 GMT-03:00 Edgar Zanella Alvarenga <e em vaz.io [4]>:
>
>> Eu comentei no email anterior uma idéia de ferramenta para gerar
>> APIs
>> RESTful a partir de um CSV. Deixei para descrever em detalhes num
>> outro
>> email, que é este:
>>
>>  Criamos para a visualização da página da Receita uma API
>> contruída
>>  em cima do Flask utilizando a extensão RESTful. Se quisermos
>> criar uma
>>  nova API a partir de um de nossos outros dados iremos
>> provavelmente
>>  replicar boa parte do trabalho que tivemos, copiando e colando
>> código,
>>  mudando nomes aqui e acolá, tirando um argumento de busca,
>> adicionando
>>  outros. Me pareceu que todo esse processo poderia ser
>> automatizado de
>>  certa forma.
>>
>> Pensando nisso acabei pensando no processo para criação da API e
>> tentei
>> generalizar parcialmente o que foi feito. Me parece que se tivermos
>> um
>> CSV deveremos:
>>
>>  1 Identificar os tipos das colunas.
>>  2 Identificar quais coluans possivelmente possuem um
>> identificador único.
>>  3 Quais colunas possuem dados categóricos.
>>  4 Quais colunas possuem algum tipo de relação hierárquica.
>>
>> Todos os passos acima podem ser automatizados ou serem realizados
>> com ajuda
>> de um humano, perguntando se as inferências realizadas foram
>> corretas ou não.
>>
>> O passo 4 pode ser feito de forma algorítmica mas com
>> confirmação do usuário
>> analisando:
>>
>>  * Coluna X possui quantas linhas no CSV?
>>  * Coluna W possui quantas linhas no CSV?
>>
>> Se número de linhas de W for maior que X, pode-se supor que X
>> está numa hierarquia
>> acima de W. O número de linhas de W será maior ou igual ao
>> número de linhas de X,
>> conseguem compreender?
>>
>> Resumindo, a idéia é que depois de poucos passos, após uma
>> inferência automatizada
>> seja criado um modelo no banco de dados e diversos endpoints para
>> ele. Essa ferramenta
>> iria muito além de dados de gastos públicos, o que é excelente
>> se formos pensar
>> em termos estratégicos para conseguirmos mais desenvolvedores
>> interessados no projeto.
>> De certa forma isso é o que é feito atualmente no OpenSpending,
>> mas a parte de inferência
>> é inexistente, e o modelo de dados que geram é muito restrito,
>> limitando-se a um
>> modelo possuindo uma coluna temporal e uma com informação float.
>>
>> Eu dei uma pesquisada rápida a algum tempo atrás por algo desse
>> tipo e não obtive muitos
>> resultados, apenas discussões onde técnicos ou developers
>> demonstraram ter interesse
>> que uma ferramenta do gênero existisse. O máximo que encontrei
>> foi isso:
>>
>>  * https://github.com/project-open-data/csv-to-api [1]
>>
>> O que acham? Ambicioso demais? Genérico demais? Too much work?
>>
>> Idéias, críticas e sugestões, não sejam polidos!
>> E.
>> _______________________________________________
>> Gastosabertos-dev mailing list
>> Gastosabertos-dev em lists.okfn.org [2]
>> https://lists.okfn.org/mailman/listinfo/gastosabertos-dev [3]




Mais detalhes sobre a lista de discussão Gastosabertos-dev