17.33. Utilizzare gli script R in Processing

Modulo realizzato da Matteo Ghetta - finanziato dalla Scuola Superiore Sant’Anna

Processing (con il plugin Processing R Provider) consente di scrivere ed eseguire script R all’interno di QGIS.

Avvertimento

R deve essere installato sul computer e il PATH deve essere impostato correttamente. Inoltre Processing si limita a chiamare i pacchetti R esterni, non è in grado di installarli. Assicurati quindi di installare i pacchetti esterni direttamente in R. Vedi il relativo chapter nel manuale d’uso.

Nota

Se hai problemi con il package, è possibile che manchino i pacchetti obbligatori richiesti da Processing, come sp, rgdal e raster.

17.33.1. Aggiungere script

Aggiungere uno script è semplice. Il modo più semplice è aprire la casella degli strumenti di Processing e scegliere Create new R script… dal menu R (contrassegnato dall’icona R) nella parte superiore della casella degli strumenti di Processing. Puoi anche creare lo script, ad esempio in un editor di testo, e salvarlo nella cartella degli script R (processing/rscripts). Una volta salvato, sarà disponibile per la modifica facendo clic con il pulsante destro del mouse sul nome dello script nella finestra degli strumenti di elaborazione e scegliendo Edit Script…).

../../../_images/r_intro_1.png

Nota

Se non riesci a vedere R in Processing, devi attivarlo in Impostazioni -> Opzioni -> Sorgenti dati

Apre una finestra dell’editor di script in cui in cui devi specificare alcuni parametri prima di poter aggiungere il corpo dello script.

../../../_images/r_intro_2.png

17.33.2. Realizzare grafici

In questa esercitazione creeremo un boxplot di un campo di un layer vettoriale.

Apri il progetto QGIS r_intro.qgs nella cartella exercise_data/processing/r_intro/.

Parametri dello script

Apri l’editor e comincia a scrivere all’inizio dello stesso.

Devi specificare alcuni parametri prima del corpo dello script:

  1. Il nome del gruppo (plots in questo caso) in cui si vuoi inserire lo script (se il gruppo non esiste, verrà creato):

    ##plots=group
    

    Troverai il tuo script nel gruppo R plots nella casella degli strumenti di Processing.

  2. Devi dire a Processing che vuoi visualizzare un grafico (in questo esempio):

    ##showplots
    

    Troverai quindi un collegamento al grafico nel pannello Visualizzatore risultati (può essere attivato/disattivato in :menuselection: Visualizza –> Pannelli e con :menuselection:Processing –> Visualizzatore risultati`).

  3. Devi inoltre indicare a Processing i dati in ingresso. In questo esempio vogliamo creare un grafico da un campo di un layer vettoriale:

    ##Layer=vector
    

    Processing ora sa che l’input è un vettore. Il nome Layer non è importante, ciò che conta è il parametro vector.

  4. Infine, devi specificare il campo di input del layer vettoriale (usando il nome che hai fornito sopra - Layer):

    ##X=Field Layer
    

    Processing ora sa che ti è necessario un campo di Layer e che lo chiamerai X.

  5. È anche possibile definire il nome dello script utilizzando name:

    ##My box plot script=name
    

    Se non viene definito, il nome del file verrà utilizzato come nome dello script.

Corpo dello script

Ora che hai impostato l”intestazione dello script, puoi aggiungere la funzione:

boxplot(Layer[[X]])

boxplot è il nome della funzione R, il parametro Layer è il nome definito per il set di dati di input e X è il nome definito per il campo di tale set di dati.

Avvertimento

Il parametro X deve essere racchiuso tra doppie parentesi quadre ([[]]).

Lo script finale si presenta così:

##Vector processing=group
##showplots
##Layer=vector
##X=Field Layer
boxplot(Layer[[X]])
../../../_images/r_intro_3.png

Salva lo script nel percorso predefinito suggerito da Processing (processing/rscripts). Se non hai definito un ``name”” nell’intestazione dello script, il nome del file scelto diventerà il nome dello script nella casella degli strumenti di Processing.

Nota

Puoi salvare lo script dove vuoi, ma Processing non sarà in grado di includerlo automaticamente nella casella degli strumenti di elaborazione, quindi dovrai caricarlo manualmente.

Ora è sufficiente eseguirlo utilizzando il pulsante in alto nella finestra dell’editor:

../../../_images/r_intro_4.png

Una volta chiusa la finestra dell’editor, utilizza la casella di testo di Processing per trovare il tuo script:

../../../_images/r_intro_5.png

Ora puoi inserire i parametri richiesti nella finestra dell’algoritmo di elaborazione:

  • per Layer scegli sample_points

  • per il campo X scgli value

Clicca su Esegui.

../../../_images/r_intro_6.png

La finestra Risultati dovrebbe aprirsi automaticamente; in caso contrario, fai clic su Processing ► Visualizzatore Risultati….

Fai clic sul link nel visualizzatore e si vedrà:

../../../_images/r_intro_7.png

Nota

Puoi aprire, copiare e salvare l’immagine facendo clic con il tasto destro del mouse sul grafico.

17.33.3. Creare un vettore

Puoi anche creare un layer vettoriale e caricarlo automaticamente in QGIS.

L’esempio seguente è stato tratto dallo script ``Random sampling grid”” che si trova nella raccolta online di script R (gli script di questa raccolta online si trovano in https://github.com/qgis/QGIS-Processing/tree/master/rscripts).

Lo scopo di questo esercizio è creare un layer vettoriale di punti casuali usando un layer vettoriale di input per limitare l’estensione usando la funzione spsample del package sp.

Parametri dello script

Come in precedenza, dobbiamo impostare alcuni parametri prima del corpo dello script:

  1. Specificare il nome del gruppo in cui si desidera inserire lo script, in questo caso Point pattern analysis:

    ##Point pattern analysis=group
    
  2. Definire un parametro in ingresso (un layer vettoriale) che vincoli il posizionamento dei punti casuali:

    ##Layer=vector
    
  3. Impostare un parametro di input per il numero di punti che verranno creati (Size, con un valore predefinito di 10):

    ##Size=number 10
    

    Nota

    Poiché è definito un valore predefinito (10), l’utente può modificare questo numero o lasciare il parametro senza un numero.

  4. Specificare che esiste un layer vettoriale di uscita (chiamato Output):

    ##Output=output vector
    

Corpo dello script

Ora puoi aggiungere il corpo della funzione:

  1. Utilizza la funzione spsample:

    pts=spsample(Layer, Size, type="random")
    

    La funzione utilizza il Layer per vincolare il posizionamento dei punti (se si tratta di un layer di linee, un punto dovrà trovarsi su una delle linee del layer, se si tratta di un layer di poligoni, un punto dovrà trovarsi all’interno di un poligono). Il numero di punti viene preso dal parametro Size. Il metodo di campionamento è random.

  2. Genera il risultato (il parametro Output):

    Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
    

Lo script finale si presenta così:

##Point pattern analysis=group
##Layer=vector
##Size=number 10
##Output=output vector
pts=spsample(Layer, Size, type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
../../../_images/r_intro_8.png

Salvalo ed eseguilo, facendo clic sul pulsante di esecuzione.

Nella nuova finestra digita i parametri corretti:

../../../_images/r_intro_9.png

e fai clic su Esegui.

Il layer risultante verrà aggiunto all’indice e i suoi punti verranno visualizzati sulla area di disegno della mappa:

../../../_images/r_intro_10.png

17.33.4. Risultato testo e grafo da R - sintassi

Processing (con il plugin Processing R Provider) utilizza una sintassi speciale per ottenere i risultati da R:

  • > prima del comando, come in >lillie.test(Layer[[Field]]) significa che il risultato deve essere inviato all’output di R ( Visualizzatore Rrisultati)

  • + dopo un grafico abilita la sovrapposizione dei grafici. Ad esempio plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]])).