2012-05-25 6 views
0

나는 드라이버의 여행 일지에 대한 데이터 세트를 가지고있다. 각 여행마다 CSV 파일에 시작 시간, 종료 시간 및 요일이 있습니다. 여행과 관련된 날짜가 없습니다. 각각의 시작 시간을 어디에Python 시간 객체에서 평일 반복 Looping

는 지금 파이썬에 데이터를 가지고 및 종료 시간과 같이 첨부 평일있다 : 시간의 월요일 0과 23을 반환

time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=23, 
       tm_min=45, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1) 

print journey['BeginTime'][2].tm_wday, journey['BeginTime'][2].tm_hour 

합니다.

이 여행은 11,000 번이며, 원하는 것은 주간 시간대에 따라 주행하는 자동차 수에 대한 주간 프로필입니다.

이것은 지정된 시간 간격 동안 각각의 [ 'BeginTime'] 및 [ 'EndTime'] 간격 사이에있는 트립 수를 계산하여 유추 할 수 있습니다. 데이터가 가장 가까운 5 분이므로 5 분 간격으로 충분합니다.

우아한 파이썬 방법이 있나요? 이 여기에 도움이되는 아이디어 경우

for fiveMinutes in Week: 
count = 0 
    for trip in range(len(journey['BeginTime']): 
     if journey['BeginTime'][trip] == fiveMinutes 
       or (journey['BeginTime'][trip] < fiveMinutes 
        and journey['EndTime'][trip] > fiveMinutes): 
      count = count + 1 
carCount[fiveMinutes] = count 
+0

:처럼 뭔가. 여행 당 하나의 사전으로 사전 목록을 사용하는 것이 더 좋지 않습니까? – jcfollower

+0

하루 경계 또는 주 경계를 넘는 여행에 대해 걱정할 필요가 있습니까? – jcfollower

+0

감사합니다. 다시 첫 코멘트를 남겨주세요! 설문 조사에서 각기 다른 고유 한 사용자 ID로 연결된 여행 일기의 다른 측면을 다루는 5 개의 CSV 파일이 있습니다. 데이터를 가져 오는 빠른 방법을 원했기 때문에이 코드를 사용했지만 더 좋은 방법은 무엇입니까? DEF getCSVData (파일명) \t 데이터 csv.reader = (개방 ((이름), 'RB') = 구분자 ''quotechar = '' ') \t \t 헤더 data.next =() \t \t 칼럼 [H] = [] 데이터 행 \t \t : 시간 동안 \t \t 지퍼의 V (헤더 행) \t \t \t \t \t 칼럼 칼럼 = {} \t 헤더 시간 동안 [h] .append (v) \t return column – user578582

답변

0

... 당신이 그것에서 목록의 무리와 함께 사전을 사용하는 것 같습니다

from datetime import datetime, timedelta 

# This does not check for crossing from Sunday to Monday 
def convert_dt(start_dt, journey): 
    begin_weekday, begin_hour, begin_minute = journey[0] 
    end_weekday, end_hour, end_minute = journey[1] 

    begin_dt = start_dt + timedelta(days=begin_weekday) 
    begin_dt += timedelta(hours=begin_hour, minutes=begin_minute) 

    end_dt = start_dt + timedelta(days=end_weekday) 
    end_dt += timedelta(hours=end_hour,minutes=end_minute) 
    return (begin_dt, end_dt) 

def get_slot_journeys(start_dt, journeys):   
    next_dt = start_dt 
    slot_count = 60/5 * 24 * 7 
    slot_dict = {} 

    journey_dts = [] 
    #convert journey begin and end to datetimes 
    for index in range(len(journeys['begin_weekday'])): 
     next_journey = [(journeys['begin_weekday'][index], 
         journeys['begin_hour'][index], 
         journeys['begin_minute'][index],), 
         (journeys['end_weekday'][index], 
         journeys['end_hour'][index], 
         journeys['end_minute'][index],) 
         ] 
     journey_dts.append(convert_dt(start_dt, next_journey)) 

    for slot in range(slot_count): 
     slot_dict[next_dt] = 0 
     for journey_start, journey_end in journey_dts: 
      if next_dt >= journey_start and next_dt <= journey_end: 
       slot_dict[next_dt] = slot_dict[next_dt] + 1      

     next_dt += timedelta(minutes=(5)) 

    return slot_dict 

if __name__ == "__main__": 
    start_dt = datetime(2012, 1, 2, 0, 0)  

    journeys = {'begin_weekday': [0, 0], 
       'begin_hour': [14, 18], 
       'begin_minute': [20, 30], 
       'end_weekday': [0, 1], 
       'end_hour': [19, 12], 
       'end_minute': [15, 55], 
       } 
    slot_dict = get_slot_journeys(start_dt, journeys)  
    slot_keys = slot_dict.keys() 
    slot_keys.sort() 

    for key in slot_keys: 
     if slot_dict[key]:  
      print key, slot_dict[key]