Module contributed by Matteo Ghetta - funded by Scuola Superiore Sant’Anna
Ecrire des scripts R dans Traitement peut être un peu difficile du fait de la syntaxe à adopter.
Chaque script commence avec Input et Output précédé de ##.
Avant d’indiquer les entrées, vous pouvez également indiquer le group d’algorithme dans lequel votre script sera intégré. Si le groupe existe déjà, l’algorithme y sera ajouté sinon un nouveau groupe sera automatiquement créé:
création de groupe, ##Mon groupe=group
Vous devez ensuite indiquer toutes les entrées ainsi que les paramètres supplémentaires. Vous pouvez avoir différents types d’entrées:
vector, ##Couche = vector
Champ de la couche, ##F = Field Couche` (où Couche est le nom de la couche en entrée)
chaîne de caractères, ##Str = string
booléen, ##Bol = boolean
Vous pouvez aussi faire apparaître un menu déroulant avec tous les paramètres que vous désirez; ils doivent être séparés par des point-virgules ;:
Comme pour les entrées, chaque sortie doit être définie au début du script:
vecteur, ##sortie= output vector
raster, ##sortie= output raster
table, ##sortie= output table
graphiques, ##showplot
R émet une sortie dans le Visualisateur de résultats, il faut juste indiquer ``>` dans le script avant la sortie que vous souhaitez afficher.
Le corps du script suit le style de syntaxe de R et le panneau Journal peut vous aider à vérifier ce qui s’est mal déroulé avec votre script.
Attention à bien charger toutes les bibliothèques additionnelles dans le script:
library(sp)
Prenons un algorithme de la collection de scripts en ligne qui créé des points aléatoires depuis l’emprise d’une couche en entrée:
##Point pattern analysis=group
##Layer=vector
##Size=number 10
##Output= output vector
library(sp)
pts=spsample(Layer,Size,type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
et analysons chacune des lignes:
Point pattern analysis est le groupe de l’algorithme.
Layer est la couche vecteur en entrée.
Size est le paramètres numérique avec une valeur par défaut de 10.
Output est la couche vecteur qui sera créée par l’algorithme.
library(sp) charge la bibliothèque sp (qui devrait être déjà installée sur votre machine et dont l’installation doit être réalisée dans R).
Appelle la fonction spsample de la bibliothèque sp et l’utilise avec les entrées définies au-dessus.
créé la couche vecteur de sortie avec la fonction SpatialPointsDataFrame.
C’est tout ! Lancez l’algorithme avec une couche vecteur ouverte dans QGIS, choisissez un nombre de points aléatoires et vous les récupérerez dans le canevas de carte.
Le script suivant effectuera un krigeage simple ordinaire et créera une couche raster des valeurs interpolées:
##Basic statistics=group
##Layer=vector
##Field=Field Layer
##Output=output raster
require("automap")
require("sp")
require("raster")
table=as.data.frame(Layer)
coordinates(table)= ~coords.x1+coords.x2
c = Layer[[Field]]
kriging_result = autoKrige(c~1, table)
prediction = raster(kriging_result$krige_output)
Output<-prediction
L’algorithme utilisera la fonction autoKrige du paquet R automap, à partir d’une couche vecteur en entrée et d’un de ses champs et calculera d’abord le modèle de krigeage puis créera le raster.
Le raster est créé avec la fonction raster du paquetage raster R.
Éditons l’algorithme Summary Statistics de manière à ce que la sortie soit un fichier de table (csv).
Le corps du script est le suivant:
##Basic statistics=group
##Layer=vector
##Field=Field Layer
##Stat=Output table
Summary_statistics<-data.frame(rbind(
sum(Layer[[Field]]),
length(Layer[[Field]]),
length(unique(Layer[[Field]])),
min(Layer[[Field]]),
max(Layer[[Field]]),
max(Layer[[Field]])-min(Layer[[Field]]),
mean(Layer[[Field]]),
median(Layer[[Field]]),
sd(Layer[[Field]])),row.names=c("Sum:","Count:","Unique values:","Minimum value:","Maximum value:","Range:","Mean value:","Median value:","Standard deviation:"))
colnames(Summary_statistics)<-c(Field)
Stat<-Summary_statistics
La troisième ligne indique le Champ vecteur et la quatrième ligne indique à l’algorithme que la sortie doit être une table.
La dernière ligne utilisera l’objet Stat créé dans le script et le convertira en une table csv.
Nous pouvons prendre l’exemple précédent et au lieu de créer un tableau, afficher le résultat dans l’Afficheur de Résultat:
##Basic statistics=group
##Layer=vector
##Field=Field Layer
Summary_statistics<-data.frame(rbind(
sum(Layer[[Field]]),
length(Layer[[Field]]),
length(unique(Layer[[Field]])),
min(Layer[[Field]]),
max(Layer[[Field]]),
max(Layer[[Field]])-min(Layer[[Field]]),
mean(Layer[[Field]]),
median(Layer[[Field]]),
sd(Layer[[Field]])),row.names=c("Sum:","Count:","Unique values:","Minimum value:","Maximum value:","Range:","Mean value:","Median value:","Standard deviation:"))
colnames(Summary_statistics)<-c(Field)
>Summary_statistics
Le script est identique à celui situé ci-dessus mais avec 2 modifications:
Il n’y a plus de sortie indiquée (la quatrième ligne a été supprimée).
La dernière ligne commence avec le caractère > qui indique à Processing d’afficher l’objet dans le visualisateur de résultats.
Créer des graphiques est très simple. Vous devez juste utiliser le paramètre ##showplots comme indiqué dans le script qui suit:
##Basic statistics=group
##Layer=vector
##Field=Field Layer
##showplots
qqnorm(Layer[[Field]])
qqline(Layer[[Field]])
Le script prend un champ de la couche vecteur en entrée et créé un diagramme Quantile-Quantile pour tester la normalité d’une distribution.
La graphique est automatiquement ajouté au Visualisateur de Résultats de Processing.