martes, 28 de julio de 2015

¿Dónde poder tomar algo en estos días de verano?


En estos días tan calurosos, es bueno aprovechar las tardes y noches para salir a tomar algo o comer alguna tapa por las diferentes zonas que tiene Madrid. Es por ello que en ocasiones nos preguntamos, en qué barrio hay mayor posibilidad de encontrar algo abierto para dicho fin.

Bien, el post de hoy, gracias a nuestra API nos ayudará a encontrar la mayor concentración de locales de una categoría dada, en este caso bares y restaurantes, en un barrio determinado y posteriormente visualizarlo. Cabe destacar, al igual que en antiguos post, lo primero que necesitáis es solicitar vuestra api_key para poder replicar lo que estamos haciendo aquí. ¡Empecemos!

Suponiendo que ya tenemos nuestra api_key, lo primero es buscar en el portal de desarrollador la llamada que nos permite buscar todos los barrios de Madrid: 


Petición a la API que muestra todos los barrios de Madrid

En segundo lugar, debemos obtener los datos representativos que necesitamos (label y representación geográfica) y para ello utilizaremos la opción _view=coordenadas. Además, usaremos la extensión .geojson para mostrarla en Google Maps y CartoDB, como ya hemos descrito en algunos posts anteriores.




Guardaremos toda esta información en un recurso o zona donde podremos actualizarla posteriormente con el campo que nos falta. Puede ser un CSV, el propio GeoJSON con la suma de la información de todos los barrios o la programación de una variable que en memoria aloje la información en nuestro lenguaje de programación preferido.

A continuación, tenemos un ejemplo en el lenguaje de programación Python para este propósito:

# Importar librerías necesarias

import requests
import json
import time

# Establecer API_KEY para Localidata
api_key = 'TU_API_KEY'

# Crear una estructura de datos compatible con GeoJSON


geojson_result_barrio = {
    'features': [],
    'type': 'FeatureCollection'
}

# Código que realiza las llamadas y suma los datos de r en geojson_result_barrio.

length_barrios = [0, 1, 2]
for i in length_barrios:
     r = requests.get(b + '?_sort=label&_view=coordenadas&_page=' + str(i) + '&_pageSize=50&api_key=' + api_key)
     r = r.json().get('features')
     geojson_result_barrio['features'] += r

Por último, necesitaremos filtrar los locales comerciales que se encuentran en un barrio determinado y tienen en común la misma categoría:


donde:
  • <CodDistrito> y <CodBarrio> nos delimita el barrio dónde buscar..
  • <CodCNAE> será el código de la categoría a buscar, en este ejemplo utilizaremos el código 56 que según la lista de códigos CNAE corresponde a “Servicios de comidas y bebidas”.

Por ejemplo, para el barrio de Abrantes, la URL que pondríamos en nuestro navegador sería:

http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/CNAE/Division/56/Distrito/11/Barrio/7?api_key=TU_API_KEY

Petición a la API que muestra bares y restaurantes en Abrantes
 
En este caso, no es necesaria la vista coordenadas, ya que no vamos a dibujar los locales comerciales, ni tampoco es necesario ceñirnos a un formato concreto, aunque es recomendable utilizar algún formato fácil de parsear. Solamente necesitamos contabilizar el número de elementos que se nos muestra por pantalla y enlazarlo con el barrio en cuestión. Por tanto utilizaremos la opción _pageSize para conseguir 50 elementos en cada petición y la _view simple.

A continuación podemos ver cómo introducir dicho dato en nuestra variable geojson_result_barrio que teníamos previamente en el ejemplo de Python e imprimirlo en un fichero con la extensión geojson para nuestro posterior uso:


# Función sencilla para conseguir el número de elementos de una uri concreta


def get_number(uri):                             # Le pasamos como parámetro la uri a resolver
     cont = 0                                           # Contador global de elementos
     page = 0                                          # Página que estamos contabilizando
     opt_uri = '?_sort=label&_view=simple&_page=' + str(page) + '&_pageSize=50'
     r_amp = requests.get(uri + '.json' + opt_uri + '&api_key=' + api_key).json().get('result')
     cont += len(r_amp.get('items'))         # Sumar contador
     while len(r_amp.get('items')):           # Iterador para todas las páginas restantes
           page += 1
           opt_uri = '?_sort=label&_view=simple&_page=' + str(page) + '&_pageSize=50'
           r_amp = requests.get(uri + '.json' + opt_uri + '&api_key=' + api_key).json().get('result')
           cont += len(r_amp.get('items'))
     return cont                                        # Devolver contador global de elementos


# Código para conseguir los elementos de la categoria CNAE dada en todos los barrios


pos = 0                                                        # Barrio a buscar en la estructura de datos de Barrios
for i in geojson_result_barrio['features']:      # Iterador para todos los barrios
     uri = i.get('properties').get('_about')        # Conseguir la URI del barrio
     uri = uri.replace(                                    # Generar nueva URI para filtrado por CNAE
           "http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/",
           "http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/CNAE/Division/56/"
     )
     n = get_number(uri)                               # Conseguir elementos para la nueva URI generada
     geojson_result_barrio['features'][pos]['properties']['numberData'] = n       # Guardar resultado
     pos += 1                                                 # Siguiente barrio a revisar


with open('barrios_number.geojson', 'w') as data_w_file:       # Abrir fichero en modo escritura
     json.dump(geojson_result_barrio, data_w_file)                # Escribir datos en fichero


Al final obtendremos un fichero con una gran cantidad de datos (barrio y el número que nos interesa).

Desde este momento podemos usarlo en nuestra herramienta de visualización preferida, para este ejemplo se ha usado CartoDB que importando el fichero generará una tabla y el mapa correspondiente de forma correcta sin modificación alguna por nuestra parte.

Aun así, solo nos interesaba para el ejemplo, la etiqueta o nombre del barrio, el número de locales totales que hay sin categorizar y el número que hemos sacado de las peticiones anteriores, por tanto hemos eliminado todas las columnas restantes (eran unas pocas) y este ha sido el resultado:

Vista Tabla en CartoDB al importar el fichero GeoJSON creado

Finalmente, en las opciones del mapa hemos elegido la opción de cloropeta (cloropeth) con el filtrado por la columna numberData para que así veamos la diferencia entre un barrio y otro de forma colorida, además de un cuadro de texto con los datos del ranking introducidos a mano para no perder más tiempo en la programación del mapa.

Vista Mapa en CartoDB al usar cloropeta con filtro sobre numberData

Las posibilidades como vemos son infinitas y en aproximadamente una o dos horas podemos tener una bonita visualización, ya sea con variedad en el filtrado (en vez de barrios, distritos o zonas determinadas en un bounding box) o en datos (otras categorías, unión de varias, locales de una franquicia en cuestión, etc).

Link de la visualización conseguida: 


Parece ser que el centro y algunas zonas, no son mal plan donde poder tomar algo :)
 
 

 

miércoles, 3 de junio de 2015

Job offer / Oferta de empleo


Actualización (28-07-2015): ya hemos cubierto esta plaza. Muchas gracias a tod@s por vuestro interés.

Update (28-07-2015): we´ve already covered this offer. Many thanks to everyone for your interest.




Puedes elegir el idioma que prefieras para leer esta oferta. Primero está en inglés y luego en castellano. / You can choose your favourite language to read this job offer: first in English and then in Spanish.



We are looking for data lovers to join our team at Localidata.

After a bit more than two years since we started operations, we are now expanding our team at Localidata. We are looking for two positions to fill in, but before telling you what they would consist of we would like to tell you first what it is about to work with us:
  • We like being a real team, and we want to continue being a team for as long as possible.
  • We enjoy working together, discussing about the problems that we need to solve for our customers, and filling the walls of our office with drawings as a result of these discussions.
  • We love when our customers say that they like how we work, and at least for the time being this is happening often. It is not about creating the perfect solutions that customers may not like, but making what they need in the best manner.
  • We aim at respecting as much as possible the working hours of our employees. Not because of working long hours the results will be better. If things are done well, there is no need to work more than what would be expected in any other job.  
Are you now convinced that you want to join us? If that is the case, then continue reading. Now we tell you which are the skills that we are looking for:

Swiss Knife 1 (sorry, were you looking for the usual “frontend developer”/“backend developer” or alike?): We are looking for a person who feels happy when opening in the morning Eclipse to do some Java programming and setting up in the afternoon a Linux virtual machine in Amazon, who loves collaborating with others using Git, who likes HTML5, CSS3, Bootstrap, JSON and JavaScript, a bit of Python, who can deploy reliable and scalable Web applications, no matter whether they are running on a Tomcat server, on Google App Engine, on top of MongoDB..., who will not kill himself of herself if told to build a SQL-based database, and...

Well, you can imagine that we may well be adding more and more frameworks and technologies here. But this is not the point. It doesn’t matter if you don’t know about all these things. What we want is somebody who is passionate about what he or she does and does not mind learning about technologies (and keeping us busy learning as well). And if you do not have much professional experience yet, don’t worry, you can apply as well.

Swiss Knife 2: We are looking for a person who feels happy when opening in the morning Eclipse to do some Java programming and setting up in the afternoon a Linux virtual machine in Amazon, who loves collaborating with others using Git, who likes HTML5, CSS3, Bootstrap, JSON and JavaScript, a bit of Python… Don’t you feel like a déjà vu? Yes, there is some copy and paste activity here, but this is because this is what we are looking for...

If you like any of these positions and you like the idea of working with us in Madrid, don’t forget to send us your CV to info@localidata.com. Obviously, it will be good if you tell us everything that you are able to do, but remember to include as well a bit of why you are motivated to work with us.

The Localidata team.

PS: And if you want us to answer even more quickly and interview you as soon as possible, you may always send us something like this (http://www.nina4airbnb.com/) with ideas about what we can do with our API or with any of the services that we are currently providing for our customers, as described in our Web. But don’t feel forced to do it, we also value your free time and you will have time to demonstrate what you can do.




Estamos buscando apasionados de los datos para unirse a nuestro equipo en Localidata.

Hace poco más de dos años desde que Localidata empezó a ofrecer servicios relacionados con los datos abiertos y ahora queremos que nuestro equipo crezca. Estamos buscando a dos nuevos compañeros, pero antes de decirte en qué consiste el trabajo, te vamos a decir lo que significa trabajar con nosotros:

  • Somos un equipo, nos gusta trabajar así e intentamos hacerlo todo el tiempo que podemos.
  • Nos gusta trabajar juntos, discutir de los problemas que tenemos que solucionar para nuestros clientes y pintar en las paredes de la oficina las conclusiones de nuestras reuniones.
  • Nos encanta que nuestros clientes digan que les gusta nuestra forma de trabajar, y de momento esto nos pasa bastante a menudo. No se trata de crear la solución perfecta, sino de adaptar la solución lo máximo posible a nuestros clientes, para que tengan lo que quieren y necesitan.
  • Respetamos todo lo que podemos nuestros horarios de trabajo. No por trabajar más horas los resultados van a ser mejores. 
¿Sigues queriendo trabajar con nosotros? Si es así, sigue leyendo. Ahora te decimos qué estamos buscando:
 

Todoterreno 1 (¿esperabas "técnico de sistemas", "programador senior" o "analista orgánico"?): estamos buscando a una persona a la que le guste empezar la mañana programando en Java con Eclipse y preparando una máquina virtual en Amazon después de comer, a la que le guste colaborar en proyectos con Git, a quien le guste HTML5, las mejoras de CSS3, que use Bootstrap, JSON y JavaScript, un poco de Python, que despliegue aplicaciones Web seguras y escalables, no importa si es con Tomcat, Google App Engine, que controle un poco de MongoDB..., que no tenga tendencias suicidas por tener que trabajar con una base de datos relacional, ...

Bueno, puedes imaginar que podemos añadir más y más frameworks y tecnologías. Pero no es el caso, no nos importa si no sabes de todo esto. Lo que queremos es alguien a quien le guste su trabajo y no le importe aprender cosas nuevas (y compartir los conocimientos con tus compañeros). Y aunque no tengas mucha experiencia, no te preocupes, no te descartaremos por eso.
 

Todoterreno 2: estamos buscando a una persona a la que le guste empezar la mañana programando en Java con Eclipse y preparando una máquina virtual en Amazon después de comer, a la que le guste colaborar en proyectos con Git, a quien le guste HTML5, las mejoras de CSS3, que use Bootstrap, JSON y Javascript, un poco de Python,… ¿Sientes algo así como un déjà vu? No, es que hemos copiado y pegado, así que ya sabes lo que estamos buscando…

Si te gusta el puesto de trabajo y quieres trabajar con nosotros en Madrid, mándanos tu CV a info@localidata.com. Estaría bien que nos dijeras todo lo que eres capaz de hacer, pero recuerda incluir también por qué estas motivado para trabajar con nosotros.

El equipo de Localidata.

PD: y si quieres que te contestemos lo antes posible para concertar una entrevista, puedes enviarnos algo como esto (http://www.nina4airbnb.com/) o ideas sobre lo que podemos hacer con nuestra API o con cualquiera de los servicios que actualmente estamos proporcionando a nuestros clientes, como explicamos en nuestra Web. No es obligatorio hacerlo, valoramos tu tiempo libre y tendrás tiempo para demostrar lo que sabes hacer.


miércoles, 25 de febrero de 2015

Localidata estará presente en el encuentro Aporta 2015

Como cada año, el Ministerio de Industria, Energía y Turismo, el Ministerio de Hacienda y Administraciones Públicas y Red.es organizan el encuentro Aporta sobre la importancia de los datos abiertos para la sociedad.

Este año se celebrará el 26 de febrero, y Oscar Corcho estará presente en una de las mesas, con su ponencia "Hablando se entiende la gente" (muy pronto en nuestro canal de slideshare). En ella hablará sobre nuestra experiencia en el desarrollo de la norma UNE 178301 sobre Open Data y Smart Cities, que hemos creado junto con un grupo de ciudades, gobiernos y agencias regionales, agencias estatales y empresas.


También hablaremos sobre las oportunidades que se abren gracias a esta norma, una de las primeras que se definen en este área en el contexto internacional, tanto para los productores de datos como para los reutilizadores.

martes, 10 de febrero de 2015

¡¡Cumplimos dos años!!

Hola a todos,

Hace mucho tiempo que no os contamos por este canal cómo usar nuestra API, o descripciones de los productos que ofrecemos. Y es que hemos estado trabajando en tantas cosas que no hemos tenido mucho tiempo de cuidar nuestro blog, la verdad...

Entretanto hemos cambiado nuestra Web, como muchos de vosotros ya os habréis dado cuenta, y hemos refinado nuestra oferta de productos y servicios. También se ha publicado una norma AENOR en la que hemos estado trabajando, sobre Open Data y Smart Cities (la UNE 178301). Y tenemos algunos nuevos clientes y estamos involucrados en algunos proyectos nuevos, que también os contaremos, poco a poco...

Pero ahora a lo que veníamos... ¡¡Hemos cumplido dos añitos!! Parece que fue ayer cuando empezamos...

Y para celebrarlo, nada como una tarta personalizada que nos ha preparado Katy, del blog Cosas de Katy. Si estáis cerca de nuestra oficina durante esta semana, seguro que todavía llegáis a tiempo de probar un poquito.



Gracias a todos los que habéis hecho posible que Localidata siga trabajando por y para los datos abiertos, tanto dentro como fuera de España.