Inside TIPI

639ea77b2ed92f49e4704caf0af44252?s=47 Pablo Martín
November 24, 2016

Inside TIPI

Tipi Ciudadano es un proyecto de incidencia política que rescata, categoriza y ordena la información producida en el Congreso de los Diputados (España), siempre en el marco de 21 temáticas relacionadas con la pobreza y la exclusión social.

En esta presentación se hace un amplio repaso a toda la tecnología que hace que tipiciudadano.es pueda funcionar día a día y ofrecer los datos que ofrece.

Proyecto de Ciecode (Fundación Salvador Soler) y la cooperativa Enreda.

639ea77b2ed92f49e4704caf0af44252?s=128

Pablo Martín

November 24, 2016
Tweet

Transcript

  1. 2.

    Pablo Martín Muñoz Hacker Cívico | @pr3ssh Socio trabajador de

    Enreda.Coop Programador de TipiCiudadano.es Cofundador de Openkratio.Org
  2. 4.

    #CowCorollary Las vacas se alimentan de hierba en el campo

    y todo lo que comen es procesado y desechado en forma de heces. Dichas heces son depositadas en el campo, el cual las utiliza como nutriente para generar más hierba y por ello generar más alimento para las vacas. Las aplicaciones consumen datos para su funcionamiento y al final generan datos que serán
  3. 5.
  4. 7.

    • Rendición de cuentas • Apertura de procesos participativos •

    Investigación • Internet de las cosas • Infomediarios • Marketing • Nuevas economías • … • Incidencia política Proyectos basados en datos
  5. 9.
  6. 10.

    Arquitectura de TIPI • Aplicación web • API • Motor

    • Base de datos • Sistema de notificaciones Nota: Muchos de estos elementos son básicos para un proyecto basado en datos.
  7. 11.

    La web de TIPI • Web orientada a datos •

    Buscador básico y avanzado • Exportación de datos a CSV (formato reutilizable) • Navegación completa • Gráfica resumen • Sistema de rankings • Perfil de usuario • Suscripción temática
  8. 12.

    El motor de TIPI • Obtención de datos • Limpieza

    de datos • Procesamiento de datos • Análisis de datos • Resumen • Notificaciones
  9. 13.

    SQL vs NoSQL • Sistema relacional vs Sistema no relacional

    • Implicaciones en velocidad de lectura/escritura • Tipo y coste de escalabilidad • Estructuramiento fuerte de datos vs Schemaless
  10. 14.

    MongoDB almacena los datos • Sistema NoSQL con una gran

    comunidad • Gran ecosistema de servicios • API muy potente (sobretodo la v3) • Integración con muchos frameworks y lenguajes • Instalación sencilla • Lenguaje JSON (BSON para compresión) • Integración directa con MeteorJS ;) • mongodb.com
  11. 15.

    MeteorJS en la capa de aplicación • Javascript como lenguaje

    de la web • MeteorJS habla javascript tanto en cliente como en servidor • Mecanismo de publicación y suscripción • Real time (data) apps (usando websockets) • Bindings entre el elemento HTML y el dato • Sistema de paquetes (atmospherejs.com) • Integración directa con MongoDB ;) • www.meteor.com
  12. 16.

    D3js para la visualización • Sistema de visualización basado en

    javascript • Construye elementos SVG (renderizables por navegadores modernos) • Facilidad de uso • Amplio número de librerías y ejemplos • d3js.com
  13. 17.

    D3js para la visualización Un pequeño consejo: piensa en el

    usuario y elige y valida la visualización
  14. 18.

    La rebelión de los crones • Cron: tarea programable en

    el tiempo y que se ejecuta en background crontab -l # for listing crontab -e # for editing • El tiempo, su mayor enemigo: ◦ ¿Cuánto tiempo tarda su ejecución? ◦ ¿Ha terminado ya la tarea de la que depende otra?
  15. 19.

    Luigi to the rescue • Herramienta creada por Spotify •

    Usada gestionar tareas relacionadas en proyectos de BigData • Construye sistema de ejecución basado en tuberías de procesos • Liberado en Github para su uso • github.com/spotify/luigi
  16. 20.

    Scrapy obtiene los datos • Obtención de información mediante webscraping

    • Scrapy como librería base • Python como lenguaje • Muy potente y versátil • Fácil integración con otras librerías Python • scrapy.org
  17. 21.

    El etiquetado de los datos • Minería de textos básica

    • Basada en reconocimiento de patrones (pcre) • Casi 3000 expresiones regulares • Implementación de “barajado de expresiones”
  18. 22.

    Envío de alertas • En el etiquetado se generan las

    diferentes alertas • Se obtienen los usuarios y sus preferencias de temáticas • Se envían los emails con las diferentes alertas a cada uno • Usamos Sparkpost para el envío
  19. 23.

    Las estadíßticas deTIPI • Método de agregación de MongoDB db.iniciativas.aggregate({

    $match: … }, { $unwind: … }, { $group: … } ) • Estadísticas que calculamos ◦ Sumatorio de iniciativas de cada temática ◦ Diputadas/os más activas/os por cada temática ◦ Grupos más activos por temática ◦ Últimas iniciativas de cada temática
  20. 24.

    La API de TIPI • REST API • Mecanismo de

    reutilización (además de la exportación a CSV) • Integración con otras aplicaciones • tipiciudadno.es/api-doc • Obtener las últimas 5 iniciativas de Sanidad: curl http://www.tipiciudadano.es/api/v1/tipis?limit=5&dict=sanidad • Obtener las/os diputadas/os más activas/os en Sanidad: curl http://www.tipiciudadano.es/api/v1/stats/bydeputies/sanidad