Log reader e configurazione timestamp
Questo script analizza il Log ASCII registrato da sensori di GAS (mics 6814) a bordo della sensorboard Enviro+ durante il test PRT_SALVOGAS1
il log viene importato rapidamente in un data frame tramite la funzione
read.csv2, però c'è una cosa un po' ambigua. le colonne del data frame sono caratteri e non numeri anche se la funzione plot tratta i dati come numeri ma se provo a fare qualche operazione sui dati devo per forza usare la funzione
as.numeric. Forse ciò è causato dal fatto che nel file ascii c'è qualche riga scritta male.
In prima battuta bisogna leggere correttamente il timestamp contenuto nel log.
Ho incontrato diverse Funzioni utili alla lettura e formattazione corretta delle date:
la funzione
as.POSIXlt(as.numeric(Envlog$time[1]), origin="1970-01-01")
l'ho usata per convertire il numero del timestamp rappresentato dal Envlog$time[1]) (numero progressivo in secondi dal 1 gen 1970) in una data con formato standard per R:
[1] "2021-03-04 09:54:29 CET"
POSIX è l'interprete della data e può avere diverse declinazioni come POSIXlt, POSIXct. La differenza tra i due è sottile ma, volendo essere pragmatici l'output che generano localmente è sempre lo stesso.
inoltre ho conosciuto i comandi strptime e strftime:
strptime permette di leggere correttamente qualsiasi formato data affinchè sia trattato come un oggetto POSIXlt, basta specificare come è fatto il formato. ad esempio se ho una data scritta come "02/06/2021 9:35" per far si che sia considerata una data scriverò
data <- strptime("02/06/2021 9:35", format = "%d/%m/%Y %H:%M")
infatti:
strftime invece fa il contrario cioè permette di esportare la data in qualsiasi formato serva. Io, in questo script, l'ho usato per memorizzare il giorno senza l'ora:
giorno <- strftime(startime, format="%Y-%m-%d")
in modo poi da unirlo a degli orari contenuti nel vettore "prt" per poi poter inserire nei Grafici dei sensori delle linee verticali negli orari registrati nel vettore "prt" con il comando:
abline(v=as.numeric(strptime(paste(giorno, prt), format="%Y-%m-%d %H:%M")))
In figura un Esempio:
osservate che bisogna utilizzare sempre la funzione as.numeric affinchè la variabile sia letta correttamente.
Per il grafico a doppio asse visualizzato nella precedente figura si utilizzano i seguenti comandi:
par(mar=c(5, 4, 4, 8))
serve a dare più spazio a dx del grafico per poi inserire il titolo dell'asse;
par(new = T)
permette di aggiungere un Layer dove inserire il secondo plot;
il secondo plot deve avere i seguenti parametri: xlab=NA, ylab = NA, axes = F
e poi bisogna aggiungere l'asse e il titolo:
axis(side = 4, col.axis = "red", col= "red")
mtext("diff", side=4, line=3, cex.lab=1,las=2, col="red")
ci dovrebbe essere un modo per fare l'allineamento verticale del titolo a destra ma per ora non lo so.
Nello scripit incontriamo altre due funzioni che vedremo spesso:
loess e predict.
loess che io uso per fare smoothing dei dati è un "Local Polynomial Regression Fitting"
mentre predict prende la funzione trovata da loess e la proietta sull'asse delle x
il seguente link fornisce maggiori chiarimenti:
http://r-statistics.co/Loess-Regression-With-R.html
Infine allego a titolo di esempio:
un file ASCII valido per le elaborazioni e utilizzato in questo blog
varianti di EnviroLog_PRT_SALVOGAS1.R:
EnviroLog_PRT_SALVOGAS2.R che spezza il run nei 5 test che lo compongono
Envirolog_1.R generalizza per un protocollo con qualsiasi numero di step
openQCMreadlog1.R derivato per il Log della openQCM
openQCM_OS1.R derivato dal precedente per il LOG relativo a protocolli OneStep
Commenti
Posta un commento