본문 바로가기

대외활동/ABC 지역주도형 청년 취업역량강화 ESG 지원산업

[ABC 220831 - 12일차] 과제 피드백

반응형

2021년 교통사고 데이터를 분석

과제 발표 이후 직접 2021년 교통사고 데이터를 분석해주시면서 피드백 해주심.

라이브러리 임포트

import pandas as pd

import plotly.express as px

데이터 준비하기

df = pd.read_csv('/content/도로교통공단_사망 교통사고 정보_20211231.csv', encoding='euc-kr')
df.head()

df.info()

교통사고 데이터 전처리

- 패턴화 시켜서 데이터를 자르고 붙이는 연습이 중요함.

date_split = df['발생년월일시'].str.split(' ')
time_split = date_split.str.get(1)

- 1) 발생년월일시 → 공백을 기준으로 자르고, 시간을 다시 : 을 기준으로 잘라서 발생시간 컬럼에 넣기

df['발생시간'] = time_split.str.split(':').str.get(0)
# df['발생시간'] = date_split.str.get(1).str.split(':').str.get(0)

- 2) 발생시간 데이터 타입 변경

df = df.astype({'발생시간':'int64'})
df.info()

- 3) 발생년월일 컬럼 새로 만들어서 데이터(datetime 형태로) 넣기

df['발생년월일'] = pd.to_datetime(date_split.str.get(0), format='%Y-%m-%d', errors='raise')
df.head()

- 4) 필요없는 컬럼 삭제  발생년월일시

del df['발생년월일시']
df.head()

- 5) 전처리 한 데이터셋 저장

df.to_csv('2021년 사망교통사고 현황_2022.08.31.csv', encoding='utf-8-sig', index=False)

데이터 분석

df['발생지시도'].value_counts()

- top 5를 뽑아보자. 특정 데이터를 뽑는 것은 다른 처리를 해줘야 가능한거지만, index를 활용해서 슬라이싱한 후 몇번째까지 이런걸 뽑아볼 수는 있다.

df['발생지시도'].value_counts().index[:5]

df['요일'].value_counts()

# 사망자수 + 부상자 => 사고에서 발생된 전체 인원
df['전체인원'] = df['사망자수'] + df['부상자수']
df.head()

df.groupby(['발생지시도'])['사망자수'].sum().sort_values(ascending=False)

group_df = df.groupby(['발생지시도'])[['사망자수', '부상자수', '전체인원']].sum().sort_values(by='사망자수', ascending=False)
# sort_values 그냥 쓰면 정렬하는 기준이 뭔지 몰라서 에러남때문에 by라는 argument를 통해서 기준이 될 열을 지정해준다.
group_df

group_df.info()
# 이 경우, index를 기준으로 info가 출력되는 것이 아니라, 기준이 되는 값을이 출력된다.

group_df.T

한글 깨짐 방지

import matplotlib as mpl
import matplotlib.pyplot as plt
 
%config InlineBackend.figure_format = 'retina'
 
!apt -qq -y install fonts-nanum
 
import matplotlib.font_manager as fm

fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic') 
mpl.font_manager._rebuild()

그래프를 시각화해보자

group_df.T.plot()

import matplotlib.pyplot as plt

plt.style.use('ggplot')
group_df.T.plot.bar()
plt.show()

plt.style.use('ggplot')
group_df.T.plot.barh()
plt.show()

 

LIST