BAB 6: Periksa Dulu Sebelum Dipercaya: Kualitas Data
#Studi kasus: "Angka finalnya berapa?"
Tim pulang membawa 61 titik survei. Kepala Seksi ingin angka final untuk rapat. Sebelum menghitung, Anda memeriksa data. Hasilnya mengejutkan: hanya 44 dari 61 baris yang lolos semua pemeriksaan. Ada kondisi yang kosong, tinggi pohon 250 m, tiga titik yang jatuh di luar petak, dan satu nomor survei yang muncul dua kali.
Menghitung dari data mentah itu sama saja dengan menyajikan angka yang keliru. Bab ini mengajarkan cara memeriksa data yang masuk, seperti petugas gudang yang memeriksa barang datang sebelum dimasukkan ke rak.
#Konsep: kualitas data dalam tiga kalimat
Kualitas data adalah seberapa layak data dipakai untuk tujuannya. Anda memeriksanya dengan aturan yang tegas, seperti daftar periksa barang masuk: ada yang kosong, ada yang di luar rentang, ada yang ganda, ada yang letaknya aneh. Aturan yang ditulis sekali dapat dijalankan setiap kali data baru datang.
Istilah baru bagian ini:
- Kualitas data: kelayakan data untuk tujuannya.
- Kelengkapan: apakah isian yang wajib sudah terisi.
- Keabsahan: apakah nilainya ada di daftar atau rentang yang sah.
- Konsistensi: apakah bagian-bagian data saling cocok, misalnya label petak dan letak titik.
- Keunikan: apakah ada baris ganda.
#Enam pemeriksaan dan temuannya
Tabel berikut memakai Survei_Lapangan.gpkg. Jumlah temuan dihitung oleh skrip I3.6 dan I3.8, dan cocok dengan hasil_diharapkan.json. [terbukti: QGIS 4.0.2]
| Pemeriksaan | Pertanyaan | Aturan | Temuan |
|---|---|---|---|
| Kelengkapan | Apakah kondisi terisi? | Kondisi tidak kosong | 2 baris (SV-031, SV-040) |
| Keabsahan nilai | Apakah ejaan baku? | Kondisi ada di daftar baku | 3 baris (SV-005, SV-012, SV-020) |
| Keabsahan rentang | Apakah tinggi wajar? | Tinggi_Phn antara 0 dan 60 | 2 baris (SV-007, SV-033) |
| Keunikan | Adakah ID atau koordinat kembar? | ID_Survei unik | 1 ID ganda (SV-049, 2 baris); 4 baris berkoordinat kembar |
| Konsistensi | Apakah label petak cocok dengan letak? | Titik berada di petak yang tertulis | 2 baris (SV-010, SV-025) |
| Letak | Apakah titik di dalam batas? | Titik berada di salah satu petak | 3 baris (SV-059, SV-060, SV-061) |
Dua pemeriksaan tambahan memakai batas yang Anda tetapkan sendiri: akurasi GNSS lebih dari 5 m (2 baris: SV-015, SV-044) dan tanggal di luar periode survei 1 sampai 12 September 2026 (1 baris: SV-050).

#Aturan sebagai ekspresi
Setiap aturan di tabel bisa ditulis sebagai ekspresi untuk Select by Expression. Skrip I3.8 menghitung semuanya dan mencocokkan hasilnya.
| Aturan | Ekspresi | Hasil uji |
|---|---|---|
| Kondisi kosong | "Kondisi" IS NULL | 2 |
| Kondisi tidak baku | "Kondisi" IS NOT NULL AND "Kondisi" NOT IN ('Sehat','Terserang Hama','Tebangan Liar') | 3 |
| Tinggi di luar rentang | "Tinggi_Phn" NOT BETWEEN 0 AND 60 | 2 |
| Akurasi buruk | "Akurasi_m" > 5 | 2 |
| Tanggal di luar periode | "Tgl_Survei" NOT BETWEEN to_date('2026-09-01') AND to_date('2026-09-12') | 1 |
| ID ganda | count("ID_Survei", group_by:="ID_Survei") > 1 | 2 baris |
| Di luar semua petak | NOT overlay_within('Batas_KPH') | 3 |
| Label petak tidak cocok | overlay_within('Batas_KPH', "NAMA_KPH")[0] <> "KPH" | 2 |
Dua ekspresi terakhir memakai layer Batas_KPH, jadi layer itu harus ada di proyek dengan nama persis seperti itu.
Anda bisa menggabungkan semuanya menjadi satu kolom virtual Status_Mutu yang berisi nama masalah pertama yang ditemukan, atau OK. Pada data latihan, hasilnya:
| Status_Mutu | Baris |
|---|---|
| OK | 44 |
| Kondisi tidak baku | 3 |
| Di luar semua petak | 3 |
| Tinggi di luar 0-60 | 2 |
| Akurasi lebih dari 5 m | 2 |
| Kondisi kosong | 2 |
| Label KPH tidak sesuai | 2 |
| ID ganda | 2 |
| Tanggal di luar periode | 1 |
Jumlahnya 61. Satu baris hanya diberi satu status, yaitu aturan pertama yang terlanggar.
#Memperbaiki dengan aman
- Jangan menimpa data mentah. Simpan salinan asli. Perbaikan dilakukan pada salinan kerja.
- Perbaiki yang pasti. Ejaan
sehatatauSehatjelas maksudnyaSehat. Setelah perbaikan,Kondisi = 'Sehat'menjangkau 34 baris, bukan 32. - Jangan menebak yang tidak pasti. Tinggi 250 m mungkin salah ketik 25,0, tetapi mungkin juga 2,5. Kembalikan ke surveyor atau tandai.
- Titik di luar petak biasanya perlu ukur ulang atau konfirmasi, bukan digeser tangan.
- Catat perbaikan: apa yang diubah, oleh siapa, kapan, dan alasannya.
- Jalankan lagi seluruh pemeriksaan setelah memperbaiki.
#Bagian A: QGIS
#Bagian A: Memeriksa data di QGIS
- Tambahkan
Titik_SurveidanBatas_KPHdariSurvei_Lapangan.gpkglewat Layer ► Data Source Manager. Jangan ganti nama layer. - Pilih layer
Titik_Survei, lalu buka Select by Expression (Ctrl+F3). Tempel ekspresi pertama dari tabel di atas, lalu klik Select Features. Hasil yang akan terlihat: jumlah terseleksi di bilah status, sama dengan kolom "Hasil uji". - Ulangi untuk tiap aturan. Bila angkanya berbeda, periksa ejaan nama layer dan field.
- Buat kolom virtual: buka Field Calculator, centang Create virtual field, beri nama
Status_Mutu, tipe Text, dan tempel ekspresi di bawah. Hasil yang akan terlihat: kolom baru di tabel atribut. Saring baris yang bukanOKuntuk melihat daftar kerjanya.
CASE
WHEN "Kondisi" IS NULL THEN 'Kondisi kosong'
WHEN "Kondisi" NOT IN ('Sehat','Terserang Hama','Tebangan Liar') THEN 'Kondisi tidak baku'
WHEN "Tinggi_Phn" NOT BETWEEN 0 AND 60 THEN 'Tinggi di luar 0-60'
WHEN "Akurasi_m" > 5 THEN 'Akurasi lebih dari 5 m'
WHEN "Tgl_Survei" NOT BETWEEN to_date('2026-09-01') AND to_date('2026-09-12') THEN 'Tanggal di luar periode'
WHEN count("ID_Survei", group_by:="ID_Survei") > 1 THEN 'ID ganda'
WHEN NOT overlay_within('Batas_KPH') THEN 'Di luar semua petak'
WHEN overlay_within('Batas_KPH', "NAMA_KPH")[0] <> "KPH" THEN 'Label KPH tidak sesuai'
ELSE 'OK'
END- Sebagai alternatif, jalankan skrip I3.6 (Python Console) yang hanya membaca data dan mencetak daftar ID bermasalah. Hasil uji (QGIS 4.0.2):
Jumlah baris diperiksa: 61
Kondisi kosong 2 SV-031, SV-040
Kondisi tidak baku 3 SV-005, SV-012, SV-020
Tinggi di luar rentang 2 SV-007, SV-033
Tanggal di luar periode 1 SV-050
Akurasi lebih dari 5 m 2 SV-015, SV-044
ID ganda 1 SV-049
Koordinat kembar 4 SV-049, SV-049, SV-051, SV-058
Di luar semua petak 3 SV-059, SV-060, SV-061
Label KPH tidak sesuai letak 2 SV-010, SV-025- Perbaiki ejaan pada salinan layer. Buka Field Calculator, perbarui field yang ada
Kondisi, dengan ekspresi berikut. Hasil yang akan terlihat:Sehatuntuk dua baris yang tadinyasehatdanSehat.
CASE
WHEN lower(trim("Kondisi")) = 'sehat' THEN 'Sehat'
WHEN lower(trim("Kondisi")) = 'terserang hama' THEN 'Terserang Hama'
WHEN lower(trim("Kondisi")) = 'tebangan liar' THEN 'Tebangan Liar'
ELSE "Kondisi"
END- Jalankan lagi pemeriksaan. Baris
Kondisi tidak bakuseharusnya menjadi 0.
#Bagian B: ArcGIS Pro
#Bagian B: ArcGIS Pro
Alat berikut ada di Pro. Cocokkan dengan versi Anda. [CEK]
- Select Layer By Attribute dengan klausa SQL, misalnya
Kondisi IS NULL OR Kondisi NOT IN ('Sehat', 'Terserang Hama', 'Tebangan Liar'). Perhatikan bahwa polaIS NULLtetap perlu, seperti di QGIS. - Frequency (Analysis ► Statistics) pada field
Kondisiuntuk menghitung tiap nilai. Ini mirip denganGROUP BYdi Bab 7. - Find Identical pada
ID_Surveiuntuk menemukan baris ganda. - Select Layer By Location dengan hubungan Within terhadap
Batas_KPH, lalu balikkan seleksi (Switch Selection) untuk menemukan titik di luar petak. - Aturan yang berjalan terus di dalam geodatabase memakai Attribute Rules, yang tidak dikenali ArcMap. [kemungkinan: dokumentasi Esri]
#Bagian C: ArcMap 10.8
#Bagian C: ArcMap 10.8
- Select By Attributes (menu Selection) dengan klausa SQL yang sama seperti Pro. [CEK]
- Frequency dan Find Identical dari ArcToolbox. Ketersediaan lisensi untuk Find Identical belum diperiksa. [CEK]
- Select By Location dengan hubungan Are within, lalu balikkan seleksi. [CEK]
Tidak ada padanan: ArcMap tidak punya Attribute Rules. Pemeriksaan harus dijalankan secara berkala lewat skrip atau alat di atas. [kemungkinan]
#Cek paham
- Mengapa
"Kondisi" NOT IN (...)saja tidak cukup untuk menemukan semua nilai tidak sah? - Apa beda keabsahan dan konsistensi?
- Mengapa perbaikan sebaiknya dilakukan pada salinan, bukan data mentah?
Jawaban:
- Karena baris yang berisi NULL tidak ikut terpilih oleh
NOT IN. Perlu pemeriksaanIS NULLtersendiri. - Keabsahan menilai satu nilai terhadap daftar atau rentang. Konsistensi menilai kecocokan antar bagian data, seperti label petak dan letak titik.
- Agar Anda selalu bisa kembali ke data asli, dan perubahan dapat ditelusuri.
#Kesalahan umum
- Menghitung dulu, memeriksa kemudian. Periksa dulu, hitung belakangan.
- Menebak nilai yang meragukan. Tandai dan tanyakan ke surveyor.
- Melupakan NULL. Kosong berperilaku khusus dalam perbandingan.
- Memeriksa hanya sekali. Jalankan pemeriksaan tiap kali ada data baru.
- Tidak mencatat perbaikan. Tanpa catatan, orang lain tidak tahu apa yang berubah.
#Ringkasan dan latihan
Ringkasan: periksa kelengkapan, keabsahan, keunikan, konsistensi, letak, akurasi, dan tanggal. Tulis aturan sebagai ekspresi agar bisa diulang. Waspadai NULL. Perbaiki pada salinan, hanya yang pasti, dan catat.
Latihan: tambahkan satu aturan baru ke Status_Mutu: diameter batang di luar 5 sampai 100 cm. Jalankan, lalu catat jumlah temuannya. Dalam data latihan, seharusnya tidak ada yang melanggar aturan ini. Mengapa tetap berguna menambahkannya?
Jawaban yang diharapkan: temuan 0 berarti data lolos, dan aturan itu siap menangkap data baru yang bermasalah.
#Tabel perbandingan: memeriksa kualitas data
| Tugas | QGIS | ArcGIS Pro | ArcMap 10.8 |
|---|---|---|---|
| Cari nilai kosong atau salah | Select by Expression | Select Layer By Attribute | Select By Attributes |
| Hitung per nilai | Statistik atau SQL (Bab 7) | Frequency | Frequency |
| Cari baris ganda | count(...group_by) atau SQL | Find Identical | Find Identical [CEK] |
| Titik di luar petak | overlay_within | Select Layer By Location (Within) lalu balikkan | Select By Location lalu balikkan |
| Aturan yang berjalan terus | Constraint di formulir, trigger | Attribute Rules | Tidak ada padanan |