Usiłuję sklasyfikować zestaw danych punktowych zakodowanych w czasie GPS na zachowania oparte na różnych atrybutach.
Stworzyłem atrybut, który wynosi 0 dla domu i 1 dla wyjazdu na podstawie lokalizacji, a teraz chcę numerować wyjazdy poza domem (zestaw punktów 01111111111110
to jedna podróż, ponieważ zaczynała się i kończyła w domu). Dodałem pole atrybutu, które będzie miało numery podróży, ale nie wiem, jak obliczyć pole, więc jest ono oparte na polu domu / wyjazdu.
Oto przykład danych GPS (użycie „*” do wskazania nieistotnych informacji i po prostu indeksowanie czasów jako 1, 2 itd.), Opisanego powyżej wskaźnika „Home / Away” oraz pożądanego wskaźnika podróży „Trip”, które muszę obliczyć:
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
....
Mój zestaw danych jest zbyt duży, aby ręcznie przejść i numerować każdą podróż w tabeli atrybutów, więc jest jakiś sposób, aby obliczyć pole na podstawie tego, w jaki sposób uporządkowano atrybut home / away, a każda „grupa” punktów away jest oznaczana jako wyjazd?
Są to gołe kości tego, jak mógłby wyglądać kod Pythona (nie mam doświadczenia z kodem).
Wyrażenie:
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
Po użyciu skryptu Matta Wilkiego dokonałem pewnych zmian, dzięki czemu moja pierwsza podróż to numer 1, moja druga to 2 itd.
Oto kod zmodyfikowany z 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
Następnie wybieram dla domu = 0 i przeliczam pole podróży z powrotem na 0. Starannie uporządkowane wycieczki.
trip
zmienną można ponownie zainicjalizować dowolną liczbę razy.