다시 승용차 데이터
속도 정보 | 서울시 교통정보 시스템 - TOPIS (seoul.go.kr)
speed = pd.read_excel('./2019_10_서울시 도로별 통행속도.xlsx')
speed
대충 필요없는 컬럼을 날려버리자.
speed_processing = speed.drop(['링크아이디', '기능유형구분', '도심/외곽구분', '권역구분'], axis=1)
버스나 지하철처럼 출근시간, 퇴근시간, 점심시간 등등으로 나누자
speed_processing['출근시간 (06~09)'] = (speed_processing['06시'] + speed_processing['07시'] +\
speed_processing['08시'] + speed_processing['09시']) / 4
speed_processing['피크 출근시간 (07~08)'] = ( speed_processing['07시'] +speed_processing['08시']) / 2
speed_processing['퇴근시간 (17~20)'] = (speed_processing['17시'] +\
speed_processing['18시'] + speed_processing['19시'] +\
speed_processing['20시'])/4
speed_processing['피크 퇴근시간 (18~19)'] = (speed_processing['18시'] + speed_processing['19시'])/2
speed_processing['점심시간(11~13)'] = (speed_processing['11시'] + speed_processing['12시'] +\
speed_processing['13시'])/3
speed_processing['저녁시간(21~24)'] = (speed_processing['21시'] + speed_processing['22시'] +\
speed_processing['23시'] + speed_processing['24시'])/4
speed_processing['새벽시간(02~05)'] = (speed_processing['02시'] + speed_processing['03시'] +\
speed_processing['04시'] + speed_processing['05시'])/4
speed_processing['오후시간(14~16)'] = (speed_processing['14시'] + speed_processing['15시'] +\
speed_processing['16시'])/3
speed_processing
이제 시간 데이터를 날려버리자.
for i in range(1,10):
col = "0"+ str(i) +"시"
speed_processing = speed_processing.drop([col], axis=1)
for i in range(10, 25):
col = str(i) +"시"
speed_processing = speed_processing.drop([col], axis=1)
speed_processing = speed_processing.drop(['차선수'], axis=1)
(차선은 가지고 놀 수 있을 거같긴한데)
speed_processing = speed_processing.astype({"일자" : 'string'})
speed_processing
(이건 연도별로 나눌려고)
그런생각이 들었다. 요일이 필요할까 그냥 월~금 / 토,일 만 있으면 되는거 아닌가?
speed_processing["주중,주말"] = ""
speed_processing
count = 0
weekday_list = ["월", "화", "수", "목", "금"]
weekend_list = ["토", '일']
for i in range(len(speed_processing)):
if speed_processing['요일'][i] in weekday_list:
speed_processing['주중,주말'][i] = "주중"
elif speed_processing['요일'][i] in weekend_list:
speed_processing['주중,주말'][i] = "주말"
speed_processing
그래서 월화수목금이면 주중으로 토일이면 주말로 해주세요
speed_processing = speed_processing.drop(['요일'], axis = 1)
그럼 이제 요일 컬럼 필요없다.
피벗을 할거다. 그러니 문자열 정보의 안전을 위해서 하나로 합쳐버린다.
speed_processing["정보"] = speed_processing['도로명'] +"!" +speed_processing['시점명'] +"!" + \
speed_processing['종점명'] +"!" + speed_processing['방향'] +"!" +speed_processing['주중,주말']
speed_processing = speed_processing.drop(['도로명', '시점명', '종점명', '방향', '주중,주말'], axis = 1)
문자열 다 드랍시킨다.
speed_processing_pivot = speed_processing.pivot_table(speed_processing, index=["정보"], aggfunc = [np.average] )
speed_processing_pivot
피벗을 시켜버리면
이쁘게 나온다.
컬럼 조정을 해주고
speed_processing_pivot.columns = ['/'.join(col) for col in speed_processing_pivot.columns]
speed_processing_pivot
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[0]: "거리"}, inplace=True)
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[1]: "새벽시간(02~05)"}, inplace=True)
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[2]: "오후시간(14~16)"}, inplace=True)
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[3]: "저녁시간(21~24)"}, inplace=True)
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[4]: "점심시간(11~13)"}, inplace=True)
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[5]: "출근시간 (06~09)"}, inplace=True)
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[6]: "퇴근시간 (17~20)"}, inplace=True)
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[7]: "피크 출근시간 (07~08)"}, inplace=True)
speed_processing_pivot.rename(columns={speed_processing_pivot.columns[8]: "피크 퇴근시간 (18~19)"}, inplace=True)
speed_processing_pivot
컬럼 이름을 바꿔준다.
speed_processing_pivot['새벽시간(02~05)']= round(speed_processing_pivot['새벽시간(02~05)'], 2)
speed_processing_pivot['오후시간(14~16)']= round(speed_processing_pivot['오후시간(14~16)'], 2)
speed_processing_pivot['저녁시간(21~24)']= round(speed_processing_pivot['저녁시간(21~24)'], 2)
speed_processing_pivot['점심시간(11~13)']= round(speed_processing_pivot['점심시간(11~13)'], 2)
speed_processing_pivot['출근시간 (06~09)']= round(speed_processing_pivot['출근시간 (06~09)'], 2)
speed_processing_pivot['퇴근시간 (17~20)']= round(speed_processing_pivot['퇴근시간 (17~20)'], 2)
speed_processing_pivot['피크 출근시간 (07~08)']= round(speed_processing_pivot['피크 출근시간 (07~08)'], 2)
speed_processing_pivot['피크 퇴근시간 (18~19)']= round(speed_processing_pivot['피크 퇴근시간 (18~19)'], 2)
이걸 왜 해준지는 모르겠다.
speed_processing_pivot["도로명"] = ""
speed_processing_pivot["시점명"] = ""
speed_processing_pivot["종점명"] = ""
speed_processing_pivot["방향"] = ""
speed_processing_pivot["주중,주말"] = ""
다시 문자열 데이터 만들어주고
speed_processing_pivot = speed_processing_pivot.reset_index()
speed_processing_pivot_list = speed_processing_pivot['정보']
speed_processing_pivot_list
리셋인덱싱해주고
정보를 리스트로 만들어서
느낌표로 split 해버리면 문자열 정보를 살릴 수 있다.
#speed_processing["정보"] = speed_processing['도로명'] +"!" +speed_processing['시점명'] +"!" + \
# speed_processing['종점명'] +"!" + speed_processing['방향'] +"!" +speed_processing['주중,주말']
for i in range(len(speed_processing_pivot)):
str_split = speed_processing_pivot_list[i].split('!')
speed_processing_pivot["도로명"][i] = str_split[0]
speed_processing_pivot["시점명"][i] = str_split[1]
speed_processing_pivot["종점명"][i] = str_split[2]
speed_processing_pivot["방향"][i] = str_split[3]
speed_processing_pivot["주중,주말"][i] = str_split[4]
여기서 날짜 맞게 추가해주고
speed_processing_pivot["날짜"] = "2019010"
# 아마 2019년 자료를 수정하고 있었나봄
speed_processing_pivot = speed_processing_pivot[["날짜","주중,주말", "도로명", "시점명", "종점명", "방향", "거리", "출근시간 (06~09)"
, '퇴근시간 (17~20)', '피크 출근시간 (07~08)', '피크 퇴근시간 (18~19)'
, '점심시간(11~13)', '저녁시간(21~24)', '오후시간(14~16)', '새벽시간(02~05)']]
컬럼 순서를 변경해주면
끝인데
여기다가 우리가 구했던 위치정보를 추가해줘야한다.
location = pd.read_csv('./도로별 위치 정보.csv', encoding='EUC-KR')
location
speed_data["도로명 포함 시점"] = speed_data["도로명"] + " " + speed_data["시점명"]
speed_data["도로명 포함 종점"] = speed_data["도로명"] + " " + speed_data["종점명"]
speed_data
머지를 시킬려면 기준이 있어야한다.
merge_left = pd.merge(speed_data,location, how='left', left_on='도로명 포함 시점', right_on='도로명 포함 주소')
merge_left
merge_left = merge_left.drop(["도로명 포함 주소"], axis = 1)
merge_left.rename(columns={merge_left.columns[17]: "시점 경도"}, inplace=True)
merge_left.rename(columns={merge_left.columns[18]: "시점 위도"}, inplace=True)
merge_left
다시 머지
merge_left = pd.merge(merge_left,location, how='left', left_on='도로명 포함 종점', right_on='도로명 포함 주소')
merge_left
merge_left = merge_left.drop(['도로명 포함 시점', '도로명 포함 종점', '도로명 포함 주소'], axis = 1)
merge_left
다쓴 컬럼은 삭제
merge_left.rename(columns={merge_left.columns[17]: "종점 경도"}, inplace=True)
merge_left.rename(columns={merge_left.columns[18]: "종점 위도"}, inplace=True)
merge_left
이러면 자동차 데이터는 모두 끝이난다.
'ㅇ 프로젝트 > TEAM_서울시 교통 인프라 분석' 카테고리의 다른 글
(팀원) 8. 서울시와 뉴욕시의 교통사고 데이터 분석 및 시각화 (0) | 2022.11.20 |
---|---|
7. 서울시 상권데이터를 분석하자. (0) | 2022.11.19 |
5. 서울시 승용차 평균속도 데이터를 통해 가공하고 네비게이션용 지도를 그려보자. (1) | 2022.11.19 |
4. (EDA_프로젝트) 서울시 지하철 데이터로 지하철 노선도를 그려보자. (1) | 2022.11.14 |
3. (EDA_프로젝트) 서울시 지하철 데이터를 수집하고 가공하자. (1) | 2022.11.14 |