Un bug majeur dans les statistiques ArcGIS Zonal?


25

Mise à jour: le bogue a été corrigé dans la version d'ArcGIS 10.4

J'utilise ArcGIS 10.2.2 pour déterminer les statistiques zonales pour un certain nombre de zones. S'il y a des NoData dans le raster de valeurs, je veux que les résultats de la zone soient "NoData", exactement comme annoncé par la description des outils. Cette description de l'outil indique:

DONNÉES - Dans une zone particulière, seules les cellules qui ont une valeur dans le raster de valeur d'entrée seront utilisées pour déterminer la valeur de sortie pour cette zone. Les cellules NoData du raster Value seront ignorées dans le calcul des statistiques.

NODATA - Dans une zone particulière, s'il existe des cellules NoData dans le raster de valeur, il est considéré qu'il n'y a pas suffisamment d'informations pour effectuer des calculs statistiques pour toutes les cellules de cette zone; par conséquent, la zone entière recevra la valeur NoData sur le raster en sortie.

Veuillez jeter un œil à ma configuration sur cette image: entrez la description de l'image ici

J'utilise l'option NODATA avec un raster de valeurs qui a un pixel NoData, et je m'attends donc à ce que la valeur de zone résultante (zone 61154) soit «NoData». Au lieu de cela, j'obtiens une valeur de 12,74 (arrondie à 13 dans l'image), ce qui me confond à deux niveaux: Premièrement, je m'attendais à 'NoData', et deuxièmement, la valeur résultante de 12,74 est mathématiquement impossible, car la moyenne ne peut pas être plus grande que la valeur maximale dans le raster de valeurs, qui est de 10 dans ce cas.

Si j'utilise l'option DATA, j'obtiens une valeur d'environ 9,1, ce qui est logique. Nous l'avons testé sur différents ensembles de données, ordinateurs et versions d'ArcGIS.

Qu'est-ce que j'oublie ici?

Edit / Commentaire supplémentaire: Je viens de remarquer que l'attribut 'Count' est également incorrect pour cette zone particulière. Il y a en effet 421 cellules dans cette zone, mais l'outil n'a compté que 297. Calculer 421 moins 297 donne 124 - curieusement, c'est la "position" où se trouve le pixel NoData, si l'on compte les pixels du coin supérieur gauche au coin inférieur juste dans la zone. L'outil peut obtenir un nombre de cellules erroné (trop bas), ce qui pourrait expliquer l'augmentation de la moyenne.

Modifier: Voici un lien vers les données que j'utilise.

Edit: Dan Patterson et moi avons fait un débogage supplémentaire ici au forum ESRI.


1
Oui, cela produit quelque chose de fou. Dans mon cas MEAN = 537 pour raster dans la plage (16,86). Pas drôle
FelixIP

Quelle valeur est utilisée pour représenter NoData dans ce raster?
Jezibelle

@Jezibelle: Bonne question, où puis-je trouver une réponse fiable? Si j'exporte sous Ascii, c'est -9999. Si j'utilise la fonction d'exportation dans le menu contextuel, le champ "NoData as:" - du dialogue d'exportation est prérempli avec 2147483647. Est-ce que cela déclenche un indicateur?
G-wizard

Il apparaîtrait comme une ligne dans la table des attributs
Jezibelle

1
J'ai fait un autre montage à la fin de mon article, où je renvoie à un article similaire sur le forum ESRI. Erreur confirmée (avec une torsion). Le calcul de "MEAN" ne produit que des résultats différents / pires que le calcul des statistiques de "ALL".
G-wizard

Réponses:


9

Il y a un bogue qui semble correspondre à ce que vous rencontrez - il est enregistré sous le nom BUG-000084883 - L'option 'Ignorer NoData dans les calculs' dans l'outil Statistiques zonales en tant qu'outil de table {et l'outil Statistiques zonales} n'est pas respectée lorsqu'elle est cochée, ce qui produit résultats incorrects.

Cela se produit avec 10.3 et 10.2.2 mais pas 10.1. Avez-vous essayé l'outil avec cette version?


Cela semble être une bonne approche bien que je ne sache personnellement pas comment exécuter les anciennes versions de l'outil. Est-ce que quelqu'un sait où me diriger pour tenter ce travail?
UdderlyAstray

Merci @GISGe. Où as tu trouvé ça? Existe-t-il un lien où ce bug est documenté?
G-wizard

1
@ G-wizard - J'ai ajouté le lien dans ma réponse. En tant que membre du personnel international d'Esri, j'ai accès à une description plus détaillée que ce que vous pouvez voir, c'est ainsi que je peux vous dire que le bogue s'applique également à l'outil Statistiques zonales et ne se trouve pas dans 10.1.
GISGe

@UdderlyAstray - si vous souhaitez exécuter une ancienne version de l'outil, vous devez installer cette ancienne version d'ArcGIS.
GISGe

1
Merci encore, @GISGe, puisque c'est ce que je recherche (bug officiellement confirmé), je marque cette réponse comme étant la bonne, bien que d'autres l'aient également confirmée en faisant des tests.
G-wizard

9

C'est un bug. Quelque chose de terrible avec le nombre de cellules.

La moyenne correcte (9,0452380952381) fois le nombre correct de cellules non vides (420) divisé par 297 (c'est-à-dire le nombre de cellules rapporté par l' outil ) donne 12,7912457912458. C'est une mauvaise moyenne rapportée par l'outil.

Résultats de mon propre test de grilles de taille de jouet:

entrez la description de l'image ici


1
Je confirme que j'ai le même problème avec 10.3, NODATA et "MEAN"
radouxju

Merci à vous deux d'avoir confirmé cela. Mais mis à part les différences de valeur moyenne, ai-je tort de supposer que le résultat ne devrait en fait être aucune valeur, mais «NODATA»? La description de l'outil me porte à croire cela. Dit: "NODATA - Dans une zone particulière, si des cellules NoData existent dans le raster de valeur, il est considéré que les informations sont insuffisantes pour effectuer des calculs statistiques pour toutes les cellules de cette zone. Par conséquent, la zone entière recevra la valeur NoData sur le raster en sortie. " Puisqu'il y a un pixel avec "NODATA", les statistiques zonales devraient également être "NODATA '. Correct?
G-wizard

2
@ G-wizard, vous avez raison, comme indiqué dans la description de l'outil. quelque peu analogue au # DIV / 0! en excel.
c0ba1t

1

Semblable à une autre réponse , déplacez les données raster dans des tableaux masqués NumPy pour calculer vos statistiques. En supposant deux rasters superposés de même forme, c'est simple:

import numpy as np
zones = arcpy.RasterToNumPyArray("zones")
value = np.ma.masked_equal(arcpy.RasterToNumPyArray("value"),
                           arcpy.Raster("value").noDataValue)
print("Zone\tCount\tNoData\tMean")
for z in np.unique(zones):
    sel = (zones == z)
    print z, sel.sum(), value.mask[sel].sum(), value[sel].mean()

Spectacles:

Zone    Count   NoData  Mean
61131   53   0   8.92452830189
61154   421   1   9.04523809524
61207   1   0   8.0
61317   35   0   7.2
61644   644   0   7.90838509317
61677   12   0   7.41666666667
61789   7   0   9.0
61871   193   0   7.98445595855
187472   349   0   8.5787965616
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.