Sto tentando di classificare un insieme di dati punto codificati nel tempo gps in comportamenti basati su attributi diversi.
Ho creato un attributo 0 per la casa e 1 per la trasferta in base alla posizione e ora voglio numerare i viaggi lontano da casa (una serie di punti 01111111111110
sarebbe un viaggio perché è iniziato e terminato a casa). Ho aggiunto il campo attributo che avrà i numeri di viaggio, ma non so come calcolare il campo in modo che sia basato sul campo casa / fuori.
Ecco un esempio dei dati GPS (utilizzando "*" per indicare informazioni irrilevanti e semplicemente indicizzare i tempi come 1, 2, ecc.), L'indicatore "Casa / Ospite" sopra descritto e l'indicatore di viaggio desiderato, "Viaggio", che devo calcolare:
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
....
Il mio set di dati è troppo grande per passare manualmente e numerare ogni viaggio nella tabella degli attributi, quindi esiste un modo per calcolare il campo in base a come viene ordinato l'attributo home / away e ogni "gruppo" di punti away è designato come viaggio?
Queste sono le ossa nude di come potrebbe apparire il codice Python (non ho esperienza con il codice).
Espressione:
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
Dopo aver utilizzato lo script consigliato da Matt Wilson ho apportato alcune modifiche in modo che il mio primo viaggio sia il numero 1, il secondo sia il 2, ecc. Ecc.
Ecco il codice modificato da 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
Quindi seleziono solo home = 0 e calcolo il campo del mio viaggio a 0. Viaggi ordinatamente ordinati.
trip
variabile può essere inizializzata nuovamente un numero arbitrario di volte.