Estoy tratando de clasificar un conjunto de datos de puntos codificados por tiempo gps en comportamientos basados en diferentes atributos.
He creado un atributo que es 0 para el hogar y 1 para el visitante según la ubicación, y ahora quiero numerar los viajes fuera de casa (un conjunto de puntos 01111111111110
sería un viaje porque comenzó y terminó en casa). He agregado el campo de atributo que tendrá los números de viaje, pero no sé cómo calcular el campo, por lo que se basa en el campo local / visitante.
Aquí hay un ejemplo de los datos del GPS (usando "*" para indicar información irrelevante y simplemente indexando los tiempos como 1, 2, etc.), el indicador "Local / Ausente" descrito anteriormente y el indicador de viaje deseado, "Viaje", que necesito calcular:
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
....
Mi conjunto de datos es demasiado grande para pasar manualmente y numerar cada viaje en la tabla de atributos, por lo tanto, ¿hay alguna manera de calcular el campo en función de cómo se ordena el atributo local / visitante y cada "grupo" de puntos de distancia se designa como un ¿viaje?
Estos son los huesos básicos del aspecto que podría tener el código Python (no tengo experiencia con el código).
Expresión:
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
Después de usar el script recomendado de matt wilkie, hice algunos cambios para que mi primer viaje sea el número 1, el segundo sea el 2, etc.
Aquí está el código modificado de 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
Luego solo selecciono para inicio = 0 y calculo mi campo de viaje nuevamente a 0. Viajes ordenados cuidadosamente.
trip
variable puede reiniciarse cualquier número arbitrario de veces.