Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Inside TIPI

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.

Pablo Martín

November 24, 2016
Tweet

More Decks by Pablo Martín

Other Decks in Technology

Transcript

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

    Enreda.Coop Programador de TipiCiudadano.es Cofundador de Openkratio.Org
  2. #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. • 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
  4. 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.
  5. 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
  6. El motor de TIPI • Obtención de datos • Limpieza

    de datos • Procesamiento de datos • Análisis de datos • Resumen • Notificaciones
  7. 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
  8. 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
  9. 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
  10. 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
  11. D3js para la visualización Un pequeño consejo: piensa en el

    usuario y elige y valida la visualización
  12. 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?
  13. 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
  14. 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
  15. 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”
  16. 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
  17. 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
  18. 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