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

Inside TIPI

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for Pablo Martín 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.

Avatar for Pablo Martín

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