Я пытаюсь классифицировать набор данных точек, закодированных по времени в gps, в поведение на основе различных атрибутов.
Я создал атрибут, который равен 0 для дома и 1 для выезда, в зависимости от местоположения, и теперь хочу подсчитать количество поездок вне дома (набор точек 01111111111110
будет одной поездкой, потому что она началась и закончилась дома). Я добавил поле атрибута, в котором будут номера поездок, но не знаю, как рассчитать поле, поэтому оно основано на поле дома / на выезде.
Ниже приведен пример данных GPS (с использованием «*» для обозначения нерелевантной информации и простого индексации времени как 1, 2 и т. Д.), Индикатора «Home / Away», описанного выше, и индикатора требуемой поездки «Поездка», который мне нужно вычислить:
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
После использования рекомендованного сценария Мэтта Уилки я внес некоторые изменения, так что моя первая поездка - номер 1, моя вторая - 2, и т. Д. И т. Д.
Вот код, модифицированный из Matt's:
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
Затем я просто выбираю home = 0 и вычисляю поле моего путешествия обратно до 0. Точно упорядоченные поездки.
trip
переменная может быть повторно инициализирована любое произвольное количество раз.