Saya mencoba untuk mengklasifikasikan seperangkat data titik yang dikodekan waktu menjadi perilaku berdasarkan atribut yang berbeda.
Saya telah membuat atribut yang 0 untuk rumah dan 1 untuk jauh berdasarkan lokasi, dan sekarang ingin menghitung perjalanan jauh dari rumah (satu set poin 01111111111110
akan menjadi satu perjalanan karena dimulai dan berakhir di rumah). Saya telah menambahkan bidang atribut yang akan memiliki nomor perjalanan, tetapi tidak tahu cara menghitung bidang sehingga didasarkan pada bidang home / away.
Berikut adalah contoh data GPS (menggunakan "*" untuk menunjukkan informasi yang tidak relevan dan hanya mengindeks waktu 1, 2, dll.), Indikator "Home / Away" yang dijelaskan di atas, dan indikator perjalanan yang diinginkan, "Perjalanan", yang perlu saya hitung:
Time Lat Lon Home/Away Trip
1 * * 0 0
2 * * 1 1
3 * * 1 1
....
12 * * 1 1
13 * * 0 0
14 * * 0 0
15 * * 1 2
16 * * 1 2
....
34 * * 1 2
35 * * 0 0
36 * * 0 0
37 * * 1 3
....
Kumpulan data saya terlalu besar untuk dilalui secara manual dan nomor setiap perjalanan dalam tabel atribut, jadi apakah ada cara untuk menghitung bidang berdasarkan pada bagaimana atribut home / away dipesan dan setiap "rumpun" dari poin jauh ditetapkan sebagai perjalanan?
Ini adalah tulang telanjang dari apa yang tampak seperti kode Python (Saya tidak berpengalaman dengan kode).
Ekspresi:
trip = Reclass(!home!)
Codeblock:
def Reclass(home):
if (home = 0):
return 0
elif (home = 1 and lastValue = 0):
return _(incremental numbering?)_
elif (home = 1 and lastValue = 1):
return lastValue
Setelah menggunakan skrip yang direkomendasikan matt wilkie saya telah membuat beberapa perubahan sehingga perjalanan pertama saya adalah nomor 1, yang kedua adalah 2, dll.
Berikut adalah kode yang dimodifikasi dari matt:
import arcpy
rows = arcpy.UpdateCursor("test2")
trip = 0
for row in rows:
if row.home == 0:
prev = row.home
row.TRIP = trip
rows.updateRow(row)
elif row.home == 1 and prev == 0:
trip += 1
prev = row.home
row.TRIP = trip
rows.updateRow(row)
rows.next()
elif row.home == 1 and prev == 1:
prev = row.home
row.TRIP = trip
rows.updateRow(row)
rows.next()
row.TRIP = trip
rows.updateRow(row)
del row, rows
Kemudian saya tinggal pilih home = 0 dan hitung field perjalanan saya kembali ke 0. Perjalanan yang tertata rapi.
trip
variabel dapat diinisialisasi ulang setiap kali sewenang-wenang.