Tabs

domingo, 23 de marzo de 2014

Más python for runners

Hace unos 9 meses escribía mi entrada Python for runners, en la que comentaba una ocurrencia que tuve para practicar un poco con este lenguaje y de paso obtener unos datos estadísticos sobre los runners que corrieron la maratón de Barcelona y la de Madrid el año pasado. Me lo pasé muy bien programando, haciendo la entrada y leyendo los comentarios de muchos amigos geeks y no tan geeks... :) Los datos objetivos fueron que 117 hombres y 11 mujeres lo hicieron, los hombres que repitieron ambas carreras lo hicieron en Madrid a un ritmo medio de 3:51:20 y en Barcelona a 3:45:19. Las mujeres, a 3:56:09 de media en Madrid y 3:56:02 en Barcelona. Todo esto, con una separación de 6 semanas entre ambas... Parecía una locura correr dos maratones en 6 semanas, pero muchos locos lo hicimos y curiosamente los tiempos no eran muy distintos entre una y otra, especialmente si tenemos en cuenta el trazado más duro de Madrid.

Una de las cosas que más me gusta de programar es que es muy fácil reutilizar lo que has hecho anteriormente y volver a aplicarlo a una situación parecida a la original con muy poco esfuerzo. Apenas me ha costado media hora preparar el Python for Runners 2.0, el reto Sevilla - Barcelona! :)

Sólo si sois muy muy muy geeks, el código está disponible aquí:

https://github.com/iZydro/python-for-runners

Si algo de lo que viene a continuación no lo entendéis y os interesa, os invito a releer el post de hace nueve meses, no ha cambiado prácticamente nada lo que he hecho hoy.

Ha sido muy fácil preparar la versión de este año. En el caso de la maratón de Barcelona, sólo había un cambio en la URL de donde se sacaban los datos de los tiempos de los corredores. En el caso de Sevilla, fue un poco más divertido, no estaba del todo claro de dónde se sacaban los datos, en este caso la web estaba hecha de manera mucho más profesional y descargaban el resultado usando JavaScript, sin recargar toda la página del navegador. Como no tenía ganas de perder mucho tiempo, puse el WireShark, un monitor de red, y vi rápidamente que cada vez que consultaba el tiempo de un runner la web obtenía los datos de esta URL:


En este caso, el chorizo enorme 53072209-9240-4455-9f22-0e7fbc5ffd2c es el identificador de la maratón de Sevilla, y el 1727 que viene después el dorsal del runner. Lo otro parece un timestamp, y en realidad parece que no se usa... La estructura de los datos que devolvía el servidor era muy parecida a la del de Barcelona, así que cambiando apenas un par de líneas puse en marcha los dos scripts y en poco más de una hora ya tenía todos los datos preparados en sendos ficheros de texto que contenían el nombre de cada finisher y su tiempo.

Y con los datos de los 14223 finishers de Barcelona y los 7998 de Sevilla, ¿sabéis cuántos locos como yo corrimos ambas maratones en un plazo de 3 semanas de tiempo, cuál fue el tiempo medio que hicimos los repetidores de las dos pruebas y cuál fue más rápida y por cuánto? Para eso está el Python for Runners... :) Para darme cuenta de que quizá no haya sido una locura tan grande, o al menos, que hay otros 67 locos como yo que corrieron ambas maratones... :)

¿Y todo esto para qué? Para corroborar que el tiempo medio de los 69 repetidores en Sevilla fue de 3:39:40, y en Barcelona de 3:43:29...

1: jorge guisado serrano            SEV=>3:43:06  BCN=>2:44:20 - BCN faster by 0:58:46
2: scott paul johnston              SEV=>2:48:48  BCN=>2:56:09 - SEV faster by 0:07:21
3: ramon lopez mendizabal           SEV=>3:16:25  BCN=>4:29:41 - SEV faster by 1:13:16
4: albert caballero recio           SEV=>2:37:13  BCN=>2:40:20 - SEV faster by 0:03:07
5: oriol sibila vidal               SEV=>3:28:26  BCN=>2:58:35 - BCN faster by 0:29:51
6: chris zair                       SEV=>3:38:18  BCN=>3:48:04 - SEV faster by 0:09:46
7: angel ortiz de villajos sanz     SEV=>3:20:08  BCN=>3:23:20 - SEV faster by 0:03:12
8: jose gaspar escudier vega        SEV=>2:55:12  BCN=>3:08:30 - SEV faster by 0:13:18
9: miguel moreno moreno             SEV=>3:16:18  BCN=>3:29:10 - SEV faster by 0:12:52
10: rafael toribio medina           SEV=>3:36:31  BCN=>3:02:11 - BCN faster by 0:34:20
11: garry mcgrotty                  SEV=>3:43:11  BCN=>3:33:35 - BCN faster by 0:09:36
12: isidro gilabert                 SEV=>3:14:39  BCN=>3:28:19 - SEV faster by 0:13:40
13: jose enrique calleja gonzalez   SEV=>3:29:21  BCN=>4:35:16 - SEV faster by 1:05:55
14: guillermo rodriguez ramirez     SEV=>3:27:28  BCN=>3:28:33 - SEV faster by 0:01:05
15: luis morales martinez           SEV=>3:45:31  BCN=>3:12:28 - BCN faster by 0:33:03
16: jordi castells marchante        SEV=>3:34:02  BCN=>3:33:14 - BCN faster by 0:00:48
17: josep maria sibila figuls       SEV=>3:28:26  BCN=>3:32:06 - SEV faster by 0:03:40
18: alvaro garcia suarez            SEV=>3:38:47  BCN=>3:43:57 - SEV faster by 0:05:10
19: pedro jose lopez cosano         SEV=>3:18:48  BCN=>3:29:15 - SEV faster by 0:10:27
20: antonio garrido esmerado        SEV=>3:24:40  BCN=>3:42:46 - SEV faster by 0:18:06
21: marta lozano gimenez            SEV=>5:07:59  BCN=>4:43:31 - BCN faster by 0:24:28
22: pau gimenez martinez            SEV=>5:07:58  BCN=>3:56:31 - BCN faster by 1:11:27
23: ferran santoyo medina           SEV=>4:30:21  BCN=>4:35:38 - SEV faster by 0:05:17
24: flavio augusto francisco        SEV=>3:21:46  BCN=>3:39:19 - SEV faster by 0:17:33
25: pablo moreno sillero            SEV=>3:38:20  BCN=>3:36:26 - BCN faster by 0:01:54
26: antonio sanchez corpas          SEV=>3:38:24  BCN=>3:36:26 - BCN faster by 0:01:58
27: david lopez ruiz                SEV=>3:19:29  BCN=>3:52:32 - SEV faster by 0:33:03
28: marlene fonseca                 SEV=>3:45:17  BCN=>4:00:55 - SEV faster by 0:15:38
29: manuel dato dato                SEV=>3:48:45  BCN=>3:50:59 - SEV faster by 0:02:14
30: santiago jose perez moya        SEV=>3:41:55  BCN=>3:57:09 - SEV faster by 0:15:14
31: jaime ruiz diaz                 SEV=>3:40:00  BCN=>4:10:31 - SEV faster by 0:30:31
32: david bertomeu baile            SEV=>3:45:08  BCN=>4:15:22 - SEV faster by 0:30:14
33: vasco rodrigues silva           SEV=>3:42:26  BCN=>3:52:21 - SEV faster by 0:09:55
34: carmine semonella               SEV=>3:36:35  BCN=>4:39:56 - SEV faster by 1:03:21
35: bruce bignell                   SEV=>4:09:45  BCN=>4:25:04 - SEV faster by 0:15:19
36: brian dunne                     SEV=>3:56:17  BCN=>3:13:54 - BCN faster by 0:42:23
37: javier garcia moreno            SEV=>3:11:33  BCN=>4:05:23 - SEV faster by 0:53:50
38: filipe torres                   SEV=>3:19:01  BCN=>3:21:05 - SEV faster by 0:02:04
39: miguel angel velasco llamas     SEV=>3:51:59  BCN=>4:23:37 - SEV faster by 0:31:38
40: jesus ramon fernandez rico      SEV=>3:57:07  BCN=>4:10:15 - SEV faster by 0:13:08
41: julio agullo ramon              SEV=>3:57:52  BCN=>4:10:54 - SEV faster by 0:13:02
42: alfredo pradas salamanca        SEV=>3:57:04  BCN=>3:54:32 - BCN faster by 0:02:32
43: eduard mora pareja              SEV=>3:56:57  BCN=>3:58:04 - SEV faster by 0:01:07
44: joao mota freitas               SEV=>3:42:25  BCN=>3:32:11 - BCN faster by 0:10:14
45: juan herrera martinez           SEV=>4:31:27  BCN=>4:28:24 - BCN faster by 0:03:03
46: pedro pereira                   SEV=>3:09:50  BCN=>4:12:18 - SEV faster by 1:02:28
47: jesus villanueva angulo         SEV=>2:56:05  BCN=>2:50:23 - BCN faster by 0:05:42
48: david garcia sanchez            SEV=>3:53:55  BCN=>2:56:54 - BCN faster by 0:57:01
49: manuel barrera rodriguez        SEV=>3:09:57  BCN=>3:08:44 - BCN faster by 0:01:13
50: carlos castillo guardia         SEV=>3:14:50  BCN=>3:22:40 - SEV faster by 0:07:50
51: felix cobo paquez               SEV=>3:19:56  BCN=>3:36:09 - SEV faster by 0:16:13
52: joan noguera gonzalez           SEV=>3:17:39  BCN=>3:21:20 - SEV faster by 0:03:41
53: marta navarro salles            SEV=>3:37:44  BCN=>3:48:35 - SEV faster by 0:10:51
54: elisabet valero morera          SEV=>4:25:35  BCN=>3:34:59 - BCN faster by 0:50:36
55: enrique coder martinez          SEV=>3:46:19  BCN=>4:04:12 - SEV faster by 0:17:53
56: jose francisco cabezas sedano   SEV=>3:14:34  BCN=>2:56:18 - BCN faster by 0:18:16
57: joaquin carmona garcia          SEV=>3:32:27  BCN=>3:37:12 - SEV faster by 0:04:45
58: stefano leonino                 SEV=>3:21:08  BCN=>3:31:49 - SEV faster by 0:10:41
59: brian pim                       SEV=>3:13:53  BCN=>3:19:45 - SEV faster by 0:05:52
60: carlos fernandez garcia         SEV=>4:17:40  BCN=>5:17:08 - SEV faster by 0:59:28
61: enrique jorquera barrionuevo    SEV=>4:42:06  BCN=>3:04:43 - BCN faster by 1:37:23
62: rodrigo ferreira                SEV=>4:10:19  BCN=>4:10:10 - BCN faster by 0:00:09
63: laia ratera rubiralta           SEV=>3:22:08  BCN=>3:19:50 - BCN faster by 0:02:18
64: tomas padua vega                SEV=>2:27:44  BCN=>2:40:12 - SEV faster by 0:12:28
65: jose maria segura saint-gerons  SEV=>4:19:01  BCN=>4:27:26 - SEV faster by 0:08:25
66: juan ignacio rovira magraner    SEV=>4:21:14  BCN=>4:00:20 - BCN faster by 0:20:54
67: manuel masedo gomez             SEV=>4:15:53  BCN=>4:26:45 - SEV faster by 0:10:52
68: montse urbea puig               SEV=>3:47:01  BCN=>3:58:52 - SEV faster by 0:11:51

Ran SEV2 faster: 45, ran BCN faster: 23
Average SEV time 3:39:40
Average BCN time 3:43:29
Average difference: SEV faster by 3 minutes, 48 seconds

Como datos curiosos... Un runner hizo 2:37 en Sevilla y 2:40 en Barcelona, y otro 2:27 y 2:40 también... Qué bestias... Otro que me dejó pensativo fue el que hizo 4:42 en Sevilla, y luego se marcó un 3:04 en Barcelona. Otro hizo también 3:54 y 2:56, respectivamente. Habrán hecho una maratón cochilona en Sevilla para luego cascarse un sub 3h en Barcelona. Esas cosas nunca las habría sabido sin mi querido python...

Supongo que esto es fruto del Marathon Blues... :)

10 comentarios:

  1. Muy, pero que muy interesante. Habría que hacer algo parecido con todas las maratones de España... :-)

    ResponderEliminar
  2. Interesante! Me molan este tipo de estudios, y la verdad es que requiere dedicación y paciencia. Te lo has currado!

    ResponderEliminar
  3. Muy friki pero muy interesante. Hay desviaciones de algunos tiempos muy significativas.
    Petadas gloriosas, regalos( o robos) de dorsal, quién sabe...
    Para un paleto informático como yo, que logres esto es magia.Un saludo

    ResponderEliminar
    Respuestas
    1. Muy, muy interesante Isidro, otra posibilidad que se me ocurre para esas diferencias tan significativas es que algún corredor corriera con algún amigo, hermano, hermana, pareja etc.

      Eliminar
  4. Las chicas clavan sus tiempos por pocos segundos y son de nivelazo.

    ResponderEliminar
  5. Bien por Pyton...nunca me gustó especialmente ese lenguaje, pero he de reconocer que le has sacado un partido curioso.
    Me gustaría probarlo con algunos 10K que he corrido...que le pasas como entrada, un excel? pdf? html?

    ResponderEliminar
    Respuestas
    1. Un archivo de texto que contiene el nombre, el signo | y el tiempo para cada runner

      Eliminar
  6. Me encanta estas comparativas!! datos muyyy interesantes!!
    Hay mucho loco por allí pero pocos frikis como tú!
    Enhorabuena por los dos maratones!!
    bss
    Tania

    ResponderEliminar
  7. Madre mia, y tu dices que solo te ha llevado media hora?....pufff pues a mi me parece tela, eso si muy interesante.

    ResponderEliminar
  8. Me encanta :)
    Además el código es bello y elegante ;)
    Hacía tiempo que no veía python, últimamente estoy liado con VB

    ResponderEliminar