imagen

sistemas operativos = on

de momento ...

Gnuplot y bash, registro de carreras

June 15, 2018 — Julio

Los que corremos, distancias superiores al kilómetro, solemos medir la velocidad no en Km/h ni en m/s sino que lo hacemos en relación al ritmo, en minuto/Km. Solemos decir voy a 4:30 o 5:55.

Tengo apuntados los entrenos desde hace mucho tiempo, con lo cual registro distancia, tiempo y título de descripción corta del trayecto efectuado entre otras muchas cosas.

En R ya tengo un programa que me saca muchos muchos datos, pero ahora me apetecía seguir aprendiendo bash y por ello decidí cómo sacar algunos datos e incluso un gráfico sólo con herramientas disponibles en la línea de comandos.


El objetivo es que dado un "título" que se pregunte al usuario, descripción corta de un entreno, que suele ser un identificador de un mismo circuito o trayecto del estilo "de casa a la colina" o "5 vueltas a la manzana" por ejemplo, nos saque datos como:

  • ¿cuántas veces hemos hecho ese circuito?
  • la distancia menor y en qué dia, y la distancia mayor medida con el gps y su día.
  • el ritmo efectuado más lento, además de listar la fecha, día de la semana, hora, distancia, tiempo, peso y sus comentarios.
  • lo mismo para el ritmo más rápido.

Y por último un gráfico en el que en el eje x tenga las fechas de los dias que se hizo ese circuito, en el eje y el ritmo hecho.

El script que lista por pantalla los resultados de los datos mencionados arriba no lo pongo, pero me lo pasé bien pues tuve que utilizar comandos como sed, if then, echo, exit, cp, cat, iconv, sort y awk todos ellos con sus opciones, redirecciones de la salida y demás. Y dentro de los comandos de awk, FS, BEGIN, gsub, split, arrays[], if, printf, bucles for ...

Me lo pasé genial haciendo todo eso, pues en pocas líneas se puede hacer lo que en muchas en Go, R, o Python, y todo desde bash, uno de los entornos de la línea de comandos que ofrece GNU/Linux.

Pero donde se me complicó un poco todo fue a la hora de hacer el gráfico. Si los parámetros que se pasan en cada uno de los comandos citados anteriormente son a veces imprevistos, sin relación entre ellos y complicados de memorizar, más todavía son los de sed y awk, pero gnuplot se lleva más la palma.

Gnuplot nos permite hacer gráficos y sus opciones son inmensas: GnuPlot y muchos de sus parámetros son difíciles de entender y sobre todo sus compatibilidades entre ellos.

El mayor problema que encontré es en la definición del formato de los valores que se ponen en los ejes que son de fecha y hora. No nos deja poner en el eje y por ejemplo el formato "%H:%M" para horas:minutos y en el eje x "%D/%m/%Y" para dia/mes/año. O uno para los dos o el otro.

Al final lo resolví dejando el formato dicho para el eje x y en el eje y poner valores que representen el total de segundos del ritmo empleado para cada fecha. Así en lugar de poner un ritmo de 5:40 min/Km pongo 340 segundos.

La gráfica queda algo menos clara pues tenemos que hacer cálculos mentales al verla, pero es suficiente si se quiere ver la progresión de los entrenos.

plot

gnuplot <<-EOFMarker  
    unset label  
    clear  
    set key off  
    set terminal png size 800,600  
    set output './plot.png'  
    set title "${titulografico}"  
    set xlabel "fecha"  
    set ylabel "segundos/Km"      
    set grid   
    set xtics nomirror font ",8" rotate by -65  
    set style data linespoints  
    plot "ritmo1.tsv" using 2:xtic(1) title 'Menos es mejor' linewidth 3  
EOFMarker

Tags: gnuplot, bash

Comments? Tweet