시작하기에 앞서
PET(Post Encroachment Time) 이란?
구글에 쳐도 없길래 사내 연구보고서에서 찾은 걸로 적겠음
Gap Time 과 Encroachment Time 은 선행차량과 후행차량이 어느 한 지점을 통과한 후, 후행 차량이 그 지점을 통과할 때까지 걸리는 시간으로 PET와 동일하나,
GT는 같은 방향의 차량, ET는 교차로에서 상충이 발생하는 지점에서 PET를 산출하기 위한 지표임
쉽게 말해서 headway와 비슷한데, 상충지역에서의 차량 on-off-on 되는 시간을 말하는 것 같음
목적
전처리된 데이터를 활용하여 PET를 계산해낸다.
--------------------------------------
주피터 쓰기 싫어서 스파이더로 이관중
--------------------------------------
패키지 준비
import pandas as pd #너무 잘알아서 패스 import os #시스템 내 경로나 파일을 다루는 데 쓰는 듯 함 import gc #메모리 관리할때 쓴데요 from itertools import combinations #수열, 조합에 쓰는 듯 from tqdm import tqdm #for 문의 진행정도를 텍스트로 보여줌! import time #말그대로 시간을 이용하는거
데이터 불러오기
spyder는 .head()가 작동하진 않지만 R과 같은 인터페이스를 가져서 그냥 눌러서 보면된다
편한건가?
아무튼 필요한 데이터를 불러온다
이전에 전처리 끝낫던 final_data
curD = os.getcwd() TempFolder = "_dataset\\" FileName = 'dataset_1-3_주행방향찾기.csv' dataset_0 = pd.read_csv(TempFolder + FileName)
충돌 교차점 찾기 함수
아주 똑같이 적어보면서 코드를 해석해보자
우선 같은 시간대(SCAN)에서 존재하는 차량ID들과 그들의 조합을 만드는 함수를 작성
def DivTimeStep(dataset, timestep): # 해당 시간대의 dataset 불러오기 dataset_timestep = dataset[datset['SCAN'] == timestep] return dataset_timestep def FindVehDataset(dataset, veh_id): # 해당 차량의 dataset 불러오기 dataset_VehDataset = dataset[dataset['newID'] == veh_id] return dataset_VehDataset def GetTimeTNewIDCombinationList(dataset, timestep): dataset_t = DivTimeStep(dataset, timestep) dataset_t_newID = dataset_t['newID'] # 해당 시간대 dataset에서 newID 만 리스트 형태로 뽑음 dataset_t_newID_Combination_list = list(combinations(dataset_t_newID),2) # 각각의 newID를 쌍으로 묶음 (a,b), (a,c) ,,, return dataset_t_newID_Combination_list
그 다음에는 차량을 A, B로 나누고 merge 해주는 함수 작성
merge에 대해서 말하자면
왼쪽 데이터에 오른쪽 데이터를 붙이는데,
왼쪽이랑 오른쪽 비교 기준은 각각 _on 열을 기준으로 붙이라는 소리
def SetNewIDListCombinationDataset(dataset, timestep): dataset_t = DivTimeStep(dataset, timestep) dataset_t_newID_Combination_list = GetTimeTNewIDCombinationList(dataset, timestep) time_t_combination_dataset = [] if dataset_t_newID_Combination_list: for i in dataset_t_newID_Combination_list: vehicle_A = i[0] vehicle_B = i[1] vehicle_A_data = FindVehDataset(dataset_t, vehicle_A) vehicle_A_data = vehicle_A_data.add_prefix('A_') # 레이블 마다 앞에 A_를 붙여준다는 의미 index가 아닌 col에 붙음 vehicle_B_data = FindVehDataset(dataset_t, vehicle_B) vehicle_B_data = vehicle_B_data.add_prefix('B_') vehicle_A_B_dataset = pd.merge(vehicle_A_data, vehicle_B_data, how='left',left_on='A_SCAN',right_on='B_SCAN') time_t_combination_dataset.append(vehicle_A_B_dataset) Combination_dataset = pd.concat(time_t_combination_dataset) return Combination_dataset else: print("해당 시간대에 차량ID 조합이 없습니다. 시간대 : "+str(timestep))
함수 적용하기
원본데이터에서 SCAN(시간)값을 뽑고 맨마지막 걸 가져오기위해 iloc[-1] 그리고 숫자형태로 변환
time1 은 얼마나 걸리는지 보려고 하시는듯
지금도 뻉글 뺑글 돌아가는중 퇴근전에 되시려나
endOfTimeStep = dataset_0['SCAN'].iloc[-1].astype(int) time1 = time.time() CombinationDataset = [] for i in tqdm(range(endOfTimeStep)): newIDCombinationDataset = SetNewIDListCombinationDataset(dataset_0,i) CombinationDataset.append(newIDCombinationDataset) Combinationdataset_result = pd.concat(CombinationDataset) time2 = time.time() - time1 print('') print(time2) CombinationDataset_result.to_csv(TempFolder + 'Combination_table.csv', index=False)
끝!
'발전의 의지 > 파이썬' 카테고리의 다른 글
경로형 교통분석시스템 TCS 자료 비교(0730 작성중) (0) | 2021.08.29 |
---|---|
다차로 하이패스 분석 코드 공부 2-2 PET 계산 코드 작성 (20210706 작성중) (0) | 2021.08.27 |
경로형 교통분석 검증하기(20210611 종결) (0) | 2021.08.27 |
다차로 하이패스 분석 코드 공부 1-1 전처리 (完) 20210526 (0) | 2021.08.26 |
파이썬 공부에 따른 업무 적용에 따른 블로그 글 작성 시작에 따른 따릉이 20210526 (0) | 2021.08.26 |