ฉันกำลังพยายามจำแนกชุดข้อมูล gps ที่เข้ารหัสเวลาเป็นพฤติกรรมตามคุณลักษณะที่แตกต่างกัน
ฉันสร้างคุณลักษณะที่เป็น 0 สำหรับบ้านและ 1 สำหรับออกไปตามสถานที่และตอนนี้ต้องการกำหนดจำนวนการเดินทางออกจากบ้าน (ชุดของคะแนน01111111111110
จะเป็นการเดินทางหนึ่งครั้งเพราะเริ่มต้นและสิ้นสุดที่บ้าน) ฉันได้เพิ่มฟิลด์แอททริบิวที่จะมีหมายเลขการเดินทาง แต่ไม่ทราบวิธีการคำนวณฟิลด์ดังนั้นจึงเป็นไปตามฟิลด์บ้าน / ออกไป
นี่คือตัวอย่างของข้อมูล GPS (ใช้ "*" เพื่อระบุข้อมูลที่ไม่เกี่ยวข้องและเพียงทำดัชนีครั้งที่ 1, 2 ฯลฯ ) ตัวบ่งชี้ "บ้าน / ออกไป" ที่อธิบายไว้ข้างต้นและตัวบ่งชี้การเดินทางที่ต้องการ "การเดินทาง" ซึ่งฉันต้องคำนวณ:
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
....
ชุดข้อมูลของฉันมีขนาดใหญ่เกินไปที่จะผ่านไปด้วยตนเองและกำหนดจำนวนการเดินทางแต่ละครั้งในตารางแอตทริบิวต์ดังนั้นจึงมีวิธีใดในการคำนวณเขตข้อมูลตามวิธีการสั่งซื้อแอตทริบิวต์ home / Away และกำหนด "ก้อน" ของจุดเก็บแต่ละจุดเป็น เดินทาง?
นี่คือส่วนที่เปลือยเปล่าของรหัส Python ที่อาจดูเหมือน (ฉันไม่เคยมีประสบการณ์กับโค้ด)
นิพจน์:
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
หลังจากใช้สคริปต์ที่แนะนำของ matt wilkie ฉันได้ทำการเปลี่ยนแปลงบางอย่างเพื่อให้การเดินทางครั้งแรกของฉันคือหมายเลข 1 ครั้งที่สองคือ 2 ฯลฯ
นี่คือรหัสที่แก้ไขจากด้านของ:
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
จากนั้นฉันก็เลือกบ้าน = 0 และคำนวณเขตข้อมูลการเดินทางของฉันกลับเป็น 0 ทริปที่สั่งอย่างเรียบร้อย
trip
ตัวแปรอาจเริ่มต้นใหม่อีกครั้งตามจำนวนที่กำหนด