Я намагаюся класифікувати набір даних, що кодують час від gps, на поведінку на основі різних атрибутів.
Я створив атрибут, який дорівнює 0 для дому та 1 для відсутнього, залежно від місця розташування, і тепер хочу пронумерувати поїздки далеко від дому (набір балів 01111111111110
буде однією поїздкою, оскільки вона почалася і закінчилася вдома). Я додав поле атрибутів, яке матиме номери поїздки, але не знаю, як обчислити поле, тож воно базується на полі дома / вдома.
Ось приклад даних GPS (використовуючи "*" для позначення невідповідної інформації та просто індексування разів як 1, 2 і т. Д.), Описаного вище індикатора "Додому / Вдали" та бажаного індикатора поїздки "Подорож", що мені потрібно для обчислення:
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
....
Мій набір даних занадто великий, щоб вручну пройти та пронумерувати кожну поїздку в таблиці атрибутів, тож чи є спосіб обчислити поле, грунтуючись на тому, як впорядковано атрибут home / away та кожне "згущення" точок відсутності позначається як поїздка?
Це голі кістки того, як може виглядати код Python (я не маю досвіду з кодом).
Вираз:
trip = Reclass(!home!)
Кодблок:
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
Після використання рекомендованого сценарію matt wilkie я вніс деякі зміни, так що моя перша поїздка - номер 1, друга - 2 і т.д. і т.д.
Ось код, змінений з матових:
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
Тоді я просто вибираю для дому = 0 і обчислюю своє поле поїздки назад до 0. Акуратно упорядковані поїздки.
trip
змінна може бути повторно ініціалізована будь-яку довільну кількість разів.