Bug utama dalam statistik ArcGIS Zonal?

25

Pembaruan: Bug telah diperbaiki dalam rilis ArcGIS 10.4

Saya menggunakan ArcGIS 10.2.2 untuk menentukan statistik zona untuk sejumlah zona. Jika ada NoData di raster nilai, saya ingin hasil zona menjadi "NoData", persis seperti yang diiklankan oleh deskripsi alat. Deskripsi alat ini menyatakan:

DATA - Di dalam zona tertentu, hanya sel yang memiliki nilai dalam raster Nilai input yang akan digunakan dalam menentukan nilai output untuk zona itu. Sel-sel NoData dalam raster Nilai akan diabaikan dalam perhitungan statistik.

NODATA - Di dalam zona tertentu, jika ada sel NoData di raster Value, dianggap tidak ada informasi yang cukup untuk melakukan perhitungan statistik untuk semua sel di zona itu; oleh karena itu, seluruh zona akan menerima nilai NoData pada raster keluaran.

Silakan lihat pengaturan saya di gambar ini: masukkan deskripsi gambar di sini

Saya menggunakan opsi NODATA dengan nilai raster yang memiliki satu piksel NoData, dan karenanya mengharapkan nilai zona yang dihasilkan (zona 61154) menjadi 'NoData'. Sebagai gantinya, saya mendapatkan nilai 12,74 (dibulatkan menjadi 13 dalam gambar), yang membingungkan saya pada dua level: Pertama, saya mengharapkan 'NoData', dan kedua, nilai yang dihasilkan dari 12,74 secara matematis tidak mungkin, karena rata-rata tidak bisa lebih besar dari nilai maksimum dalam nilai raster, yaitu 10 dalam hal ini.

Jika saya menggunakan opsi DATA, saya mendapatkan nilai sekitar 9,1, yang masuk akal. Kami menguji ini pada berbagai dataset, komputer, dan versi ArcGIS.

Apa yang kulewatkan di sini?

Edit / Komentar tambahan: Saya baru saja memperhatikan bahwa atribut 'Count' juga salah untuk zona tertentu. Memang ada 421 sel di zona itu, tetapi alat ini hanya menghitung 297. Menghitung 421 dikurangi 297 menghasilkan 124 - anehnya, ini adalah "posisi" di mana piksel NoData berada, jika seseorang menghitung piksel dari kiri atas ke bawah tepat di zona tersebut. Alat ini mungkin salah menghitung jumlah sel (terlalu rendah), yang mungkin menjelaskan kenaikan rata-rata.

Sunting: Berikut ini tautan ke data yang saya gunakan.

Sunting: Dan Patterson dan saya melakukan debugging lebih lanjut di sini di forum ESRI.

G-wizard
sumber
1
Ya itu memang menghasilkan sesuatu yang gila. Dalam kasus saya MEAN = 537 untuk raster dalam kisaran (16,86). Tidak lucu
FelixIP
Nilai apa yang digunakan untuk mewakili NoData di raster ini?
Jezibelle
@Jezibelle: Pertanyaan bagus, di mana saya bisa menemukan jawaban yang bisa diandalkan? Jika saya ekspor sebagai Ascii, itu -9999. Jika saya menggunakan fungsi ekspor dari menu konteks, "NoData as:" - bidang dialog ekspor akan diisi sebelumnya dengan 2147483647. Apakah itu menimbulkan bendera?
G-wizard
Itu akan muncul sebagai baris dalam tabel atribut
Jezibelle
1
Saya melakukan pengeditan lain di akhir posting saya, di mana saya menautkan ke posting serupa di ESRI. Kesalahan dikonfirmasi (dengan twist). Menghitung "MEAN" hanya menghasilkan hasil yang berbeda / lebih buruk daripada menghitung statistik "SEMUA".
G-wizard

Jawaban:

9

Ada bug yang tampaknya sesuai dengan apa yang Anda alami - itu terdaftar sebagai BUG-000084883 - Opsi 'Abaikan NoData dalam perhitungan' dalam Statistik Zonal sebagai alat Tabel {dan perangkat Statistik Zonal} tidak dihormati ketika dicentang, menghasilkan hasil yang salah.

Ini terjadi dengan 10.3 dan 10.2.2 tetapi tidak 10.1. Apakah Anda mencoba alat dengan versi ini?

GISGe
sumber
Ini kedengarannya seperti pendekatan yang baik walaupun saya pribadi tidak tahu cara menjalankan versi alat yang lebih lama. Apakah ada yang tahu ke mana harus mengarahkan saya untuk mencoba ini?
UdderlyAstray
Terima kasih @GISGe. Di mana Anda menemukan ini? Apakah ada tautan tempat bug ini didokumentasikan?
G-wizard
1
@ G-wizard - Saya telah menambahkan tautan dalam jawaban saya. Sebagai staf internasional Esri, saya memiliki akses ke deskripsi yang lebih rinci daripada yang dapat Anda lihat, itulah cara saya dapat memberitahu Anda bahwa bug juga berlaku untuk alat Statistik Zonal dan tidak ditemukan pada 10.1.
GISGe
@UdderlyAstray - jika Anda ingin menjalankan versi alat yang lebih lama, Anda harus menginstal versi ArcGIS yang lebih lama.
GISGe
1
Terima kasih lagi, @ GISGe, karena ini yang saya cari (bug dikonfirmasi secara resmi), saya menandai jawaban ini sebagai jawaban yang benar, walaupun yang lain juga mengonfirmasi ini dengan melakukan tes.
G-penyihir
9

Itu adalah bug. Sesuatu yang sangat salah dengan jumlah sel.

Benar mean (9,0452380952381) kali yang benar jumlah sel non-kosong (420) dibagi dengan 297 (yang merupakan jumlah sel yang dilaporkan oleh alat ) hasil di 12,7912457912458. Itu adalah rata-rata yang salah yang dilaporkan oleh alat.

Hasil tes ukuran kotak mainan saya sendiri:

masukkan deskripsi gambar di sini

FelixIP
sumber
1
Saya mengkonfirmasi bahwa saya memiliki masalah yang sama dengan 10.3, NODATA, dan "MEAN"
radouxju
Terima kasih keduanya telah mengkonfirmasi ini. Tetapi perbedaan di samping nilai rata-rata, apakah saya salah dengan menganggap bahwa hasilnya seharusnya tidak menjadi nilai, tetapi 'NODATA'? Deskripsi alat ini membuat saya percaya itu. Says: "NODATA - Di dalam zona tertentu, jika ada sel NoData di raster Value, dianggap bahwa tidak ada informasi yang cukup untuk melakukan perhitungan statistik untuk semua sel di zona itu; oleh karena itu, seluruh zona akan menerima nilai NoData pada raster keluaran. " Karena ada satu piksel dengan "NODATA", statistik zona juga harus "NODATA '. Benar?
G-wizard
2
@ G-wizard, Anda benar, sebagaimana dinyatakan dalam Uraian Alat. agak analog dengan # DIV / 0! di excel.
c0ba1t
1

Mirip dengan jawaban lain , pindahkan data raster ke array bertopik NumPy untuk menghitung statistik Anda. Dengan asumsi dua raster overlay dengan bentuk yang sama, ini sederhana:

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

Menunjukkan:

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
Mike T
sumber