Hemos colocado el medidor autónomo de aerosoles ( http://blog.e-ao.org/#post11) en una bicicleta (figura 1) para medir la concentración de aerosoles en una zona de nuestra ciudad (Vitoria-Gasteiz). Para nuestro trabajo hemos elegido el parque de Olarizu situado al sur de la ciudad.

Figura 1. Medidor de Aerosoles montado en una bicicleta

Para poder utilizar los datos recogidos por nuestro medidor es preciso realizar un conjunto de manipulaciones informáticas previas sobre los dos ficheros generados por el sistema. Recordemos que el sistema crea dos ficheros (DATA_1.txt y GPS_1.txt) que pueden no estar sincronizados. El primer paso para analizar los datos es crear un fichero común sincronizado con datos conjuntos del sensor y el GPS. El programa necesario para hacer este trabajo lo presento a continuación. Es un programa desarrollado en R.

###################################################
# programa para el tratamiento inicial de los datos pms5003
######################################################

# lectura de los dos ficheros generados por el Sistema
#############################################

data=read.table(“C:\\uso_R\\pms\\DATA_1.txt”)
GPS=read.table(“C:\\uso_R\\pms\\GPS_1.txt”)

###################################################
# la ultima medida GPS no la tengo en cuenta por si
# sale del tiempo de observacion de data
##################################################
gp=dim(GPS)
GPS=GPS[1:gp[1]-1,]

###########>>> creo matriz para los datos de data
##################################################
a=dim(data)
nrow=a[1]/8
data_c=matrix(0,nrow,8)

####################################################
# creacion de la nueva matriz con la información
###########################################################
for (n in 1:nrow) { for (j in 1:8) {data_c[n,j]=data[j+(n-1)*8,1]} }

######>>> Hago las interpolaciones
######>>> los datos interpolados finales son la variable_gps$y
#################################################################
t_GPS=GPS[,7]*60+GPS[,8]*60+GPS[,9]
t_data=data_c[,6]*60+data_c[,7]*60+data_c[,8]

Hu_data=data_c[,1]
Hu_gps=approx(t_data,Hu_data,t_GPS,method=”linear”)

Temp_data=data_c[,2]
Temp_gps=approx(t_data,Temp_data,t_GPS,method=”linear”)

aero1_data=data_c[,3]
aero1_gps=approx(t_data,aero1_data,t_GPS,method=”linear”)

aero2_data=data_c[,4]
aero2_gps=approx(t_data,aero2_data,t_GPS,method=”linear”)

aero3_data=data_c[,5]
aero3_gps=approx(t_data,aero3_data,t_GPS,method=”linear”)

####>>>>> añado los nuevos datos a la matriz GPS
GPS=cbind(GPS,t_GPS)
GPS=cbind(GPS,Hu_gps$y)
GPS=cbind(GPS,Temp_gps$y)
GPS=cbind(GPS,aero1_gps$y)
GPS=cbind(GPS,aero2_gps$y)
GPS=cbind(GPS,aero3_gps$y)

#####>>> calculo los datos del tiempo separado en H, min, seg
#####>>> y la fecha en dia mes año
#####>>> para añadirlo a la matriz GPS
############################################################
Hora=as.character(GPS[,4])
d=nchar(Hora[1])
seg=as.numeric(substring(Hora,d-3,d-2))
min=as.numeric(substring(Hora,d-5,d-4))
H=GPS[,4]%/%1000000

Fecha=as.character(GPS[,3])
d=nchar(Fecha[1])
dia=GPS[,3]%/%10000
mes=as.numeric(substring(Fecha,d-3,d-2))
year=as.numeric(substring(Fecha,d-1,d))

# añadimos columna a columna a la matriz de datos
###########################################
GPS=cbind(GPS,dia)
GPS=cbind(GPS,mes)
GPS=cbind(GPS,year)

GPS=cbind(GPS,H)
GPS=cbind(GPS,min)
GPS=cbind(GPS,seg)

###>>>>> Escribo los datos en un fichero final
###################################################
write.table(GPS,”C:\\uso_R\\pms\\data_final.txt”)

Tras este procesado obtengo un fichero único ( data_final.txt ) que se puede abrir con Excel tras modificar los puntos por comas y donde las medidas de temperatura, humedad y de las diferentes concentraciones están interpoladas en los momentos en que el GPS ha tomado datos. El aspecto de este fichero Excel se presenta en la figura adjunta (figura 2).

Figura 2. Aspecto de la hoja Excel con los datos finales de las observaciones.

Ya con esta hoja Excel podremos visualizar las medidas y su evolución a lo largo del recorrido (figura 3). Recorrido que en nuestro caso ha generado cerca de 450 valores durante casi una hora de observación alrededor del parque.


Figura 3. Datos de las concentraciones de aerosoles a lo largo del recorrido.

Para poder hacer un análisis espacial de nuestros resultados recurriremos a la librería ggmap de R con la que podremos visualizar los datos sobre un mapa Google.

El programa necesario para llevar a cabo este proceso se presenta a continuación:

# dibujo de los datos medidos por el sistema autonomo aerosoles
##################################################################
library(ggmap)

# se leen los datos
################################
datos=read.table(“C:\\uso_R\\pms\\data_final.txt”)

a=c(1,2,13,14,15)

# se seleccionan los datos a representar y se adecua la forma decimal de la latitud y la longitud
########################################
datos_f=datos[,a]
datos_f[,1]=datos_f[,1]/100000
datos_f[,2]=datos_f[,2]/100000

# se busca el mapa sabiendo previamente que la longitud media y latitud media de las posiciones recorridas
# son -2.662997 y 42.83016
#############################################################################3
map <- get_map(location=c(-2.662997,42.83016), maptype=”satellite”,zoom=15)

# se dibuaja sobre el mapa los colores de intensidad relacionados con las medidas
#######################################################################
mapa_1=ggmap(map)
mapa_4=mapa_1 + geom_point(data=datos_f, aes(x=datos_f$V2,y=datos_f$V1,color=log(datos_f$aero1_gps.y)),size=2.8)+
scale_color_gradientn(colours=rev(heat.colors(5)))

# se plotea el mapa final
################################
mapa_4

El resultado final de este mapeo se presenta en la figura 4 adjunta a continuación. En esta figura tanto el título como la leyenda se han agregado con el programa PAINT aunque ggmap también permite esta opción.

Figura 4. Mapeo de las medidas de concentración de aerosoles a lo largo del recorrido

El mapa nos permite observar como las concentraciones más altas (del orden de 50 µg/m3) se dan en la zona próxima a la calle que bordea al parque. La zona gris representa los casos con valores cero. Este tipo de análisis espacial, si se realiza de manera sistemática, permitiría conocer las zonas más contaminadas de una zona que se someta a estudio.