Le blog francophone consacré
aux technologies Esri

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.            

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 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 :


Vous pouvez par exemple le représenter dans votre tableau de bord à l'aide d'une liste :


Vous pouvez aussi le représenter dans votre tableau de bord à l'aide d'un diagramme en série :


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.



L'expression de données suivante pourra alors être utilisée :

// 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 :


Vous pouvez maintenant le représenter dans votre tableau de bord à l'aide d'une liste :


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 :


Il peut alors être utilisé dans un tableau de bord pour créer ce diagramme en série :



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.

Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article: