팀별로 각 지역을 정하여 사망 교통사고 데이터 분석을 했다.
우리 팀은 대전을 조사했다.
발생년월일시 컬럼에서 발생년월일, 시간 컬럼 파생변수 만들기
# 발생년월일시(string) ->발생년월일(날짜타입, datetype)으로 변경
df['발생년월일'] = pd.to_datetime(df['발생년월일시'].str[:10], errors='raise')
# 시간으로 분리한 데이터를 발생시간 컬럼으로 담고 int로 변경
df['발생시간'] = pd.to_numeric(df['발생년월일시'].str[-5:-3], errors='raise')
저번 실습에서는 시간먼저 구하여 나중에 컬럼을 정렬할 때 reverse를 사용했는데 그러지 않기 위해 발생년월일 컬럼먼저 파생변수를 만들었다.
필요없는 컬럼 삭제 및 정렬
# 필요없는 컬럼 삭제
del df['발생년월일시']
# 컬럼 순서 정리 발생년, 발생년월일, 발생시간 ~~~
df = df[['발생년'] + df.columns[-2:].tolist() + df.columns[1:-2].tolist()]
저번 실습때 리스트를 두 개로 나누어 앞, 뒤부분을 담아 나중에 합치는 방식으로 하였는데 그러지 않고 바로 합치는 방법으로 한줄로 구현했다.
정제된 데이터셋 저장하기
df.to_csv('2021년 지역별 사망 교통사고 데이터 전처리.csv', encoding='utf-8-sig', index=False)
대전광역시 데이터 준비하기
# 대전 사고 저장
dj_df = df[df['발생지시도']=='대전']
dj_df.head()
시간대별 교통사고 사망자 현황
#) 대전에서 17시에 사망자 가장 많이 발생
fig = px.bar(dj_df, x='사망자수', y='발생시간', orientation='h')
fig.update_layout(
title='대전광역시 시간대 별 교통사고 사망자 현황')
fig.show()
요일별 교통사고 사망자 현황
# 대전은 금요일에 교통사고 사망자가 가장 많
day_order = ['월', '화', '수', '목', '금', '토', '일']
fig = px.bar(dj_df, x='요일', y='사망자수', category_orders={'요일':day_order})
fig.update_layout(
title='대전광역시 요일 별 교통사고 사망자 현황')
fig.show()
지역구별 교통사고 사망자 현황
#) 대전 유성구에서 교통사고 사망자 가장 많이 발생
fig = px.bar(dj_df, x='발생지시군구', y='사망자수')
fig.show()
대전광역시 사망교통사고 위치 지도 시각화
# CircleMarker 사이즈(radius) -> 실수형 데이터만 취급
# 사망자수, 경상자수 컬럼 데이터타입 -> 실수형으로 변경
dj_df = dj_df.astype({'사망자수':'float', '경상자수':'float'})
dj_df.head()
# 1) 지도 준비
map = folium.Map(location=[36.3504119,127.3845475]) # [경도, 위도]
# 사고 유형에 따라 아이콘 지정
icon_mapping = {
'추돌': 'car',
'측면충돌': 'arrows-h',
'기타': 'question',
'차도통행중': 'road',
'정면충돌': 'arrows-v',
'횡단중': 'male',
'전도': 'exchange',
'주/정차차량 충돌': 'truck',
'공작물충돌': 'industry',
'길가장자리구역통행중': 'ellipsis-h'
}
# 2) CircleMarker 지도에 표출 -> for문을 이용해서 dj_df 데이터가 있을때까지 CirceMarker 지도에 add
for n in dj_df.index:
# CricleMarker size
cnt = dj_df['사망자수'][n] + dj_df['경상자수'][n]
# 위도, 경도 추출
lat = dj_df['위도'][n]
lng = dj_df['경도'][n]
accident_type = dj_df['사고유형'][n]
# CircleMarker 지도에 add
folium.CircleMarker([lat, lng], radius=cnt*8, popup=dj_df['사고유형'][n],
color='#F70000', fill_color='#F70000').add_to(map)
# 사고 유형에 따른 아이콘 추가
icon_type = icon_mapping.get(accident_type, 'question')
folium.Marker([lat, lng], popup=accident_type,
icon=folium.Icon(icon=icon_type, prefix='fa', color='red')
).add_to(map)
map
사고난 구역에 마우스를 올리면 사고유형이 뜨는데 이를 더 한눈에 알아보기 쉽게 사고유형에 맞는 마커를 추가하여 시각화 했다.
집에서 키우는 귀요미 선인장들🌵🌵
'ABC부트캠프' 카테고리의 다른 글
ABC 부트캠프 16일차(07.24) (0) | 2023.08.01 |
---|---|
ABC 부트캠프 12일차(07.18) (0) | 2023.07.22 |
ABC 부트캠프 10일차(07.14) (0) | 2023.07.14 |
ABC 부트캠프 9일차(07.13) (0) | 2023.07.14 |
ABC 부트캠프 8일차(07.12) (0) | 2023.07.13 |