Conseils & Astuces ArcGIS Online - N°203
N°203 - Expressions de données ArcGIS Dashboards - Calculer des
statistiques sur les données
Dans ce précédent article, je vous présentais la notion très puissante d'expression de données
dans ArcGIS Dashboards ainsi que l'interface permettant de les créer.
Dans cet article, je vous propose plusieurs exemples d'expressions de
données permettant de calculer dynamiquement des statistiques sur les
données avant de les utiliser dans votre tableau de bord.
Exemple 1:
Je dispose d'une table contenant pour chaque pays européen la
production agricole en milliard d'euros. Je souhaite tout simplement
afficher dans une liste le pourcentage que représente cette production
pour chaque pays par rapport au total. Pour cela une expression Arcade
va nous permettre de calculer ce pourcentage.
// Récupération du portail ArcGIS, ici ArcGIS Online
var myportal = Portal('https://www.arcgis.com');
// Récupération de la couche d'entités d'origine
var fs = FeatureSetByPortalItem(
myportal,
'2a359efa6e014709bd13476f2f862d9f',
0,
['*'],
false
);
// On calcule la somme des valeurs du champ "Production_agricole_milliards_e"
var Production_agricole_totale = Sum(fs, "Production_agricole_milliards_e");
// Création du tableau pour les nouvelles entités
var new_features = []
for (var f in fs) {
var feat = {
attributes: {
"Pays": f["Pays"],
// On calcule le % de la prod agricole du pays par rapport au total
"Pourcentage_Production": 100*f["Production_agricole_milliards_e"]/Production_agricole_totale
}
};
Push(new_features,feat);
}
// Création du nouveau FeatureSet
var new_featureset = {
fields: [
// Schéma de la table
{ name: "Pays", type: "esriFieldTypeString" },
{ name: "Pourcentage_Production", type: "esriFieldTypeDouble" }
],
// Ici nous créons une table (sans géométrie)
geometryType: "",
features : new_features
};
// On renvoie le nouveau jeu de onnées après l'avoir trié sur le champ
// "Pourcentage_Production"
return OrderBy(FeatureSet(new_featureset), 'Pourcentage_Production DESC');
Le jeu de données généré est alors le suivant :
Remarque : Si vous souhaitiez utiliser utiliser un diagramme en
secteurs, le calcul du pourcentage aurait été réalisé
automatiquement sans avoir à construire un jeu de donnée à l'aide
d'une expression Arcade.
Exemple 2:
Nous disposons maintenant d'une couche de stations météo qui
possèdent les dernières valeurs de température et de pression
mesurées par les capteurs de chaque station. Chacune d'entre-elle
dispose d'un champ indiquant la commune et nous souhaitons
disposer de statistiques indiquant, par commune, la
température moyenne, l'écart-type entre les différentes valeurs
mesurées ainsi que le nombre de stations disponibles. Grace aux
capacités de statistiques multi-attributs d'Arcade, nous allons
pouvoir construire l'expression de données adéquate.
// Récupération du portail ArcGIS, ici ArcGIS Online
var portal = Portal('https://www.arcgis.com/');
// Récupération des couches d'entités
var fs = FeatureSetByPortalItem(
portal,
'e6808c2691d143c9a10426d7e358cf04',
0,
[
'Ville',
'Temperature',
'Pression'
],
false
);
// Création du FeatureSet correspndant à l'agrégation par commune
// et calcul des statistiques
var feature_stats = GroupBy(fs, ['Ville'],
[{name: 'Nombre_de_stations', expression: '1', statistic: 'COUNT' },
{name: 'Temperature_moyenne', expression: 'Temperature', statistic: 'AVG' },
{name: 'Temperature_ecart_type', expression: 'Temperature', statistic: 'STDEV' },
{name: 'Pression_moyenne', expression: 'Pression', statistic: 'AVG' }]);
// On renvoie le jeu de données en retirant les valeurs de ville et de
// températures moyennes non vide
return Filter(feature_stats,"(Ville NOT LIKE '') and (Temperature_moyenne IS NOT NULL)")
Le jeu de données généré est alors le suivant :
Exemple 3:
Je dispose maintenant d'une table contenant les demandes de permis de végétaliser à Paris. Pour chaque demande nous disposons notamment de l'arrondissement et du type de demande (Jardinières mobiles, Pieds d'arbres, mur.
Cliquez sur l'image pour l'agrandir |
L'expression de données suivante pourra alors être utilisée :
// Récupération du portail ArcGIS, ici ArcGIS Online
var myportal = Portal('https://www.arcgis.com/');
// Récupération des couches d'entités
var fs = FeatureSetByPortalItem(
myportal,
'1a729ebfbee741eea41ba35f89843ef9',
0,
['*'],
false
);
// Regroupement des demandes par arrondissement et par type de permis
var grouped = GroupBy(fs,
["rv_arrdt", "rv_type"],
[{name: "Nb_Demandes", expression: "1", statistic: "COUNT"}]
);
// Création d’un dictionnaire pour stocker le Nb_demandes max par arrondissement
var result = {};
for (var g in grouped) {
var arr = Text(g["rv_arrdt"]);
var type = g["rv_type"];
var Nb_Demandes = g["Nb_Demandes"];
// Si on change d'arrondissement ou si le nombre de demandes est supérieure
// à la valeur précédente, alors on ajoute le triplé de arr;type;Nb_Demandes
// dans le dictionnaire des résultats
if (!HasKey(result, arr) || result[arr].Nb_Demandes < Nb_Demandes) {
result[arr] = {
"Arrondissement": arr,
"Type_Permis": type,
"Nb_Demandes": Nb_Demandes
};
}
}
// Construction du FeatureSet final
var features = [];
for (var key in result) {
Push(features, {
attributes: result[key]
});
}
var fs_final = FeatureSet({
fields: [
{ name: "Arrondissement", type: "esriFieldTypeString" },
{ name: "Type_Permis", type: "esriFieldTypeString" },
{ name: "Nb_Demandes", type: "esriFieldTypeInteger" }
],
geometryType: "",
features: features
});
// On renvoie le featureset final
return fs_final
Le jeu de données généré est alors le suivant :
A travers ces 3 exemples, vous avez pu découvrir comment utiliser
des expressions de données avec Arcade pour calculer des statistiques sur un ou plusieurs champ(s). Il ne
vous reste plus qu'à l'appliquer à vos propres cas d'usage.
Bonne route sur ArcGIS Online !
Pour retrouver l'ensemble des Conseils & Astuces ArcGIS Online,
cliquez sur ce lien.