Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

카테고리 없음

[Weekly DA!] 2017년 자연재해 피해는 어느 지역이 가장 심했을까?

Kellyyyy 2019. 10. 3. 21:44

안녕하세요.

태풍 '미탁'이 한반도를 휩쓸었어요.

피해보신 분들, 하루 빨리 복구되길 진심으로 바랄게요.

 

이번주는 자연재해 관련 데이터를 분석해보려고 해요.

 


1. DataSet 구하기

 

국가통계포털 > 주제별통계 > 사회 > 자연재해현황

 

①시도별 재해현황

②시도별 피해복구액 

2015~2017년의 데이터가 수집돼있어요.

 

최신데이터를 사용하기 위해

'시점' 탭에서 2017년만 선택한 후, 다운로드했어요.

 

 


 

2. 데이터 전처리

import pandas as pd

def data_preprocessing(path) :
	
    # 1. 인덱스 처리
    data = pd.read_excel(path, index_col = 0) 
   
    # 2. 합계 행 제거
    data = data.drop('합계')
   
    # 3. 데이터 스케일 축소
    data['2017'] = data['2017']*0.001
    
    return data
    
num_data = data_preprocessing('시도별_피해현황_20191003172502.xlsx')
amount_data = data_preprocessing('시도별_피해복구액_20191003172524.xlsx')

 

① 지역명 index 처리

 

데이터 정리를 위해

지역명을 인덱스로 만들었어요.

 

read_excel() 함수의 index_col 옵션을 사용했습니다. 

 

index_col = '인덱스 컬럼 번호'

 

② '합계' 행 제거

 

개별 시/도의 데이터를 사용할 것이기 때문에

합계 행은 지워주었습니다.

 

drop() 함수를 사용했어요.

 

drop('행 이름')

cf. 열을 지우고 싶다면?

drop(['열 이름'], axis = 1)

 

③ 값 스케일 축소

 

값의 크기가 크다보니 jupyter notebook에서 자

동으로 스케일을 줄여서(0.000001을 곱해주더라고요ㅜ)

그래프를 그리더라고요.

 

그러다보니 값을 직관적으로 파악하기 어려워서

jupyter notebook이 값을 줄이지 않도록

데이터에 0.001씩을 곱해주었습니다. 

 

data['2017] = data['2017'] *0.001

 


 

3. 데이터 시각화

import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
from matplotlib import style
style.use('ggplot')
%matplotlib inline

font_name = font_manager.FontProperties(fname='c:/Windows/Fonts/malgun.ttf').get_name()
rc('font', family=font_name)
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,6))
ax = plt.subplot()

# 1. x축 공유하도록 그래프 복사하기
ax2 = ax.twinx()

plt.title('시도별 자연재해 피해현황 및 피해복구액')

# 2. 막대그래프 그리기
ax.bar(num_data.index, num_data['2017'], label='피해액수(단위 : 백만원)')
ax2.plot(amount_data, label='피해복구액수(단위 : 백만원)', color ='green', marker="o")
ax.legend(loc='upper left')
ax2.legend(loc='upper right')

plt.show()

 

① x축 공유하도록 그래프 복사하기

 

피해현황과 피해액수 그래프를 한눈에 보여주기 위해서

x축을 공유하도록 그래프를 복사해줬습니다.

 

twinx() 함수를 사용했어요.

 

ax2 = ax.twinx()

cf. y축을 공유하는 그래프를 그리려면?

ax2 = ax.twiny()

 

② 막대 그래프 그리기

 

피해현황 그래프는 막대그래프로 그려주어

한눈에 알아보기 쉽도록 했어요.

 

bar()함수를 사용했습니다.

 

ax.bar(x값, y값, label='')

 


 

4. 결과 및 해석

① 지역별로 차이가 크며, 충북&경북의 피해가 도드라진다.

② 충북은 경북보다 피해액수는 작지만 피해복구액수는 거의 동일하다.

 

포스팅 봐주셔서 감사합니다.

다음주에는 Scatter 그래프를 그려볼게요!