J'essaie de classer un ensemble de données ponctuelles gps encodées dans le temps en comportements basés sur différents attributs.
J'ai créé un attribut qui est 0 pour la maison et 1 pour l'extérieur en fonction de l'emplacement, et je veux maintenant numéroter les voyages loin de chez eux (un ensemble de points 01111111111110
serait un voyage car il a commencé et s'est terminé à la maison). J'ai ajouté le champ d'attribut qui contiendra les numéros de trajet, mais je ne sais pas comment calculer le champ afin qu'il soit basé sur le champ domicile / extérieur.
Voici un exemple des données GPS (en utilisant "*" pour indiquer des informations non pertinentes et simplement l'indexation des heures comme 1, 2, etc.), l'indicateur "Domicile / Absent" décrit ci-dessus, et l'indicateur de trajet souhaité, "Trip", dont j'ai besoin pour calculer:
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
....
Mon ensemble de données est trop volumineux pour être parcouru manuellement et numéroter chaque trajet dans la table attributaire. voyage?
Ce sont les bases de ce à quoi pourrait ressembler le code Python (je ne suis pas expérimenté avec le code).
Expression:
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
Après avoir utilisé le script recommandé de matt wilkie, j'ai apporté quelques modifications pour que mon premier voyage soit le numéro 1, mon deuxième soit 2, etc.
Voici le code modifié de 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
Ensuite, je sélectionne simplement home = 0 et je calcule mon champ de voyage à 0. Voyages soigneusement ordonnés.
trip
variable peut être réinitialisée un nombre arbitraire de fois.