발전의 의지/파이썬

경로형 교통분석시스템 TCS 자료 비교(0730 작성중)

OnlyMyStuff 2021. 8. 29. 21:54

이젠 구분선 같은거 하기도 귀찮다 그냥 할란다.

0. 필요 데이터 정리

- 오산, 서청주, 영산 진출입 TCS

- 서서울~목포, 서울~대전, 서울~울산 OD 교통량

- 장흥~서영암(장흥~강진무위사 + 장흥~서영암), 서포항~포항, 남양평Hi~양평 OD 교통량(동고성 제외)

- 서울, 포항, 통영, 양평 진출입 TCS

1. 필요 패키지 import

import os import pandas as pd cwd = os.getcwd() + "\\.spyder-py3"

2. 원본 데이터 불러오기

TCS_inout = pd.read_csv(cwd+"\\TCS_INOUT_RAW_DATA_20181018.csv") TCS_hour = pd.read_csv(cwd+"\\TCS_RAW_DATA_20181018.csv")

3. 필요한 영업소 df 만들기

raw data 는 모두 ID로만 나와있어 이름을 보고 골라줘야한다

그래서 모든 이름이 담긴 파일에서 내가 원하는 것만 필터링해서 쓸거다

TCS_name = ["오산톨게이트","서청주톨게이트","영산톨게이트","서울톨게이트","포항톨게이트","통영톨게이트","양평톨게이트", "서서울톨게이트","목포톨게이트","대전톨게이트","울산톨게이트""장흥톨게이트","강진무위사톨게이트","서영암톨게이트","서포항톨게이트","남양평(하이패스)톨게이트"] TCS_target = TOLL_name[TOLL_name["NAME"].isin(TCS_name)]

4. 영업소df 로 raw data에 이름 붙이기

별거 없다 merge 사용해서 붙이고 결측치 빼고

조건문을 별도로 작성해서 하면 좋다

isin()은 df["A"] 로 특정열을 지정하고 그걸 df[]안에 써주면 좋다

TCS_inout_target = pd.merge(TCS_inout, TCS_target, how='left', left_on="TOLL_ID", right_on="TOLL_ID").dropna() TCS_hour_target = pd.merge(TCS_hour, TCS_target, how='left', left_on="S_TOLL_ID", right_on="TOLL_ID").drop("TOLL_ID",axis=1).rename(columns={"NAME":"S_NAME"}) TCS_hour_target = pd.merge(TCS_hour_target, TCS_target, how='left', left_on="E_TOLL_ID", right_on="TOLL_ID").drop("TOLL_ID",axis=1).rename(columns={"NAME":"E_NAME"}) con_na = (TCS_hour_target["S_NAME"].isna())|(TCS_hour_target["E_NAME"].isna()) TCS_hour_target = TCS_hour_target[~con_na]

5. pivot 을 사용하여 진출입교통량 먼저 확인

피벗에 인덱스를 두개 넣으니 원하는 형식으로 잘나온다 행복하다

inout_data = pd.pivot_table(TCS_inout_target, index=("NAME","TCS_INOUT"),values="TCS_TRAF",aggfunc='sum')

원래 print를 하거나 주피터노트북으로 봐야 바로 표가 생성되는데

스파이더는 옆에 valuable explorer 가 존재해서 딱히 필요없다

하지만 주피터노트북처럼 table이 바로 정리되서 표출되면 좋긴하겠다

TCS_TRAF NAME TCS_INOUT 강진무위사톨게이트 0 2807 1 2686 남양평(하이패스)톨게이트 0 1343 1 1441 대전톨게이트 0 26310

0, 1 이 각각 진출입을 의미하는 것 같고 TCS_TRAF 를 보는 것이 맞는지는 업체에 문의해봐야겠다

TRAF 는 교통량, TCS_INOUT 0 은 진입, 1은 진출

그냥 변수별로 설명 달라캐야겟다

찾아보니 표그려주는 함수가 모듈이 있더라 tabulate라고

그래서 적용해봄

#pip install tabulate --trusted-host pypi.org --trusted-host files.pythonhosted.org print(tab(inout_data, headers='keys', tablefmt='psql')) +---------------------------------+------------+ | | TCS_TRAF | |---------------------------------+------------| | ('강진무위사톨게이트', 0) | 2807 | | ('강진무위사톨게이트', 1) | 2686 | | ('남양평(하이패스)톨게이트', 0) | 1343 | | ('남양평(하이패스)톨게이트', 1) | 1441 | | ('대전톨게이트', 0) | 26310 | | ('대전톨게이트', 1) | 25220 | | ('목포톨게이트', 0) | 16296 | | ('목포톨게이트', 1) | 16467 | | ('서서울톨게이트', 0) | 98808 | | ('서서울톨게이트', 1) | 99065 | | ('서영암톨게이트', 0) | 6232 | | ('서영암톨게이트', 1) | 4642 | | ('서울톨게이트', 0) | 108148 | | ('서울톨게이트', 1) | 112118 | | ('서청주톨게이트', 0) | 15378 | | ('서청주톨게이트', 1) | 15121 | | ('서포항톨게이트', 0) | 1751 | | ('서포항톨게이트', 1) | 1900 | | ('양평톨게이트', 0) | 3864 | | ('양평톨게이트', 1) | 4325 | | ('영산톨게이트', 0) | 3193 | | ('영산톨게이트', 1) | 3177 | | ('오산톨게이트', 0) | 27804 | | ('오산톨게이트', 1) | 29152 | | ('통영톨게이트', 0) | 9378 | | ('통영톨게이트', 1) | 9254 | | ('포항톨게이트', 0) | 13823 | | ('포항톨게이트', 1) | 13016 | +---------------------------------+------------+

tabulate 함수 안의 각 인자는 뭘 의미하는지 모름

6. OD 교통량 확인

이게 쫌 고민이네 일단 해보자

TCS_hour_target["travel"] = TCS_hour_target["S_NAME"] + TCS_hour_target["E_NAME"] travel_target = ["서서울톨게이트목포톨게이트","서울톨게이트대전톨게이트","서울톨게이트울산톨게이트", "장흥톨게이트강진무위사톨게이트","장흥톨게이트서영암톨게이트","서포항톨게이트포항톨게이트", "남양평(하이패스)톨게이트양평톨게이트"] TCS_hour_target_travel = TCS_hour_target[TCS_hour_target["travel"].isin(travel_target)] travel_data = pd.pivot_table(TCS_hour_target_travel, index="travel",values="OBUE_ID",aggfunc='count')

OD 경로를 한개의 변수로 합치고(나중에는 메모리 늘어나는거라 피해야할 방법이긴하다) 내가 원하는 것만 isin()으로 필터링했다

OBUE_ID로 개별 ID가 부여된다고 판단해서 count를 하였다(물론 인/아웃 두번 카운트되서 반을 해야한다.

여기다가 lambda를 쓰면 좋을 것 같긴하다 다시해볼까?

여튼 경로가 4개 밖에 안나와서 틀렸다 내가 잘못했나??