Por Julián García Trueba.

En un tiempo en el que la escasez de recursos ocupa una de las principales preocupaciones de nuestra sociedad, existe un recurso cuya generación crece de forma exponencial con el paso de los años. Este recurso no es otro que los Datos. Los datos generados pueden ser de diversa tipología y procedencia, cada una de las cuales con una serie de aplicaciones de elevado valor para las empresas y administraciones. En concreto, en el presente artículo vamos a focalizarnos en la aportación de los datos geolocalizados de movilidad al contexto de la sociedad actual.

En primer lugar, cabe enfatizar que, si bien la recolección, representación y, en definitiva, el análisis de los datos geolocalizados puede resultar un tema de última tendencia, sus primeras aplicaciones se remontan a mucho antes de que se dieran los primeros hitos de la Inteligencia Artificial o de que se empezase a hablar del Big Data. Prueba de ello es, por ejemplo, es el empleo que el célebre médico inglés Jon Snow hizo de la visualización geolocalizada para salvar a la ciudad de Londres de una de los mayores brotes de cólera de su historia. En concreto, el análisis realizado por Jon Snow consistió en identificar sobre un mapa los hogares de los ciudadanos afectados por cólera, así como la fuente principal de agua que surtía dichos hogares. De tal forma, una vez recogidos los datos y representados en el mapa, le permitió determinar de forma objetiva cuáles eran las fuentes “infectadas”. Con dichos datos, no le resulto difícil la tarea a Jon Snow de convencer a las autoridades de la necesidad de clausurar dichas fuentes y, de esta forma, dar por concluida la epidemia de cólera que solaba la ciudad.

Cómo John Snow salvó la vida de miles de personas
Representación gráfica del mapa en el que se basó Jon Snow para identificar las fuentes afectadas

No obstante, si bien como hemos visto el empleo de la geolocalización no es algo que atañe únicamente a nuestros tiempos, en la actualidad, la convergencia de tecnologías tanto de comunicación como de información ha incentivado la aparición de innumerables aplicaciones multisectoriales. Un ejemplo de ello es las llamadas plataformas de Smart Cities, las cuales proveen de la infraestructura necesaria para garantizar la recopilación de datos resultantes de diversos puntos de la ciudad, la representación de los mismos y el posterior análisis para una gestión eficiente de los servicios focalizados en el ciudadano. 

Plataforma urbana de Coruña smart city seleccionada como referente en  Global City Teams Challenge - eleconomistaamerica.cl

No obstante, las plataformas Smart Cities no son los únicos casos de aplicación basados en la geolocalización. En este sentido, englobando también el concepto de movilidad dentro del análisis de datos geolocalizados cobran especial relevancia los datos generados por las operadoras, procedentes del dispositivo más popular y más empleado en nuestros días, el terminal móvil. Hoy en día, resulta realista afirmar que es extraño quien no dispone de un dispositivo móvil con acceso a internet y aplicaciones instaladas en el mismo. Este hecho es el aprovechado por las operadoras para tener acceso a ciertos datos de sus usuarios. En concreto, algunos de estos datos son los siguientes: la geolocalización del usuario, resultante de la antena a través de la cual puede accede a la conectividad del terminal, las aplicaciones a las que tiene acceso, las condiciones de contratación del usuario, así como datos personales del mismo (edad, sexo, etc). 

De tal forma, mediante el correcto procesamiento de los datos, resulta viable determinar tendencias de movilidad de los usuarios. Para ello, y con el objetivo de cumplir con la normativa vigente de Protección de Datos, como paso previo a su presentación y análisis, las operadoras se ven obligadas a llevar a ejecutar diversos y complejos algoritmos para la agrupación de los mismos según diversos criterios: procedencia, franja horaria, segmentación por edad, por poder adquisitivo o por sexo. 

Una vez ejecutados los procesos de agrupación y el procesamiento de datos por parte de los departamentos de Ingeniería de Datos de las operadoras habilitarán a una serie de insights con importantes aplicaciones en diversidad de sectores, como el turístico, el del retail, o el de la gestión de eventos. En concreto, en lo que respecta al sector turístico, el análisis de estos datos permite conocer la tendencia de movilidad en las principales zonas de atracción turística de las ciudades en función de la edad, las franjas horarias, el sexo, o el país o ciudad de procedencia, distinguiendo entre turistas que pernoctan en la ciudad y aquellos que la visitan en el día. Por otro lado, en lo que respecta al sector del retail, el análisis de los datos de operador, permite a las tiendas y sucursales conocer las tendencias de movilidad por franjas horarias y perfil tanto de los actuales clientes como de los potenciales. Un análisis que permitirá objetivizar la toma de decisiones en lo que respecta, por ejemplo, a la estrategia de expansión de las tiendas. Por último, en lo que respecta a la gestión de eventos, los datos de operador permiten tomar decisiones para una gestión más sostenible de los eventos, incrementando así la experiencia del cliente final. 

Vodafone Analytics Demo - Explore a City - YouTube

En definitiva, de forma adicional al servicio de conectividad y voz que las operadoras proveen a sus clientes, tanto personas físicas, como jurídicas y administraciones, en la actualidad estas compañías proveen de una serie de insights basados en los datos, anonimizados y agrupados, procedentes de los dispositivos móviles de los clientes, los cuales permiten extraer conclusiones objetivas sobre las tendencias de movilidad, un paso más allá en lo que respecta al análisis de datos geolocalizados.

Si quieres más información sobre nuestro master, puedes contactar con nosotros bien por teléfono al +34 910 91 28 42 o +34 630 88 13 53, por whatsapp directamente pinchando aquí o aquí, o mandando un mail con tus datos de contacto (nombre completo y teléfono) a: info@datahack.es

Lee la parte 1 aquí.

En realidad, comparar el grado de similitud entre dos películas puede que no sea lo que más interese al usuario. Puede ser más valioso encontrar todas aquellas películas que son más parecidas a la que nos gusta. Para ello, seleccionaremos la columna de la película que nos gusta y la ordenaremos de mayor a menor. Así, Python nos mostrará en orden decreciente de similitud las películas.

Figura 13. Recomendar películas por grado de similitud con Python

3. Recomendaciones basadas en texto


Desafortunadamente, en el mundo real los problemas que tenemos que resolver no tienen etiquetas claras como los géneros para el caso particular de las películas. Por suerte, si hay texto relacionado con ese elemento entonces podemos hacer algo. Este texto puede ser un resumen, una descripción del elemento o la lista de contenidos de un libro. en estos casos usaremos "Term Frequency inverse Document Frequency" o TF-IDF para transformar el testo en información valiosa.


Estos algoritmos dividen el número de veces que una palabra aparece en un documento entre el ratio de documentos globales en que unes palabra aparece. De esta manera, se reduce la importancia de palabras comunes y se incrementa el peso de aquellas palabras que no aparecen en muchos documentos. Por ejemplo, si comparamos el texto de "Harry Potter y La Piedra Filosofal" con el resto de libros de la saga Harry Potter, la palabra Voldemort obtendrá una puntuación baja ya que aparece multitud de veces a lo largo de todos los libros. Por contra, la palabra elixir que está muy relacionada sólo al primer libro de la saga, obtendrá una puntuación alta.

Figura 14. Fórmula TF-IDF

Ahora vamos a trabajar con otro dataset de películas diferente. Este contiene los nombres de las películas y el resumen de las mismas que aparece en la página Wikipedia.

Figura 15. Cargamos el nuevo dataset con el resumen de las películas

La transformación de los datos se hace gracias a TfidfVectorizer de la biblioteca Scikit Learn. Porde efecto, esta herramienta genera una característica por cada palabra presente en un documento. Esto resulta en un gran número de características; por suerte, hay formas de reducir el número de características generador por el vectorizador.

Para ello incluiremos en primer lugar el argumento min_df y le daremos un valor de 2. De esta forma sólo se convertirán en características aquellas palabras que estén presentes en al menos dos documentos. Esto es muy útil ya que las palabras que sólo aparezcan en un documento no son muy importantes a la hora de encontrar similitudes.

Por otro lado, podemos incluir un segundo argumento max_df que elimine aquellas palabras que sean muy comunes. Si lo fijamos a 0.7, no se tendrán en cuenta aquellas palabras que aparecen en más de un 70% de los resúmenes.

Figura 16. inicializamos el vectorizador limitando el número de características a generar

Una vez iniciado el Vectorizer invocaremos al método fit_transform usando la columna resumen del dataframe. El método get_feature_names permite obtener las diferentes características. La matriz dispersa se almacena en un DataFrame que almacena por filas las películas y por columnas los nombres de las características.

Figura 17. Matriz de similitud coseno

Similitud Coseno

En este caso utilizaremos una métrica que cuantifica mejor la similitud entre elementos con mayor variabilidad. A esta métrica se la conoce como Cosine Similarity o Similitud Coseno. Sin entrar en los detalles matemáticos, se encarga de medir el ángulo entre dos documentos en el espacio métrico de multiples dimensiones. Mostramos un ejemplo de esta métrica trasladada al caso del espacio bidimensional. Toma valores entre 0 y 1, donde 1 representa similitud total.

Figura 18. Formula y representación gráfica de la similitud coseno

Esta función permite hacer el cálculo entre dos películas cualesquiera. La diferencia es que en este caso, será necesario hacer un reshape como se muestra a continuación. El grado de similitud entre los resúmenes de la primera y la segunda parte de la película Cars es de 0.38.

Figura 19. Similitud Coseno entre dos películas basado en su resumen

De forma similar y partiendo de un DataFrame, Scikit Learn es capaz de calcular de una vez la similitud coseno entre todas las filas.

Figura 20. Similitud coseno de todos los elementos

Una vez calculados esos valores construimos un nuevo DataFrame de similitudes coseno.

Figura 21. DataFrame de similitudes coseno

Esto nos permite saber qué películas son más parecidas a una en concreto basándonoslos en sus resúmenes. Si buscamos recomendaciones de películas similares a Harry Potter y el Cáliz de Fuego obtenemos sugerencias para visualizar el resto de la saga.

Figura 22. Recomendaciones de películas similares a Harry Potter y el Cáliz de Fuego

Si hacemos la consulta para el caso del Señor de los Anillos: La comunidad del anillo, vemos que nos recomienda las películas de la trilogía y el Hobbit. También nos recomienda Four Sisters and a Wedding debido a que el protagonista de la película se llama Frodo también.

Figura 23. Recomendaciones de películas similares a El Señor de los Anillos: La Comunidad del Anillo

Añadimos un último caso con la película Mary Poppins. El recomendador nos sugiere como segunda opción ver la película Saving Mr. Banks, que trata sobre la colaboración entre Walt Disney y la escritora de la novela Mary Poppins.

Figura 24. Recomendaciones de películas similares a Mary Poppins

Recomendar en base al perfil del usuario

Lo que no hemos tenido en cuenta hasta ahora es que los usuarios no son tan unidimensionales como para que les guste sólo un elemento. La realidad es que el usuario habrá visto una serie de películas y querrá que la recomendación proporcionada por los algoritmos esté alineada con su amplio gusto.

Consideremos el caso que acabamos de mencionar: un usuario que ha visto una serie de películas. La forma más directa de crear el perfil de usuario es inicialmente, creando un vector que contenga los títulos de dichas películas para conseguir a través del método .loc los vectores de características de las mismas.

Figura 25. creando el perfil del usuario

Para terminar de construir el perfil de este usuario es necesario representar todas las preferencias del usuario en una única serie. Eso lo conseguimos haciendo la media de cada característica con el método .mean.

Figura 26. Perfil del Usuario

Este perfil del usuario lo usaremos para encontrar las películas con mayor similitud que no haya visto todavía. En primer lugar, tendremos que determinar el subconjunto de películas que no ha visto todavía (eliminando del dataframe del vectorizer todas aquellas películas que están en la lista de vistas). El número de filas ha disminuido de 34886 a 34880 (6 filas).

Figura 27. resultado de eliminar las seis películas vistas por el usuario

Después calcularemos la similitud coseno entre el perfil de usuario que acabamos de crear y el DataFrame de películas que aún no ha visto el usuario. Después, almacenaremos la salida en un nuevo DataFrame y ordenaremos los resultados para poder acceder y ordenar los datos de forma sencilla.

Figura 28. Recomendación basada en el historial del usuario

Ahora si que el algoritmo ha sido capaz de recomendar en base al historial de películas vistas por nuestro usuario, y no sólo basándose en películas individuales. Los registros más arriba en la tabla son los más parecidos a los intereses del usuario en base al background de intereses que recoge su perfil.

Si quieres más información sobre nuestro master, puedes contactar con nosotros bien por teléfono al +34 910 91 28 42 o +34 630 88 13 53, por whatsapp directamente pinchando aquí o aquí, o mandando un mail con tus datos de contacto (nombre completo y teléfono) a: info@datahack.es

Lee la parte 2 aquí.

Las recomendaciones tienen una influencia muy importante en muchas de las decisiones que tomamos en el día a día. Algunos ejemplos de recomendaciones directas podrían ser las que nos dan nuestros amigos sobre los restaurantes a los que han ido el fin de semana o la recomendación de un determinado modelo de teléfono basada en los comentarios de una web.

Graphical user interface, website

Description automatically generated
Figura 1. Motor de recomendación de Disney+.

Otras recomendaciones más indirectas podrían ser las que lanza Disney+ sobre las películas o programas que pueden ser más afines a nuestros gustos, o las propuestas de items que hace Amazon en relación al producto que estás comprando actualmente.

En este y en los próximos posts vamos a hablar sobre la ciencia detrás de estos motores y cómo construirlos de forma sencilla usando Python.

1. Introducción a los motores de recomendación

¿Qué son los motores de recomendación?


Los motores de recomendación son herramientas que usan el feedback de los usuarios para encontrar nuevos elementos que puedan ser afines a estos usuarios u otros, asumiendo que los usuarios con preferencias similares en el pasado probablemente tendrán las mismas preferencias en el futuro.

Estos métodos de recomendación se benefician de multiples emparejamientos entre los usuarios que dan su opinión y los elementos sobre los que opininan. De este modo, se proporcionarán mejores recomendaciones de un producto cuanto mayor sea el feedback recibido sobre el mismo. También se darán recomendaciones más personalizadas a aquellos usuarios que hayan dado más opiniones.

¿Cuándo es interesante usar los motores de recomendación?

Los motores de recomendación pretenden resolver un problema específico de Machine Learning: sugerencia de productos, servicios, entidades a un usuario en base a sus opiniones y de otros usuarios. 

Lo que es importante tener claro si vamos a diseñar un motor de recomendación es que los datos son registros de preferencias de diferentes usuarios. En función de cómo se miden estas preferencias los datos se clasifican en implícitos y explícitos. Los datos explícitos contienen feedback directo de un usuario como por ejemplo su opinión sobre un producto expresada en forma de puntuación (por ejemplo: el número de estrellas con el que puntuamos un producto en Amazon). Por contra, los datos implícitos sacan información de las acciones del usuario para resumir sus preferencias (por ejemplo: histórico de reproducciones en Spotify, que te puede permitir identificar los estilos de música preferidos por ese usuario).

2. Recomendaciones basadas en contenido

Las recomendaciones pueden realizarse basadas en la opinión general. Sin embargo, este tipo de recomendaciones no son personalizadas. En este post os vamos a enseñar distintos modelos para hacer recomendaciones a un usuario basándonos en la similitud de unos items con otros que le gustaron al usuario en el pasado. Es decir, si al usuario en cuestión le gustó la película A, y mi modelo determina que las películas A y B son similares, entonces es bastante probable que al usuario le guste la película B también. En este post os mostraremos como determinar qué items son similares. Estas recomendaciones que se llevan a cabo encontrando elementos con atributos similares se denominan recomendaciones basadas en contenido.

Figura 2. Recomendaciones basadas en contenido.

Atributos o características de cada elemento

Pongamos por caso que tenemos un dataset de películas. Los atributos de cada película podrían ser: título, director, fecha de estreno, género, actores protagonistas, duración, idioma, etc. Dentro de estos atributos podríamos incluir cualquier información descriptiva. La gran ventaja de usar estos atributos junto a la opinión de los usuarios es que se pueden hacer recomendaciones de cualquier elemento con atributos. Esto permite recomendar incluso nuevos items que los usuarios no tengan en el radar aún.

Los modelos basados en contenido usan cualquier característica disponible para construir perfiles de items que nos permitan a los científicos de datos compararlos matemáticamente. Esto nos permitirá identificar elementos similares y recomendarlos.

Figura 3. Atributos de una película.

Vectorización de atributos

La mejor manera de extraer información de estos atributos es vectorizándolos. A continuación se muestra un ejemplo donde aparecen diferentes elementos por filas y las características o atributos posibles por columnas.

Y os preguntareis, ¿por qué organizar los datos de esta manera?. Organizar la información de forma tabular nos permite calcular la distancia o similitud entre elementos de forma sencilla, lo cual es vital para hacer las recomendaciones de las que estamos hablando en este post.

Figura 4. Vectorización de los datos (formato tabular).

A continuación, aprenderemos a generar estas tablas a partir de los datos. En esta ocasión, vamos a usar un dataset de películas (movies.csv). A partir de la tabla que se muestra a continuación, queremos obtener una nueva tabla que contenga una fila por película (una película puede aparecer varias veces en el dataset original porque puede clasificarse dentro de varios géneros) con un 1 en aquellos atributos que la representen y ceros en los que no.

Figura 5. Carga del dataset original.

Para transformar los datos podemos usar la función crosstab de pandas. El primer argumento que le pasemos a la función se convertirá en las filas y el segundo en las columnas. A continuación obtenemos el resultado deseado.

Figura 6. Cross_tab de películas y géneros con Pandas.

Con nuestros datos en el formato adecuado estamos en disposición de comenzar a hacer comparaciones y recomendaciones. Pero para ello, tenemos que encontrar la manera de calcular el grado de similitud entre filas.

Introducción al coeficiente de similitud de Jaccard

La métrica que vamos a usar para medir el grado de similitud entre los distintos elementos de nuestra tabla "encodeada" se llama coeficiente de similitud de Jaccard. Este coeficiente es el ratio de atributos que dos elementos tienen en común, dividido por el número total de atributos de ambos. Este coeficiente toma valores entre 0 y 1, y adquiere valores más altos cuanto mayor es el número de atributos en común de los dos elementos.

Figura 7. Coeficiente de similitud de Jaccard (fórmula).

Pasamos a calcular el coeficiente de similitud de Jaccard para los datos con los que hemos empezado a trabajar. Empezaremos importando jaccard_score de la biblioteca sklearn metrics. Esta función toma dos filas y calcula el grado de similitud entre ellas. 

A continuación mostramos el resultado de comparar dos películas del género animación ('Tangled' y 'WALL-E'). Puesto que pertenecen al mismo género el coeficiente de similitud de Jaccard es 1. Sin embargo, cuando comparamos dos de distinto género como 'Remember me' que es un Drama y WALL-E, el resultado es 0.

Figura 8. Cálculo del coeficiente de similitud de Jaccard con Scikit Learn.

Si queremos establecer similitudes entre todos los elementos de nuestro dataset de una vez hacemos uso de dos funciones del paquete Scipy. En primer lugar, pdist (el nombre corto para pairwise distance) nos ayuda a calcular las distancias de todos los pares posibles, usando como argumento la métrica Jaccard. El resultado es una matriz que contiene todas las distancias en formato 1D array. Por ello, tendremos que usar la función squareform para transformar estos datos en 1D a la forma rectangular de matriz deseada.

Figura 9. Calculo de la distancia de Jaccard con Scipy.

Nótese que el cálculo que hacemos con la función pdist es la distancia, que expresa el grado de diferencia entre cada uno de los registros. Los elementos de la diagonal, que comparan un elemento con el mismo, muestran una distancia de 0 porque son iguales y por tanto el grado de diferencia es nulo. Como estamos interesados en calcular el grado de similitud que es el complementario de la operación que acabamos de realizar, restaremos a 1 los valores de matriz_cuadrada_distancias.

Figura 10. Cálculo del coeficiente de similitud de Jaccard on Scipy.

Para poder usar esta información con mayor comodidad, podemos pasar estos datos a un DataFrame. El DataFrame contendrá como argumento principal los valores de coeficiente_similitud_jaccard y como índices y columnas los nombres de las películas.

Figura 11. DataFrame con coeficientes de similitud de Jaccard.

Ahora podemos buscar cómodamente la distancia entre pares.

Figura 12. Comparación del grado de similitud entre dos películas.

Sigue en parte 2 aquí.

Si quieres más información sobre nuestro master, puedes contactar con nosotros bien por teléfono al +34 910 91 28 42 o +34 630 88 13 53, por whatsapp directamente pinchando aquí o aquí, o mandando un mail con tus datos de contacto (nombre completo y teléfono) a: info@datahack.es

Por Antonio Fernández Troyanno.

Es innegable que hoy en día tener conocimientos de programación es imprescindible. Hace años conocer y manejar adecuadamente el paquete Office “básico” (Word, Power Point, Excel) te permitía acceder a puestos laborales mejores que la media. Hoy en día y más después de la pandemia, la utilización de las herramientas Office es un fondo de armario que casi cualquier persona tiene conocimiento.

Pero, ¿qué pasa si quieres seguir formándote y desarrollando tus capacidades para, no solo acceder más fácilmente a otros puestos de trabajo, si no también para ser un profesional mucho más productivo y que puede aportar mejores soluciones tanto en el ámbito laboral como personal?

Desde mi punto de vista, lo mejor es formarte en algún lenguaje de programación que te permita automatizar y sistematizar tareas que, de otra manera, tendrías que ejecutar de manera manual y tediosa una a una.

Para todas aquellas personas que nunca han programado, uno de los mejores lenguajes para empezar es Python: un lenguaje de programación sencillo, fácil de comprender y con una curva de aprendizaje asequible que te permitirá poner a funcionar pequeños y no tan pequeños programas.

Con el fin de ilustrar el potencial de Python, a continuación, te presentaré una serie de proyectos programados en Python para que veas el potencial de este magnífico lenguaje de programación.

ATENCIÓN: En este artículo vais a poder ver ciertos fragmentos de código que, si no tenéis conocimiento ninguno de programación, quizás pueda asustarte. Aleja esos terrores de tu mente, con un poco de trabajo y formación, verás que no es nada del otro mundo.

  1. Manipular ficheros Excel sin utilizar Microsoft Excel
  2. Enviar correos electrónicos desde Python
  3. Modificar formatos de imágenes
  4. Extraer información de páginas web y crear tu propio algoritmo de Machine Learning

¡Vamos con ello!

1. Manipular ficheros Excel sin utilizar Microsoft Excel

En muchas ocasiones nos surge la necesidad de concatenar o unir varios ficheros Excel de cientos o miles de líneas.

Imaginemos que cada mes se genera un reporte con información de financiera de la empresa, información de tus cuentas bancarias o cualquier otro ejemplo que se te pueda ocurrir.

Imagina que tenemos 12 ficheros Excel con sus mismas columnas y necesitamos unificar toda esa información en 1 solo fichero.

¿Qué soluciones tenemos?

Opción a) Abrir uno a uno cada fichero, copiar y pegar esa información y repetir esa tarea 10 veces más. 

Opción b) Utilizar algún lenguaje de programación que nos permita simplificar esta tarea.

Sin duda, la opción a utilizar es la Opción b). Quizás inicialmente te lleve más tiempo programar en Python tu programa “UNIR EXCELS”, pero, ¿imagina que en lugar de 12 ficheros son 50? O, peor aún, que cada semana tienes que unificar 20 Excels….

¿No tiene sentido programar y automatizar esa tarea? Pues con Python podrías, y es mucho más sencillo de lo que parece…

<script src="https://gist.github.com/afernandez119/c4777133ef457f9569684811d611eb18.js"></script>

Interfaz de usuario gráfica, Texto, Aplicación, Correo electrónico, Sitio web

Descripción generada automáticamente

Con nuestro Máster Experto en Data Science y Big Data puedes profundizar en las aplicaciones de Python y así volverte un experto en la materia.

2. Enviar correos electrónicos desde Python

¿Quién podría imaginar que utilizando Python podríamos automatizar el envío de correos electrónicos? 

Imagina que todos los días tienes que enviar una serie de correos electrónicos a proveedores, empleados o alumnos, ¿por qué no automatizarlo?

En Python existen diferentes librerías que te facilitan esta tarea, veamos un ejemplo.

<script src="https://gist.github.com/afernandez119/6a93f9ad5673efcc29e0061cb1c0141e.js"></script>

Interfaz de usuario gráfica, Texto, Aplicación, Correo electrónico

Descripción generada automáticamente

3. Modificar formatos de imágenes

¿Nunca te ha pasado que necesitas cambiar la extensión de una imagen y no sabes cómo hacerlo?

Buscas en Google como un loco y te sale un montón de servicios online, software de gratis pero con limitaciones, … ¿por qué no utilizar Python para esto?

Gracias a la librería de Python Pillow podremos, entre otras muchas cosas, modificar la extensión de nuestra imagen de forma rápida y sencilla (3 líneas de código…)

<script src="https://gist.github.com/afernandez119/f712eeb44ed35471b32cce379554c5d7.js"></script>

Interfaz de usuario gráfica, Aplicación

Descripción generada automáticamente

4. Extraer información de páginas web y crear tu propio algoritmo de Machine Learning

Y…. ¿si queremos algo más elaborado? ¡Pues aquí tienes! A continuación te presento un proyecto mucho más completo en Python en el que intentamos predecir el éxito que va a tener una noticia antes de publicarla analizando el éxito que tuvieron noticias pasadas.

El proyecto incluye:

En este caso te un vídeo del proyecto completo sobre “Cómo predecir el éxito de una noticia mediante Machine Learning”

Y… ¡hasta aquí el artículo de hoy! Como ves estos son 4 ejemplos muy diversos sobre el potencial que tiene la utilización de Python a nivel profesional y personal, sin duda una herramienta muy potente e imprescindible conocer en el entorno de digitalización actual.

Si quieres más información sobre nuestro master, puedes contactar con nosotros bien por teléfono al +34 910 91 28 42 o +34 630 88 13 53, por whatsapp directamente pinchando aquí o aquí, o mandando un mail con tus datos de contacto (nombre completo y teléfono) a: info@datahack.es

Antonio Fernández Troyano.

Por Juan Manuel Jambrina Montesinos.

Parte I aquí.

Parte II aquí.

(Dashboard interactivo en Tableau Public)

¿Cuánto pagamos los madrileños por incumplir las normas de circulación?

Dentro del análisis de las sanciones que acarrean todas estas multas se pueden destacar principalmente 2 tipos: el importe económico y la retirada de puntos.

Respecto al monto económico general (gráfico 19) se puede observar que la mayoría de las multas conllevan una sanción económica de entre 90 y 180 euros siendo de media 98.74€. Dentro de este rango comprobamos que solo se imponen multas de carácter leve (46.75%) o graves (39.81%) y en ningún caso muy graves.

En el caso de las multas leves las sanciones van de 0€ a 90€ mientras que las multas graves conllevan sanciones económicas mucho más importantes que, aunque se centran entre los 90 y los 180€ pueden llegar a los 450€. Por último las multas muy graves son siempre las que conllevan un mayor importe económico que está por encima de los 450€.

https://miro.medium.com/max/1014/1*aB1xygUdjOeCrwUeRvSq_Q.png

Gráfico. 19 — Porcentaje de multas impuestas durante 2020 en función de los rangos de importe y su gravedad

Respecto a la retirada de puntos del carnet (gráfico 20) se sigue la misma dinámica que con las multas económicas, el 96.88% de las sanciones leves y graves no conllevan retirada de puntos. En el caso de las multas graves solo hay un pequeño porcentaje que conlleva retirada de 2, 3 o 4 puntos (1.18%, 0.39% y 1.22% respectivamente). En cambio, las multas muy graves siempre conllevan retirada de 4 o 6 puntos (0.04% y 0.23% respectivamente).

https://miro.medium.com/max/1400/1*wYjBCX3YjmevRWi6JPc0wQ.png

Gráfico. 20 — Porcentaje de multas en función de los puntos retirados por cada multa y su gravedad

Los motivos que implican una mayor retirada de puntos son rebasar un semáforo en rojo (59.772 puntos perdidos) y los excesos de velocidad (58.434 puntos perdidos) que además en su mayoría son consideradas faltas graves. En el siguiente nivel están las multas por conducir bajo los efectos del alcohol o drogas (16.888 puntos perdidos) que además son consideradas todas faltas muy graves, las sanciones por conducción temeraria (12.074 puntos perdidos) en las que si se observa una repartición entre faltas graves y muy graves y las sanciones por el uso de dispositivos no permitidos durante la conducción (11.145 puntos perdidos) también consideradas casi en su totalidad faltas graves. El resto de multas que conllevan retirada de puntos son la falta de elementos de protección (principalmente el casco o las sillas de bebe), no respetar la señalización y los delitos por desobediencia, adelantamientos ilegales e intentos de fuga, el lanzamiento de objetos, algunos estacionamientos y faltas de autorización. Lo que podemos observar también es que hay algunos motivos que no ocasionan nunca una pérdida de puntos como son las denuncias por acondicionamiento de la carga, conducta indebida, daños en el mobiliario urbano, la falta de combustible u otras faltas menores (gráfico 21).

https://miro.medium.com/max/1006/1*FJ34iEcK5TAGpBp7JrIh6g.png

Gráfico. 21 — Número total de puntos retirados en 2020 por cada motivo de sanción

¿Cuánto corremos los madrileños con el coche?

Siendo las multas por exceso de velocidad uno de los motivos de sanción más frecuente y que conllevan una mayor retirada de puntos se quiso hacer un análisis más exhaustivo del mismo.

Según los datos (gráfico 22) se observa que hay vías donde es más probable ser multado según el límite máximo de la misma. Las vías donde más sanciones se imponen son aquellas cuyo límite máximo de velocidad son 70 Km/h con el 59.98% del total y a mucha distancia estarían las vías con límites de velocidad de 90 y 50 Km/h con 21.43% y 16.13% del total respectivamente. En el resto de vías donde los límites de velocidad son 30, 40, 60 y 80 los porcentajes de sanciones son casi residuales siendo las vías de límite máximo de 30 Km/h las que menor porcentaje tienen con un 0.27%.

https://miro.medium.com/max/526/1*MLEX0vMdaWQcUPZ8fA8gxw.png

Gráfico. 22 — Límites de velocidad de las vías con más multas durante 2020

Algo que también llama la atención es que la diferencia entre la velocidad a la que se circula cuando recibes una multa por exceso de velocidad y el límite de velocidad máximo de la vía parece influir en la cantidad de multas impuestas (gráfico 23).

Mas de la mitad de las multas por esta causa (56.84%) se imponen cuando se ha superado el límite de la vía entre 3 y 10 Km/h lo que podría no ser algo excesivo y que podría deberse más a un despiste que a un hecho consciente. El 43.16% restante han excedido la velocidad en más de 10Km/h, velocidades que están más asociadas a una conducción más peligrosa para el propio conductor y el resto de vehículos de la vía. Dentro de este último rango, hay 546 sanciones que se producen por exceder la velocidad límite de la vía por encima de 50 Km/h, llegando a ser impuestas 3 sanciones por circular a 160 Km/h cuando el límite de la vía era 90 Km/h.

https://miro.medium.com/max/788/1*X_xI2G7mcJulgz0TxjjSpg.png

Gráfico. 23 — Diferencia entre velocidad de circulación y velocidad limite de la vía cuando se impone la sanción

Durante el análisis se comprueba que la velocidad máxima de la vía no es lo que marca la sanción, lo que condiciona la pérdida de puntos es la diferencia entre esa velocidad máxima y la velocidad de circulación del vehículo en el momento de la multa (gráfico 24). Cuando esa diferencia no supera los 20 Km/h respecto de la velocidad máxima de la vía, la sanción no implica retirada de puntos. Es a partir de 21 Km/h cuando observamos que se establecen rangos de velocidad que marcan los puntos retirados. Cuando existe un exceso de entre 20 y 30 Km/h la sanción impuesta implica una retirada de 1 punto de media, los excesos de 30 a 40 Km/h por encima del límite de la vía implican una retirada de 3 puntos de media y que si el exceso es de entre 40 y 50 km/h la retirada es cercana a los 3.5 puntos de media. Cuando se excede entre 50 y 60 km/h la multa impuesta conlleva una retirada de 4 puntos y es cuando excedes los 60 Km/h por encima de la velocidad límite de la vía cuando se establecen 6 puntos sanción, la sanción máxima respecto a la retirada de puntos.

https://miro.medium.com/max/902/1*8bOkflnotgpdO4XaPqo4Mw.png

Gráfico. 24 — Número medio de puntos retirados en función de la Diferencia entre velocidad de circulación y velocidad límite de la vía cuando se impone la sanción

¿Quién es el encargado de multarnos en Madrid?

Las autoridades encargadas de imponer sanciones en materia de tráfico en el Ayuntamiento son 4 (gráfico 25):

https://miro.medium.com/max/1400/1*XSCjz-VHpPch_90sR-Pcsg.png

Gráfico. 25 — Número de multas y total recaudado por los cuerpos encargados de imponer sanciones de tráfico en el municipio de Madrid

Entonces, ¿Cómo se conduce por el municipio de Madrid?

Madrid es un municipio donde el tráfico es rápido, intenso e impredecible y hay zonas donde estas peculiaridades se complican. La que se ha ganado su mala fama es la M-30, ya que es donde más infracciones se cometen y que los distritos Centro, Ciudad Lineal y Salamanca quizás sería mejor evitarlos a la hora de conducir. Además, también hay horarios donde conducir por Madrid parece no ser una buena idea, principalmente en las primeras horas de la mañana y las ultimas de la tarde.

Pero a pesar del ritmo frenético de la ciudad de Madrid y de estar considerada una de las ciudades con el tráfico mas caótico de España, los datos reflejan una versión bastante menos dura cuando se trata de peligrosidad.

Conducir por Madrid no es tan peligroso como podría parecer y muestra de ello es que la gran mayoría de las denuncias son de carácter leve y que en su mayoría se deben a estacionamientos ilegales y a no respetar ciertas zonas limitadas al tráfico. Ni siquiera en las sanciones por excesos de velocidad parecen dar la razón a las malas lenguas ya que mayoritariamente las velocidades a las que se circula en los momentos en que se imponen las multas no son demasiado elevadas y parecen deberse a rebases del límite de la vía por despiste más que por conducciones imprudentes que impliquen riesgos para la integridad física del resto de conductores.

Originally published at https://www.linkedin.com.

More from Juan Manuel Jambrina Montesinos

Amante de los datos y la visualización. Creándome un futuro basado en los datos

Por Juan Manuel Jambrina Montesinos.

Parte I aquí.

(Dashboard interactivo en Tableau Public)

¿Influye el mes del año o la hora del día en que se producen las multas en la gravedad de las mismas?

Además de esta visión general del año 2020 se quiso comprobar como influyó la temporalidad, tanto mensual como horaria, a la cantidad de denuncias.

Durante todo el 2020, como se comentó anteriormente en este artículo, el confinamiento ha producido un descenso más que considerable en la cantidad de multas admitidas a trámite sin que exista ninguna distinción en función de la gravedad de las mismas (gráfico 9).

https://miro.medium.com/max/1400/1*GLn68bChFkWy_ZQRBccJJQ.png

Gráfico. 9 — Evolución mensual, durante el año 2020, de las multas en función de su gravedad

Por otro lado, se puede observar que en agosto existe una disminución de sanciones, pero en este caso este descenso se refleja solo en las multas leves y muy graves mientras que las graves, en lugar de disminuir, presentan un leve ascenso (gráfico 10).

https://miro.medium.com/max/1400/1*W9f9Q5VvYyuxQuYKcz3eFQ.png

Gráfico. 10 — Evolución mensual, durante el año 2020, de las multas de calificación grave

Para intentar entender esta tendencia se analizaron los motivos por los que más se sanciona durante cada mes (gráfico 11) y se comprobó que es el exceso de velocidad la causa más frecuente y que hubo un aumento del 2.24% de sanciones de este tipo respecto a Julio. Esto nos lleva a pensar que durante agosto parece que los conductores tienden a correr más con sus vehículos y además aumentan considerablemente la velocidad respecto al límite de la vía ya que incurren en faltas graves.

https://miro.medium.com/max/1400/1*92O_6rqilywTpwuq_Kb1kg.png

Gráfico. 11 — Evolución mensual de las multas en función de las causas causantes de las mismas

Algo parecido ocurre con la clasificación de las multas en función de la franja horaria en que se producen. Las imposiciones de multas leves comienzan entre las 8 y 9 de la mañana y finaliza sobre las 9 de la noche. En este caso el motivo de sanción más frecuente es el estacionamiento y coincide con el horario de la zona SER (gráfico 12a y 12b).

https://miro.medium.com/max/1400/1*vCQrm_0Rig2GgUAirj9AOw.png
https://miro.medium.com/max/1400/1*JyI62RTpACJLbiI1FBi_ZA.png

Gráfico. 12 — Evolución diaria de las multas de carácter leve (por horas) y motivos que las causan

En el caso de las multas con calificación grave también se denuncian en un rango horario muy similar, aunque se observa cierta extensión del mismo, comenzando sobre las 6 de la mañana y finalizando sobre las 11 de la noche. Al revisar los principales motivos durante este rango horario se observa que es el exceso de velocidad la principal causa de sanciones graves durante este periodo (gráfico 13).

https://miro.medium.com/max/1400/1*RxYk4QLI1hCsBAVJ4NiRsw.png
https://miro.medium.com/max/1400/1*dqArCiJom9WNVWcRo1G4dQ.png

Gráfico. 13 — Evolución diaria de las multas de carácter grave (por horas) y motivos que las causan

Y finalmente, es con las multas de calificación muy grave donde se observa un cambio de distribución horaria concentrándose principalmente entre las 5 de la tarde y las 5 de la mañana. Haciendo un análisis más exhaustivo se puede comprobar que los motivos de estas sanciones son principalmente el consumo de alcohol y drogas y la conducción temeraria, causas habitualmente asociadas al ocio nocturno (gráfico 14).

https://miro.medium.com/max/1400/1*uRtYh1lHadGgdNwlLV9XUA.png
https://miro.medium.com/max/1400/1*lLyXRsNgtRDbI-dfk70xAQ.png

Gráfico. 14 — Evolución diaria de las multas de carácter muy grave (por horas) y motivos que las causan

¿En qué zonas de Madrid se imponen más multas?

Una vez que ya conocemos las principales causas y los principales momentos en los que se producen las sanciones de tráfico, podemos ubicar ahora los lugares donde se producen estas infracciones. Se quiso conocer la localización tanto a nivel de distrito como de barrio y situar las principales vías en las que más denuncias se producen.

Respecto a los distritos con más multas (gráfico 15) es el distrito Centro el que acumula un mayor número de sanciones con un 34.12% del total (546.699 boletines de denuncia en 2020) seguido del distrito de Ciudad Lineal con un 17.90% (286.779 multas) y el distrito de Salamanca con un 7.93% (127.122 sanciones). Por el contrario, los distritos más respetuosos con las normas de circulación son Villa de Vallecas (3.484 multas), Moratalaz (3.147 multas) y Vicálvaro (2.637 multas).

https://miro.medium.com/max/1400/1*idjMqtLO-9J10URql2LuMw.png
https://miro.medium.com/max/534/1*HEEZ2A7yk7c1NmFZJXklAA.png

Gráfico. 15 — Ubicación de los distritos en función de la cantidad de multas impuestas

Realizando este mismo análisis en función de los barrios (gráfico 16) se obtienen resultados compatibles con los obtenidos en los distritos. Se puede comprobar que son los barrios de Costillares, perteneciente al distrito de Ciudad Lineal, con el 17.48% de las sanciones (280.062 multas), Sol (distrito Centro) con el 10.26% (164.492 multas ) y Palacio (distrito Centro) con el 7.07% (113.302 multas) los que menos cumplen con las normas de circulación. Por el contrario, los barrios con menos infracciones en materia de tráfico son Horcajo (distrito Moratalaz) con 96 sanciones, Pavones (distrito Moratalaz) con 36 sanciones y Atalaya (distrito Ciudad Lineal) con 12 infracciones. Es curioso comprobar que el barrio de la Atalaya, en el que solo se han impuesto 12 infracciones durante 2020, pertenece al segundo distrito más infractor.

https://miro.medium.com/max/1400/1*idp5i78LgXCAKw9jLnfgJA.png
https://miro.medium.com/max/528/1*SSGjAk1fsXvUSBX640eKkw.png

Gráfico. 16 — Ubicación de los distritos en función de la cantidad de multas impuestas

También se quiso conocer el nombre de las vías donde se han impuesto más denuncias en este 2020 (gráfico 17). Como podemos comprobar en el top 10 de vías con mas infracciones, es la M-30 (Calle 30) la que copa el ranking con un 17.46% del total de multas interpuestas. Y, muy de lejos, la siguen la calle Alcalá con el 5.59%, la calle Gran Vía con 3.53%, la autovía A-5 (2.68%) y las calles Atocha (2.56%), San Bernardo (2.15%), Segovia (2.03%), el Paseo de Santa Maria de la Cabeza (1.97%) y el Paseo de la Castellana (1.59%) y la calle Barbara de Braganza (1.49%).

https://miro.medium.com/max/712/1*TVwAurQXOGpPQkVBJ8YEDQ.png

Gráfico. 17 — Ranking de las 10 vías con más multas interpuestas en el municipio de Madrid

Llevando a cabo un análisis más detallado para conocer los motivos por los que estas vías son más prolíficas en cuestión de denuncias de circulación (gráfico 18) se observa que en la M-30 y la A-5 dominan, como era de esperar, las multas por exceso de velocidad (99.58% del total de infracciones durante 2020 en estas 2 vías) ya que son vías donde la velocidad permitida es mucho mayor y además poseen un mayor número de radares. Es por esta última causa, un radar situado en el paseo de Santa Maria de la Cabeza 115, por el que esta vía también tiene una mayor proporción de multas por exceso de velocidad (92.67% del total de multas de esta vía). Esta tendencia cambia en el Paseo de la Castellana donde las causas de sanción se reparten entre exceso de velocidad (41.09% del total de multas en esta vía) y estacionamientos indebidos (54.39% del total de multas de esta vía). En el resto de calles del top 10 la causa principal de denuncia es la falta de autorización y no respetar las medidas de acceso a Madrid Central.

https://miro.medium.com/max/1346/1*9e3MVUxvf6iPaGNo4QcdFQ.png

Gráfico. 18 — Motivos causantes de las multas interpuestas en las 10 vías con mas sanciones del municipio de Madrid

Sigue en parte III.

Por Juan Manuel Jambrina Montesinos.

(Dashboard interactivo en Tableau Public)

¿Cuál ha sido la evolución de las multas durante los últimos 5 años en Madrid?

El Ayuntamiento de Madrid ha interpuesto, entre enero de 2015 y octubre de 2020, 14.507.118 multas de tráfico lo que supone una media anual de 2.417.853. Ya entre 2017 y 2018 se produjo un descenso considerable en la tramitación de multas (13% menos) pero ha sido durante este último año 2020 (De enero a octubre ya que los datos de noviembre y diciembre aún no han sido colgados por el consistorio madrileño) cuando la disminución en el número de sanciones impuestas ha alcanzado un máximo histórico (23.5% menos), pasando de 2.108.364 en el mismo periodo de 2019 a 1.611.935 (gráfico 1). Siendo la recaudación media por multa de 98€, esto implica una disminución de 48.650.042€ en las arcas del Ayuntamiento (suponiendo que todas las multas llegan a efecto y se pagan íntegramente sin hacer uso del 50% de bonificación por pago durante los 20 días posteriores a la denuncia) pasando de una recaudación media de 206.619.672€ en 2019 a 157.969.630€ en 2020.

https://miro.medium.com/max/1400/1*J86dRc7fAAPNc63AptZoGw.png

Gráfico. 1 — Evolución anual del número de infracciones interpuestas entre los años 2015 y 2020

A pesar de existir un descenso generalizado en todas las causas de sanción (tabla 1), son las multas por estacionar en zona SER (44.1% menos que en 2019 por tiques no válidos y 40.1% menos en el mismo periodo por no poner el tique identificativo), incumplir la normativa de carga y descarga (40.4% menos que en 2019) y el uso de aparatos móviles durante la conducción (43% menos que en 2019) las que han sufrido una especial caída. Solo estas 3 causas suponen casi el 18% del descenso total de multas para 2020.

https://miro.medium.com/max/1400/1*o9l1ZbPV4ypKscvkftn-tg.png

Tabla. 1 — Número de infracciones entre los meses de enero a octubre durante los años 2015 a 2020 añadiendo las diferencias absolutas y relativas respecto al año anterior.

A pesar de esta disminución tan marcada de este último año, si se observa que la imposición mensual de sanciones a lo largo de los años es equivalente manteniéndose más o menos constante durante todos los meses del año a excepción de los meses de agosto donde se suele dar una disminución en el número de multas, pudiendo deberse al periodo de vacaciones durante el cual el tráfico dentro del municipio de Madrid se ve reducido considerablemente (Gráfico 2).

https://miro.medium.com/max/1400/1*5oFHPO1EhKoUcxwIBP-zZA.png

Gráfico. 2 — Evolución anual del número de infracciones interpuestas entre los años 2015 y 2020

¿Ha influido la COVID-19 en este marcado descenso de multas en 2020?

Todo este descenso tan acentuado en el número de multas interpuestas durante 2020 parece deberse al periodo de confinamiento vivido entre los meses de marzo y junio con motivo de la pandemia de la COVID-19. El año 2020 comenzó con un fuerte aumento en el número de multas con una subida del 35.42% en enero y 34.97% en febrero respecto a los mismos meses del año anterior.

Todo cambió a partir del 15 de marzo de 2020, cuando se impuso el confinamiento total, el cual prohibía la circulación en todo el territorio nacional a excepción de para realizar actividades esenciales, algo que generó un descenso de un 29.84% en las sanciones impuestas en materia de tráfico. Pero fue durante los meses de abril y mayo cuando se notó una bajada drástica en el número de denuncias, disminuyendo un 71.79% y un 53.32% respectivamente. En la comunidad de Madrid no se levantó el confinamiento estricto hasta el 21 de junio lo que contribuyó a que durante este mes también hubiese una fuerte disminución de sanciones (35.67%). Lo que podemos observar es que el levantamiento de restricciones a la movilidad para el periodo estival, aunque no consiguió frenar la caída de las sanciones si generó un descenso mucho menos marcado que en los meses anteriores (18.94% y 19.31% durante Julio y agosto).

A la vuelta de las vacaciones (mediados de septiembre) se volvió a generar un incremento en el número de casos de coronavirus dando lugar a la segunda ola y por tanto nuevos confinamientos y restricciones de movilidad importantes dentro del municipio de Madrid y que conllevaron que las sanciones de tráfico se redujeran de nuevo de forma bastante marcada, aunque no tanto como durante los meses más duros del confinamiento (23.39% y 39.57% durante septiembre y octubre). (Tabla 2)

https://miro.medium.com/max/1400/1*EV7e8YdpFi8cQb_DyaJgGQ.png

Tabla. 2 — Número de infracciones a lo largo de los meses durante los años 2015 a 2020 añadiendo las diferencias absolutas y relativas respecto a los mismos meses del año anterior.

¿Cómo ha sido este año tan peculiar para la evolución de las multas en Madrid?

Durante este año (de enero a octubre) el Ayuntamiento de Madrid ha tramitado 1.602.467 sanciones de tráfico lo que le habría generado 158.230.110€ (considerando que no se utiliza la bonificación del 50% del importe de la sanción económica si lo abonas en un máximo de 20 días naturales desde la primera notificación de la sanción administrativa).

¿Es peligroso conducir en Madrid?

El Ayuntamiento clasifica las multas en 3 categorías (leves, graves y muy graves) en función de la gravedad de las mismas (gráfico 3). Son las sanciones de categoría leve las más habituales representando un 68.83% del total mientras que las multas más graves solo equivalen al 0.28%.

https://miro.medium.com/max/1260/1*hpVKsJkTtmhd0dJM-gy3WQ.png

Gráfico. 3 — Clasificación de las multas en función de su gravedad

Respecto al motivo que ocasiona la sanción (gráfico 4), en el municipio de Madrid hay 3 causas principales que equivalen al 97.6% del total de multas impuestas y que se corresponden con:

El 2.4% restante son sanciones relacionadas con no respetar los semáforos en rojo (0.98%), conducción temeraria (0.56%) o la conducción bajos los efectos del alcohol o drogas (0.19%) entre otras.

Lo que podemos ver reflejado en estos datos es que casi dos tercios de las multas interpuestas (73.03%) en Madrid no se deben tanto a causas que pongan en riesgo la integridad física de los ciudadanos si no a causas relacionadas con la falta de respeto de las normas que aseguran una mejor convivencia como los lugares donde estacionar o el acceso a zonas no permitidas.

https://miro.medium.com/max/736/1*Q5WesKhH4J01cs8xAxHfCw.png

Gráfico. 4 — Motivos causantes de infracciones de circulación

¿Qué vehículos son los más denunciados?

El 99.34% de los vehículos que son sancionados por las autoridades madrileñas son los turismos y furgonetas con muchísima diferencia respecto al segundo tipo de vehículo más infractor que son las motocicletas (0.56%). El 0.10% restante se corresponden con camiones, bicicletas, peatones y en mucha menor medida patinetes y quads (gráfico 5).

Estas cifras no hacen más que reflejar la descompensación del parque automovilístico de Madrid (gráfico 6) donde los turismos y furgonetas representan el 84.83% y las motocicletas un 7.65% (según datos de la DGT para 2019). En el caso de los patinetes, a pesar del auge que han sufrido en los últimos años, tiene sentido su bajísima tasa de sanción que tienen ya que la nueva Normativa para Patinetes Eléctricos en Madrid no entró en vigor hasta el 2 de enero de 2021 y por tanto sería necesario esperar a los datos de este año para comprobar si se produce un aumento en las denuncias sobre este tipo de vehículo de movilidad urbana.

https://miro.medium.com/max/1044/1*KpM4STbdztjtaG-kEQ8Nvw.png

Gráfico. 5 — Tipos de posibles vehículos infractores

https://miro.medium.com/max/1240/1*TirWV-BlbLDmqTJkP1y8gQ.png

Gráfico. 6 — Distribución del parque automovilístico del municipio de Madrid en 2019

¿Y en qué tipo de vías es más fácil que te multen?

Según los datos del Ayuntamiento de Madrid (gráfico 7), el 65.74% de las multas se dan en calles, algo relativamente normal ya que las calles representan un 86.18% de las vías interurbanas en el municipio de Madrid. El segundo tipo de vías donde más denuncias se producen son las autovías (20.24%) que, a pesar de ser el décimo tipo de vía en frecuencia en Madrid, si son las más extensas y donde se permite una mayor velocidad de circulación (tercer motivo más frecuente por el que se multa). El resto de vías donde se ocasionan más sanciones son los paseos (5.73%), las avenidas (4.34%) y las plazas (2.93%) que, al igual que ocurría con las calles, coinciden con el ranking de vías interurbanas más frecuentes en Madrid (gráfico 8).

https://miro.medium.com/max/680/1*M_tSx1Ps-ckGvZxWOwQJJw.png

Gráfico. 7 — Tipos de multas en función de las vías

https://miro.medium.com/max/1112/1*IpHHtkd4DNdeRpcZknJniA.png

Gráfico. 8 -Tipos de vías urbanas mas frecuentes en el municipio de Madrid

Sigue en parte II.

Correlation in the COVID-19 cases and deaths depending on the delay. Part 2.

By Michal Deak.

Part 1 here.

(¿No sabes inglés? Botón derecho del ratón -> Traducir)

What did we calculate (or the discussion)

The number TD = 17 as the result for the time from infection to death for the 2nd pandemic wave is very close to the “real” measured time TD = 18.5 days in which it takes to die from COVID-19 after being infected by SARS-Cov-2. It looks like one can obtain some answers from a simple analysis of simple data. The discrepancy of the result for the 1st pandemic wave TD =9 though feels less encouraging to make brave conclusions and it should be so. Let us now look back to the beginning and try to explain what did we actually calculate.

First of all, the day most cases are detected is not the day of infection, so, the time TD we get from this kind of analysis should be somehow shorter than the correct value. It explains why the 1st wave TD is so much shorter than the correct one. There might be a delay in the time when a death is classified as COVID-19 caused death which might differ case to case. With the improvement of contact tracing during the later stages of the pandemic, we might safely assume, that the time between the infection and positive testing of an individual for the 2nd wave of the pandemic got shorter.

If we assume, that the real TD did not change between the pandemic/epidemic waves, we might conclude, that the times between infection and test, and the time between the death and registration of the death as a COVID-19 death got significantly shorter between the waves or they compensate each other in such way, that the result of our analysis for the 2nd wave is pretty close to the real TD. Just by the nature of the data we analyze, the information we can obtain from it is limited.

Figure 6: Correlation plot of new SARS-Cov-2 cases to new SARS-Cov-2 death cases. Delay of deaths 17 days (right) and 9 days (left). Averaged over 7 days.

Results with recent data

Above we have looked at the first months of the pandemic in United States, but using Power BI and publicly available data from Johns Hopkins University [5] we have created a dashboard using which one can do a hands on analysis of the correlation dependence on the delay in the COVID-19 data.

One can chose a country, time window and the delay and observe the correlation of new cases versus new deaths in a plot created automatically. The dashboard provides also plot of overlay of the deaths and the delayed cases and calculates a fatality rate using the slope of the fit of the data in the correlation scatter plot. Examples using US and Spain data can be seen in Figs. 

Figure 7: Power BI dashboard for the correlation of US cases vs deaths data in the time window from 5th June 2021 till 15th November 2021.

Figure 8: Power BI dashboard for the correlation of Spain cases vs deaths data in the time window from 27th December 2020 till 23th February 2021.

Final conclusions

Although the results seem interesting we might be skeptical, if we have learned anything new at all. We have definitely learned though, that there was a change in the correlation between the SARS-Cov-2 cases and COVID-19 deaths in summer in the middle of June 2020. Using the Power BI dashboard one finds, that each of the peaks in the data has different properties. This might be caused by change in data collection, testing, environmental changes, virus changes or recently vaccination of the population.

We have learned however, that even a simple analysis can give interesting and illuminating results. Before the analysis we knew, that a rise in COVID-19 cases causes later a rise in COVID-19 caused deaths. We have formulated a hypothesis and suprisingly found, that the results we obtained are not far from what we expected. It was definitely an exercise worth the time.

Codes used to make the plots for this article is available here.

References:

1. https://www.drugs.com/medical-answers/covid-19-symptoms-progress-death-3536264/

2. https://www.worldometers.info/coronavirus/

3. https://archive.org/web/

4. https://github.com/sangaline/wayback-machine-scraper

5. https://github.com/CSSEGISandData/COVID-19

Correlation in the COVID-19 cases and deaths depending on the delay. Part 1.

By Michal Deak.

(¿No sabes inglés? Botón derecho del ratón -> Traducir)

Pandemic motivates

The COVID-19 pandemic might be soon over. One can surely say, that the novel coronavirus – SARS-Cov-2 – changed lives of overwhelming majority of people around the globe. In the time we live in there is no shortage of more or less reliable information available around the internet. The numbers of newly infected people, recovered people and deceased people are presented on news and specially dedicated webpages. One should be able to make a concise picture for themselves and come to a conclusion about severity of the situation and the dangerousness of the COVID-19 disease. 

There are many questions, that one can ask that are already answered out there, but getting in touch with the data and get some answers by oneself provides so much more satisfaction and can give greater insight. There are always plots one finds missing from even the most thorough analysis found on internet. That is why I went on a short time obsessive streak to find out answers to some of my questions about the ongoing pandemic. That and I wanted to learn some R programming and try some data analysis – to try to work on an interesting project. 

So, what can one deduce from the data publicly available online? Let us find out, we might learn more on the way there.

How much time do I have, Doc?

Patient: How much time do I have, Doc?
Doctor: 10…
Patient: What 10? 10 weeks? 10 months?
Doctor: … 9, 8, 7…

There is actually information about the average time TD it takes for a patient to die from COVID-19 – time from infection to death – out there. Most sources give TD = 18.5 days [1]. Intuitively, information about TD should be encoded in the correlation between new daily cases and new daily deaths data. The more cases one day the more deaths on someday in the future.

The answer we might get from the publicly available data might differ from the measured TD since the value we calculate is not calculated directly. We shall not use information about every single patient. We are going to use information about daily new SARS-Cov-2 cases and daily new casualties – easily obtainable information available online. Specifically, for our analysis we are going to use data from worldometeres.info [2]. The discrepancies between our results might come from data collection issues like delays between infection date and test date for a patient – especially in early days of the pandemic the patients were tested mostly when they had severe symptoms – and delay in the death date and date when the death is declared as caused by COVID-19 or other nuanced problems related to relatively complicated data collection process.

Without further ado, let us dive into the data.

Looking at the data

We have scraped the data from worldometeres.info [2] using the waybackmachine [3] and the wayback-machine-scraper [4]. The scraped data includes information from March 23rd 2020 till September 15th 2020. Since every country is specific in its dealing with the epidemic/pandemic we should first focus on one country and since United States are rich on this kind of data we shall focus on US this time, although it will be interesting to compare data from various countries and we might (I promise we shall) look at that in later studies.

Figure 1: New SARS-Cov-2 daily cases (left). New SARS-Cov-2 daily deaths (right) 

Now that we have the data let us make a plot. More specifically let us make a plot of the new SARS-Cov-2 cases (Fig. 1) with the new SARS-Cov-2 caused death cases (Fig. 1). In Fig. 3 you can see, that the data points form blobs and the linear regression fit does not provide good description of the data. Not much correlation there.

You can also see, that we have separated the data points into 3 groups. We have chosen these 3 groups to separate the different pandemic waves. As you probably know there are “unofficially” 2 pandemic waves, but we have 3 groups. As it will turn out later this separation is useful. As the legend of the plot in Fig. 1 suggests red dots represent the 1st wave – data from the April 4th till June 11th 2020. Green dots represent the 2nd wave – data from June 12th till Ocober 15th 2020. Blue dots represent data from March 23rd till April 3rd 2020. Note: the separation between the 1st and 2nd wave has a certain degree of arbitrariness. Basically, the division point can be chosen from any of the points in the region in the plot in Fig. 2 where the green and red blobs overlap.

We have mentioned, that there is not much correlation in the plot in Fig. 1. One explanation could be, that we should not expect much expectation anyway, because it takes some time for a new case of SARS-Cov-2 to result in a death case, so, we should actually be correlating the new cases with death cases from the future (from the new case point of view). We can do that by introducing a delay into the correlation calculation. But what value of delay to introduce, you ask yourself.

Well, why not to introduce bunch of values of the delay and see which one is the best. Of course, it should be done for the 1st and 2nd wave separately. And voilà, we can see the results in the plot in Fig. 3. From the first glance at the just mentioned plots we realize, that our straightforward approach will not work. We can see, that the delay correlation spectrum contains multiple peaks, each separated by the next one by 7 days. Looking back on the new daily cases and new daily deaths plots (Fig. 1), which both contain multiple peaks with 7 days periodicity, we should have expected this behavior.

 

Figure 2: Correlation plot of new SARS-Cov-2 cases to new SARS-Cov-2 death cases with no delay and no averaging.

Figure 3: Correlation of new SARS-Cov-2 cases and new SARS-Cov-2 deaths as a function of delay during the 1st (up) and 2nd (down) pandemic waves.

Now we stand in front of few question: Is one of the peaks the right one or should we filter out the 7 days cycle from our plots?

Figure 4: New SARS-Cov-2 daily cases (left) and daily deaths (right) averaged over 7 days.

The usual way to get rid of the 7 days cycle is to instead taking daily case and deaths to use the 7 days moving average for both (Figs. 4). (Another approach could be to fit the points in Figs. 3 by a modulated oscillating function and find the maximum of the unmodulated function. We have done both and the results are consistent with each other.) Well, adopting the 7 days moving average method turns out beautifully. When we look at the correlation of the two quantities as a function of the delay now in Fig. 5, we can see curves with more or less defined maxima.

The correlation for the 1st wave in Fig. 5 peaks at around delay equal to 9 at the value 0.95 and the correlation for the 2nd wave in Fig. 5 peaks at around delay equal to 17 at the value 0.98. The peak in the delay plot for the 2nd wave is pretty well defined compared to the one in the 1st wave plot. It indicates, that the measurement of the delay of the delay in this way is more precise for the 2nd wave than 1st wave. There is more uncertainty in determining the delay for the 1st wave – the spread of the values is wider. Now we can plot correlation plots by including the obtained delays. Looking at plots in Figs. 6, it is actually surprising how well it works. Especially the second wave data stack up almost perfectly on a line.


Figure 5: Correlation of new SARS-Cov-2 cases and new SARS-Cov-2 deaths as a function of delay during the 1st (left) and 2nd (right) pandemic waves. Averaging over 7 days. 

(Article continues in part 2)

Por Antoni Munar.

Estamos rodeados de noticias del calentamiento global, y sin embargo nos sorprenden nevadas y olas de frio que rompen récords históricos. Son más propias de una glaciación. ¿En qué quedamos entonces?

La intuición nos hace pensar que a mas madera más fuego y al contrario, cuanta más agua menos fuego. Esta forma de razonar es consecuencia de un mecanismo de supervivencia natural que nos ha permitido sobrevivir desde la sabana originaria hasta la revolución industrial actual [1], pero con la revolución tecnológica y nuestro progresivo control de la naturaleza, nuestra capacidad de acción es más potente, y los fenómenos sobre los qué actuamos se vuelven más complejos. Correlación no implica causación (que dos cosas ocurran al mismo tiempo no significa automáticamente que una sea causa de la otra) y al contrario, anti-correlación no significa que una excluya a la otra.

¿Qué pasa entonces con las nevadas?

En primer lugar, no hay que confundir clima y situaciones meteorológicas puntuales, "el tiempo". Como distinguir los cambios en el curso de un rio, que se esté secándose, de los remolinos puntuales que pueden ocurrir. Porque, por ejemplo, ha caído un árbol o un desprendimiento y se produce una inundación en esa parte concreta al liberarse el agua embalsada. Es cierto que al final la tendencia prevalecerá, y al no haber en absoluto agua todo estará seco, pero en el camino pueden darse estos fenómenos en apariencia contradictorios.

Entonces,  ¿ qué ocurre con el calentamiento global y estas nevadas ? ¿ Pueden ser unas consecuencias del otro? Si, y en efecto es algo que los propios modelos del calentamiento global predicen [2]. El clima en la tierra es un complejo equilibrio dinámico entre calor recibido del sol durante el día y enfriamiento durante la noche, las oscilaciones de las estaciones, zonas polares y ecuatoriales, zonas terrestres y corrientes marinas, salinidad, acción de los seres vivos y últimamente la acción del ser humano, por su escala sin precedentes.

En este equilibrio, un símil útil puede ser como si estuviéramos en una cocina, con su horno y su nevera. Por siglos, la nevera y el horno en funcionamiento han estado en equilibrio. Últimamente encendemos el horno más de la cuenta, lo que ha hecho -y aquí es donde el símil no es exacto- que la puerta de la nevera se abra más de la cuenta, y el aire frio que se escapa es lo que nos está azotando en forma de "Filomenas" varias.

Esto que parece una anécdota, es justamente lo que estudios científicos detallados parecen indicar [3]. El calentamiento global está cambiando el equilibrio entre el frío polar y las latitudes medias en el planeta, dando lugar a estos fenómenos extremos. La evidencia actual apunta a que, si no hacemos nada, en el largo plazo, la nevera dejara definitivamente de funcionar. Tendremos un horno total, aunque por el camino hayamos tenido periodos ocasionales de congelación. 

¿Qué relación hay entre el big data y el calentamiento global?

El big data ha permitido a las nuevas tecnologías poder analizar de forma más precisa y rápida el impacto que tiene el calentamiento global en nuestro planeta. Un ejemplo claro es el de los incendios de Australia. Gracias a la información recopilada por los satélites, pudieron predecir el movimiento del incendio y detectar posibles focos. En un entorno climático cambiante e incierto, los riesgos se disparan y el big data está empezando a ser útil a la hora de analizar los riesgos a largo plazo.


Si tenéis alguna duda o sugerencia, no dudéis en enviarnos un mensaje.

chevron-down