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

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. Inside TIPI Universidad Politécnica de Valencia 25 de noviembre de

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

    Enreda.Coop Programador de TipiCiudadano.es Cofundador de Openkratio.Org
  3. A modo de intro...

  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
  5. None
  6. BigData MediumData SmallData TinyData MicroData NanoData

  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
  8. tipiciudadano.es

  9. None
  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.
  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
  12. El motor de TIPI • Obtención de datos • Limpieza

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

    usuario y elige y valida la visualización
  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?
  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
  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
  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”
  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
  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
  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
  25. Código 100% libre • Web: http://github.com/ciecode-madrid/tipi • Motor: http://github.com/ciecode-madrid/tipi-engine

  26. más en: tipiciudadano.es enreda.coop/trabajos/tipi-ciudadano/