ทำความสะอาดข้อมูล Daylight Saving ด้วย fold
จากที่เราเพิ่งค้นพบ มีข้อมูลการเดินทางชุดหนึ่งในชุดข้อมูลที่ถูกทำให้คลาดเคลื่อนเพราะการเปลี่ยนเวลา Daylight Saving เรามาทำความสะอาดชุดข้อมูลนี้กัน เพื่อให้ได้ระยะเวลาการเดินทางที่น้อยที่สุดที่ถูกต้อง โดยอาศัยข้อเท็จจริงที่ว่าการเดินทางสิ้นสุดหลังจากเริ่มต้นเสมอ ซึ่งช่วยแก้ไขระยะเวลาที่ผิดพลาดจากการสิ้นสุด Daylight Saving ได้
เนื่องจาก Python ไม่รองรับ tz.enfold() ในการคำนวณทางคณิตศาสตร์โดยตรง เราจึงต้องแปลง datetime object ให้อยู่ใน UTC ซึ่งได้แก้ไขความกำกวมของเวลาไว้แล้ว
onebike_datetimes ถูกโหลดไว้แล้วและอยู่ใน timezone ที่ถูกต้อง มีการ import tz และ timezone แล้ว ให้ใช้ tz.UTC สำหรับ timezone
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การทำงานกับวันที่และเวลาใน Python
คำแนะนำการฝึกหัด
- เติมคำสั่ง
ifให้เป็น true เฉพาะเมื่อstartของการเดินทางมาหลังend - เมื่อ
startอยู่หลังendให้เรียกtz.enfold()กับendเพื่อระบุว่าหมายถึงเวลาหลังการเปลี่ยน Daylight Saving - หลังคำสั่ง
ifให้แปลง start และ end ให้เป็น UTC เพื่อให้สามารถเปรียบเทียบได้อย่างถูกต้อง
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
trip_durations = []
for trip in onebike_datetimes:
# When the start is later than the end, set the fold to be 1
if ____ > ____:
trip['end'] = tz.____(trip['end'])
# Convert to UTC
start = trip['start'].____
end = trip['end'].____
# Subtract the difference
trip_length_seconds = (end-start).total_seconds()
trip_durations.append(trip_length_seconds)
# Take the shortest trip duration
print("Shortest trip: " + str(min(trip_durations)))