Estou tentando classificar um conjunto de dados de ponto codificado em tempo de gps em comportamentos com base em diferentes atributos.
Criei um atributo que é 0 para casa e 1 para fora com base na localização e agora quero numerar as viagens fora de casa (um conjunto de pontos 01111111111110
seria uma viagem porque começou e terminou em casa). Eu adicionei o campo de atributo que terá os números de viagem, mas não sei como calcular o campo para que ele se baseie no campo de casa / fora.
Aqui está um exemplo dos dados do GPS (usando "*" para indicar informações irrelevantes e simplesmente indexar os tempos como 1, 2 etc.), o indicador "Casa / Fora" descrito acima e o indicador de viagem desejado, "Viagem", que eu preciso 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
....
Meu conjunto de dados é muito grande para percorrer manualmente e numerar cada viagem na tabela de atributos; portanto, existe alguma maneira de calcular o campo com base em como o atributo home / away é solicitado e cada "grupo" de pontos ausentes é designado como um viagem?
Estes são os ossos básicos da aparência do código Python (não tenho experiência com código).
Expressão:
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
Depois de usar o script recomendado de matt wilkie, fiz algumas alterações para que minha primeira viagem seja o número 1, a segunda seja 2, etc.
Aqui está o 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
Depois, basta selecionar para casa = 0 e calcular meu campo de viagem de volta a 0. Viagens ordenadas ordenadamente.
trip
variável pode ser reinicializada qualquer número arbitrário de vezes.