Основна помилка в статистиці зональних ArcGIS?


25

Оновлення: помилка була виправлена ​​у версії ArcGIS 10.4

Я використовую ArcGIS 10.2.2 для визначення зональної статистики для ряду зон. Якщо в растрі значення є якісь NoData, я хочу, щоб результати зони були "NoData", точно так, як рекламується в описі інструментів. У цьому описі інструменту зазначено:

Дані - У межах будь-якої конкретної зони для визначення вихідного значення для цієї зони будуть використовуватися лише комірки, які мають значення в растрі вхідного значення. Осередки NoData в растрі Значення будуть ігноруватися в статистичному розрахунку.

NODATA - У межах будь-якої конкретної зони, якщо в растрі Значення існують якісь комірки NoData, вважається, що недостатньо інформації для проведення статистичних обчислень для всіх комірок у цій зоні; отже, вся зона отримає значення NoData на вихідному растрі.

Будь ласка, подивіться на моє налаштування на цій фотографії: введіть тут опис зображення

Я використовую параметр NODATA з растром значення, який має один піксель NoData, і тому очікую, що отримане значення зони (зона 61154) буде "NoData". Натомість я отримую значення 12,74 (округлене до 13 на зображенні), що бентежить мене на двох рівнях: По-перше, я очікував "NoData", а по-друге, отримане значення 12,74 математично неможливо, тому що середнє значення не може бути більшим ніж максимальне значення в растровому значенні, яке в цьому випадку становить 10.

Якщо я використовую опцію DATA, я отримую значення приблизно 9,1, що має сенс. Ми протестували це на різних наборах даних, на комп’ютерах та у версіях ArcGIS.

Що я тут пропускаю?

Редагувати / Додатковий коментар: Я щойно помітив, що атрибут 'Count' також неправильний для конкретної зони. У цій зоні дійсно є 421 комірка, але інструмент нараховував лише 297. Обчислення 421 мінус 297 призводить до 124 - як не дивно, це "положення", де знаходиться піксель NoData, якщо рахувати пікселі зліва вліво до нижньої прямо в зоні. У інструменті може бути неправильне число клітинок (занадто низьке), що може пояснити збільшення середнього.

Редагувати: Ось посилання на дані, які я використовую.

Редагувати: Ми з Деном Паттерсоном дещо налагоджували тут на форумі ESRI.


1
Так, це робить щось божевільне. У моєму випадку MEAN = 537 для растра в діапазоні (16,86). Не смішно
FelixIP

Яке значення використовується для представлення NoData в цьому растрі?
Jezibelle

@Jezibelle: Добре запитання, де я можу знайти надійну відповідь? Якщо я експортую як Ascii, це -9999. Якщо я використовую функцію експорту з контекстного меню, поле "NoData як:" - поле діалогу експорту стає перенаселеним 2147483647. Чи піднімає це прапор?
G-wizard

Він відображатиметься як рядок у таблиці атрибутів
Jezibelle

1
Я зробив ще одну редакцію в кінці свого допису, де я посилаюся на аналогічну публікацію на форумі ESRI. Помилка підтверджена (з поворотом). Обчислення "MEAN" дає лише інші / гірші результати, ніж обчислення статистики "ALL".
G-wizard

Відповіді:


9

Існує помилка, яка, здається, відповідає тому, що ви відчуваєте - вона зареєстрована як BUG-000084883 - Параметр "Ігнорувати NoData в обчисленнях" в Zonal Statistics як інструмент "Таблиця {і інструмент Zonal Statistics}" не шанується при звільненні, створюючи неправильні результати.

Це відбувається з 10.3 та 10.2.2, але не з 10.1. Ви спробували інструмент з цією версією?


Це звучить як хороший підхід, хоча я особисто не знаю, як запускати старіші версії інструменту. Хтось знає, куди мені вказати, щоб спробувати цю роботу?
UdderlyAstray

Дякуємо @GISGe. Де ти це знайшов? Чи є посилання, де ця помилка задокументована?
G-wizard

1
@ G-wizard - я додав посилання у своїй відповіді. Як міжнародний персонал Esri, я маю доступ до більш детального опису, ніж те, що ви можете бачити, ось як я можу вам сказати, що помилка також стосується інструменту зональної статистики і не знайдена в 10.1.
GISGe

@UdderlyAstray - якщо ви хочете запустити старішу версію інструменту, вам доведеться встановити цю більш стару версію ArcGIS.
GISGe

1
Ще раз дякую, @GISGe, оскільки це те, що я шукаю (помилка офіційно підтверджена), я позначаю цю відповідь правильною, хоча інші також підтвердили це, роблячи тести.
G-wizard

9

Це клоп. Щось страшенно не так з кількістю клітин.

Правильна середня (9.0452380952381) разів правильна кількість непустих комірок (420), поділена на 297 (тобто кількість комірок, повідомлених інструментом ), призводить до 12.7912457912458. Це неправильне середнє значення, повідомлене інструментом.

Результати мого власного тесту з розміром сітки іграшок:

введіть тут опис зображення


1
Я підтверджую, що у мене така ж проблема з 10.3, NODATA та "MEAN"
radouxju

Дякую обом за підтвердження цього. Але вбік різниці середнього значення, я помиляюся, вважаючи, що результат насправді має бути не будь-яким значенням, а «NODATA»? Опис інструменту змушує мене повірити в це. Каже: "NODATA - в межах будь-якої конкретної зони, якщо в растрі Значення існують будь-які комірки NoData, вважається, що недостатньо інформації для проведення статистичних обчислень для всіх комірок у цій зоні; тому вся зона отримає значення NoData на вихідному растрі. " Оскільки є один піксель з "NODATA", зональна статистика також повинна бути "NODATA". Правильно?
G-wizard

2
@ G-wizard, ви праві, як зазначено в Описі інструмента. дещо аналогічний # DIV / 0! в excel.
c0ba1t

1

Подібно до іншої відповіді , перемістіть растрові дані в маскувані масиви NumPy, щоб обчислити статистику. Якщо припустити дві накладні растри з однаковою формою, це просто:

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()

Показує:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.