martes, 11 de junio de 2019

Gráficas de datos metereológicos. Python. Generar página web.

Página principal

Gráficas de datos metereológicos.
Python.
Generar página web.


Continuamos con la serie de artículos sobre servidor web.
En el último artículo había creado un visualizador de temperatura, humedad y presión. Además de visualizar los datos, creaba un registro diario de los datos.
El archivo de los datos está bien, pero su visualización e interpretación es poco útil si no se ven los datos gráficamente.
En este artículo se representan los datos en dos gráficas, una de temperaturas por horas, y en la otra la representación de humedad y temperatura en función de la hora.
Aunque no soy muy partidario del lenguaje python, he de reconocer que se hace muy fácil trabajar con el debido a la gran cantidad de librerías que existen para casi cualquier cosa.
Para este programa hacemos uso de la librería matplotlib. Esta librería se emplea para hacer todo tipo de gráficas. La librería está muy extendida, además de disponer de mucha documentación y una excelente página web.
Con esta librería creamos las gráficas anteriormente mencionadas, para luego exportarlas como imágenes con formato  *.png. Las imágenes creadas será luego las que se visualizaran en la página web.

Lo primero que debemos hacer para crear una gráfica es tener los datos, estos datos los obtenemos del fichero diario con el nombre:
"Temp"+ time.strftime("%y_%m_%d")+".cvs"
Creamos una matriz donde se almacenan todos los datos de temperatura, humedad y presión, donde se ordenan por horas y minutos.
Debo de anotar que crear matrices en python es un poco peculiar, no existe la creación de matrices como en otros lenguajes, debemos crearlas añadiendo datos, es de lo mas frustrante, aunque tiene otras ventajas este lenguaje.

Crear una gráfica de cada minuto de las 24 horas del día es innecesario, lo he reducido a 10 datos cada hora, o lo que es lo mismo cada 6 minutos.
Creo otras listas con los datos que realmente voy a utilizar para la gráfica. En total serán 10 muestras por hora, y como son 24 horas, el total de datos representados serán 240.
Las listas de datos son la siguientes:
    listaTemp , listaHume, listaPres
Estas son las lista de datos que voy a proporcionar a la librería  matplotlib para que cree las gráficas.


Código de creación de la gráfica de temperatura.
fig = plt.figure()                                                              
ax = fig.add_subplot(1,1,1)
major_ticks = np.arange(0, 240, 30)                                             
ax.set_xticks(major_ticks)
ax.grid(which='major', alpha=1)

plt.xlabel("Temperatura DIA "+ time.strftime("%d_%m_20%y"))
plt.plot(listaTemp,color='red')
plt.xlim(0,240)
plt.ion()

my_dpi=75
plt.savefig("gra2.png",dpi=my_dpi)


Código de creación de la doble gráfica de humedad y presión.
fig, (ax1, ax2) = plt.subplots(2, sharex=True,)

plt.xlim(0,240)
ax1.plot(listaHume,color='blue')
ax1.set(ylabel='Humedad %')

plt.xlim(0,240)
ax2.plot(listaPres,color='green')
plt.setp(ax2.get_xticklabels(), fontsize=9)

major_ticks = np.arange(0, 240, 30)                                             
ax2.set_xticks(major_ticks)

ax2.set(ylabel='Bares')
plt.xlabel("HORA "+time.strftime("%H:%M"))

my_dpi=75
plt.savefig("gra1.png",dpi=my_dpi)

En las siguientes imágenes se pueden ver los gráficos creados.


  Gráficas pertenecientes a Palencia, ESPAÑA

Se puede estudiar las gráficas y observar el cambio de presión preludio de lluvia.
Después de la lluvia observamos también como aumenta la humedad en el ambiente.
Estas dos imágenes son las que se incorporan en la página web para hacer mucho mas intuitiva el estudio de los datos.

Para ejecutar el programa en python he creado un programa en bash llamado gratem.sh que se ejecuta cuando se inicia el ordenador.
gratem.sh
#!/bin/bash
echo "GENERANDO GRAFICOS"
cd $HOME/www/webcam
$HOME/www/webcam/gratem.py
Ya tenemos el script creado, pero nos falta que el script se ejecute cada 10 minutos.
Para esta tarea utilizaremos cron.  El comando cron es un administrador regular de procesos en segundo plano que viene de serie en linux.
Para añadir el comando que se debe ejecutar en segundo plano, utilizaremos el comando crontab -e  .
Editaremos de la siguiente forma:

    */10 * * * * /home/seta/www/webcam/gratem.sh > $HOME/tmp/cron.log 2>&1

De esta forma el script  de generación de gráficas se ejecutará cada 10 minutos.

Podéis comprobar el resultado en mi página:
http://seta43.duckdns.org/seta/webcam/gradia.html
http://seta43.ddns.net/seta/webcam/gradia.html
Espero que os guste este artículo, y que os sirva para vuestros proyectos.

PROGRAMAS

Saludos
Juan Galaz

Bibliografía:
https://matplotlib.org/index.html
https://claudiovz.github.io/scipy-lecture-notes-ES/intro/matplotlib/matplotlib.html
https://github.com/japp/Computacion-Cientifica/blob/master/graficos.rst



No hay comentarios:

Publicar un comentario