knitr::opts_chunk$set(out.height="300px") knitr::opts_chunk$set(out.width="300px") knitr::opts_chunk$set(fig.align = "center") #knitr::opts_chunk$set(fig.height = 6, fig.width=5)
Il seguente script funziona con qchlorophyll versione 1.1 o superiore.
Prima di installare qchlorophyll è necessario installare i seguenti pacchetti:
#install.packages("/home/qchlorophyll_1.1.tar.gz", repos = NULL, type = "source") require(qchlorophyll)
Siccome il procedimento è molto oneroso dal punto di vista della memoria RAM, consiglio di lavorare su un tipo di file per volta e di non lavorare su applicazioni terze mentre R sta elaborando i dati.
Esempio: inizio a lavorare sulla variabile qnet con i dati giornalieri, carico i dati, effettuo l'interpolazione e poi salvo il dataframe ottenuto in formato .csv (o altro). Pulisco la memoria con rm(list=ls()) e procedo con la prossima variabile.
Per una macchina con almeno 8gB di memoria RAM, non è strettamente necessario effettuare quanto richiesto sopra, però il seguire questa procedura "garantisce" che le operazioni vengano portate a termine e che la macchina "non si incanti".
Ulteriore consiglio: quando si aumenta la risoluzione, non fissare una risoluzione troppo elevata (ossia non fissare un parametro step troppo basso).
Di seguito alcune indicazioni sul caricamento dati. L'output delle funzioni di caricamento dati è una lista con un dataframe per ogni anno.
Selezionare la directory contenente i file .nc che si desidera caricare
setwd("/home/mich/Dropbox/cartella_condivisa_linux/quantide/packages_R/qchlorophyll_/dati/nuovo_lavoro/NHF/daily")
Utilizzare la funzione load_nc_with_time senza specificare nessuna data per caricare tutti i file.
path <- getwd() # Estrazione di tutti i dati giornalieri dal 1998 al 2009 dati_giornalieri <- load_nc_with_time(path = path, variables = c("qnet")) # Estrazione dei dati giornalieri dal 2000 al 2009 (inclusi) dati_giornalieri <- load_nc_with_time(path = path, from = 2000, to = 2009, variables = c("qnet"), lower_left_lat_lon = c(52, -65), upper_right_lat_lon = c(67, -42))
Per i dati mensili è necessario specificare la frequenza mensile fissando l'argomento monthly al valore TRUE.
setwd("/home/mich/Dropbox/cartella_condivisa_linux/quantide/packages_R/qchlorophyll_/dati/nuovo_lavoro/NHF/monthly") path <- getwd() # Estrazione di tutti i dati mensili dati_mensili <- load_nc_with_time(path = path, variables = c("qnet"), lower_left_lat_lon = c(52, -65), upper_right_lat_lon = c(67, -42), monthly = TRUE) # Estrazione dei dati mensili dal 2000 al 2009 (inclusi) dati_mensili <- load_nc_with_time(path = path, from = 2000, to = 2009, variables = c("qnet"), lower_left_lat_lon = c(52, -65), upper_right_lat_lon = c(67, -42), monthly = TRUE)
Per i file shtfl.nc (dati con frequenza giornaliera) la data è fornita nel formato "ore trascorse da una data di riferimento". La data di riferimento in questione è 1800-01-01 (formato: yyyy-mm-dd). La data di riferimento va specificata nella funzione load_nc_with_time come segue:
setwd("/home/mich/Dropbox/cartella_condivisa_linux/quantide/packages_R/qchlorophyll_/dati/nuovo_lavoro/NHF/shf") path <- getwd() # Caricamento di tutti i dati giornalieri shtfl dati_giornalieri_shtfl <- load_nc_with_time(path = path, variables = c("shtfl"), lower_left_lat_lon = c(52, -65), upper_right_lat_lon = c(67, -42), date_origin = "1800-01-01") # ATTENZIONE: specificare la date_origin SOLO se è necessario e si è sicuri che il formato della data nel file .nc sia "ore trascorse da una data di riferimento". In caso queste ipotesi non siano verificate, la funzione porterà a termine il suo compito, restituendo dei valori arbitrari di data, mese e anno.
Nota 1: Prestare attenzione alla directory di lavoro. La funzione di caricamento è abbastanza generale da non mostrare errori (oppure mostrare solo avvisi) nel caso in cui si carichino dati con frequenza mensile ma senza specificarlo, oppure non si specifichi la data di riferimento qualora sia necessario. Chiaramente in tali casi l'output non sarà affidabile.
Di seguito l'aumento di risoluzione sui dati caricati.
L'aumento di risoluzione viene effettuato con l'algoritmo inverse distance weighting in modo da garantire che i valori stimati siano entro il massimo e il minimo dei valori effettivi noti.
Il procedimento non dipende dalla frequenza delle osservazioni per cui è identico sia che si tratti di dati mensili che annuali. Si rende però necessario specificare il nome della variabile da interpolare (qnet oppure shtfl negli esempi).
Il dataframe di riferimento deve contenere almeno le variabili longitudine e latitudine (lon e lat). Il parametro step determina il livello di risoluzione. Si assume che longitudine e latitudine siano equispaziate di un valore pari al parametro step. Vedere la variabile grd per un esempio. Consiglio di non fissare step a valori troppo bassi (ossia non fissare una risoluzione troppo elevata). L'interpolazione è effettuata giorno per giorno e nonostante sia relativamente veloce, il procedimento è abbastanza oneroso in termini di tempo proprio per la necessità di lavorare su dati giornalieri ad ogni interpolazione (le interpolazioni effettuate sono 365 per il numero di file caricati). Per i dati mensili i tempi sono notevolmente più corti siccome le interpolazioni da effettuare sono solo 12 per il numero di file caricati.
La funzione interpolate_grid restituisce un dataframe dplyr pronto per essere aggregato o elaborato ulteriormente.
# Interpolation test # Dataframe di riferimento (deve contenere almeno le variabili lon e lat) # lon lat range (x, y) x_range <- as.numeric(c(-65, -42)) y_range <- as.numeric(c(52, 67)) step_ <- 0.25 # Reference dataframe ref_grd <- expand.grid(lon = seq(from = x_range[1], to = x_range[2], by = step_), lat = seq(from = y_range[1], to = y_range[2], by = step_)) # Interpolazione df_interpolato <- interpolate_grid(dati_giornalieri, variable = "qnet", step = 0.25, reference_df = ref_grd)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.