Para poder tratar los datos de presión medidos con el BARÓMETRO ARDUINO (http://blog.e-ao.org/#post2 ) es necesario que seamos capaces de manipular adecuadamente las fechas y horarios de las medidas llevadas a cabo. En este post trataremos este problema mediante la utilización de los recursos de programación de R (https://www.r-project.org/ ).

La forma habitual de tratar la información de variables que representan fechas y/o horarios es el uso de estas en forma de valores expresados en tiempo decimal. Básicamente esto consiste en reducir la fecha a un número decimal que es más fácilmente manipulable. Con este fin se suele usar en los lenguajes de programación el valor de día JULIANO que es un número que expresa cualquier fecha como el número de días que han pasado desde una fecha en cuestión hasta otra predeterminada.

En el caso del lenguaje R para poder tratar las variables fechas de manera sencilla se suele emplear la librería “LUBRIDATE” que contiene multitud de funciones que tienen este objetivo. Esta librería no viene con el paquete de R por lo que habrá que instalarlo. Básicamente para poder hacer el tratamiento de nuestros datos de presión se ha usado esta librería y las funciones de ploteado propias de R. Para los que no estén familiarizados con R en este link encontrareis una guía muy amplia de tutoriales de este lenguaje de programación (http://www.skilledup.com/articles/18-free-tutorials-learning-r-programming )

A continuación presento las dos gráficas que hemos construido para estudiar e interpretar los datos. La figura 1 representa la evolución temporal de los datos de presión y la figura 2 representa el histograma de los mismos.


Figura 1. Evolución de la presión medida por el BARÓMETRO ARDUINO durante el mes de Mayo (2017)


Figura 2. Histograma de frecuencias de los valores de presión observados

Lo más interesante a destacar de estas dos figuras es el hecho de que la distribución estadística de las medidas (figura 2) no es totalmente simétrica a su valor modal de 1011 hPa. En los datos de nuestro barómetro instalado al nivel del mar, aparecen valores depresionarios con un pico alrededor de 1001 hPa. El fenómeno que observamos es como si en la zona de análisis existiera una situación mayoritaria de presiones que se centran alrededor de 1011 hPa pero que sufre la aparición persistente de períodos depresionarios del orden de de 1000 hPa.

Volviendo al tema de la programación en R que permite la obtención de estas dos gráficas a continuación presentamos comentado el script R desarrollado.

###############################################################
# introducción de la librería “lubridate”
####################################
library(lubridate)

###########################################
# lectura de datos
##########################################
dat=read.table(“c:\\Uso_R\\DATA_p_300517.txt”)
p=dat[,8]

#############################################################
# conversión de los datos de las fechas a día juliano
# la conversión ser realiza considerando como dia 1 el primer día de 2017
# si quisiéramos referirlo a otra fecha habría que modificar
# dia=as.Date (dia, origin=”FECHA EN CUESTION”)
############################################################
dia=paste(dat[,6],dat[,5],dat[,4],sep=”-“)
dia=as.Date(dia)
dia=yday(dia)

################################################
# conversión de la hora de medida a hora decimal
################################################
hora=dat[,1]
min=dat[,2]
seg=dat[,3]

########################################################
# conversión de la día y hora de medida a tiempo decimal
########################################################
td=dia+((1/24)*(hora+(min/60)+(seg/3600)))
# los datos se miden en horario de invierno –> utc+1 <–
td=td-(1/24)

#############################################################################
# como sabemos que la primera medida es td[1]=116.7538
# y la última medida es td[48280]=150.3391 (48280=dim(dat))
# sabiendo que 0.000694444 es “60s” de paso en decimal de dia (1/(24*60))
# elegiremos 117=trunc(td[1]+1) como primera medida
# y 150 – 0.000694444 ( 150=trunc(td[dim(dat)[1]]) ) como última medida
# recordamos que tenemos 1440 minutos de un día
# primero es interpolar ya que la medida no se hacen
# sistemáticamente cada 60 s
#############################################################################

xout=seq(117,(150-0.000694444),by=0.0006944444)
finalp=approx(td,p,xout,method=”linear”)

#########################################################
# en xout tenemos ya los días y las horas en decimal
# en finalp$y los valores de p interpolados regularmente
# así ya podremos plotear los datos
#########################################################

x=as.Date(xout,origin=”2017-01-01″)
plot(x, (finalp$y/10), type=”p”, pch=20, col=”blue”, cex.axis=.75, main=”EVOLUCIÓN DE LA PRESIÓN 28-Abril a 1-Junio”,xlab=””,ylab=”PRESIÓN (hPa)”,xaxt = “n”)
d1=as.Date(113,origin=”2017-01-01″)
d2=as.Date(161,origin=”2017-01-01″)
axis.Date(1,at=seq(d1,d2,”weeks”))
axis.Date(1, at = seq(d1, d2, “days”), labels = FALSE, tcl = -0.2)

#############################################################
# Para hacer el histograma
# sabemos ya que el valor mínimo de la presión e 994 hPa
# y el máximo es 1024 hPa
###########################################################

final=finalp$y/10

limp=seq(994,1024,by=2)
h=hist(final,breaks=limp)

plot(h,main=”DISTRIBUCIÓN DE LOS DATOS DE PRESIÓN”,xlab=”PRESIÓN (hPa)” ,ylim=c(0,10000),ylab=”Frecuencia”,xaxt=”n”,yaxt=”n”)
axis(1,at=seq(970,1030,by=2))
axis(2,at=seq(0,10000,by=2000))