개발자 L
주제 : Python &Machine Learning, Numpy, Pandas (파이썬과 머신러닝, 넘파이, 판다스)
데이터 : EM-DAT(The International Disaster Database) https://public.emdat.be/about
안녕하세요, 개발자L 입니다.
2022년 임인년 새해가 밝았습니다. 모두들 한해동안 이루고 싶은 목표 모두 이루시기를 바랍니다.
오늘부터 진행되는 [SS-P2201-000] 시리즈는 "파이썬 머신러닝 완벽 가이드(권철민, 2019)" 을 참고하여 공부한 내용입니다.
1. 우리들의 삶, 데이터
우리는 인지/자각하기전부터 수많은 데이터를 생성, 사용, 및 활용하며 살아가고 있습니다. 사람들마다 모두 각기 다른 생활패턴과 루틴으로 살아가지만, 구성/집단으로 보면 각 집단마다의 특성이 나타나듯이 데이터도 이와 같다고 생각합니다. 각각의 데이터만을 볼 때는 패턴/양상이 분명하게 나타나지 않지만, 적정양의 데이터들이 모이면 그 데이터의 특정 패턴/양상이 파악이 가능합니다.
결국은 우리가 데이터을 생산함에 따라, 그 데이터를 분석함으로서 숨겨진 우리들의 모습과 행동들을 예측하며, 패턴을 만들어 알고리즘화하는 것이 머신러닝 및 AI가 아닐까 화자는 생각합니다. 이 점이 우리가 데이터분석 공부를 하는 이유 중 하나라고 생각합니다.
2. 머신러닝(Machine Learning)
2.1. 그렇다면, 대체 머신러닝이란?
머신러닝이란 데이터기반의 패턴을 학습하고 결과를 예측하는 알고리즘을 통칭한다.
데이터 기반으로 통계적인 신뢰를 강화하고 예측 오류를 최소화하기위해 다양한 수학적 기법을 적용하여
데이터 내의 패턴을 스스로 인지하고 신뢰도있는 결과를 도출해내는것입니다.
- "파이썬 머신러닝 완벽 가이드" 권철민, 2019 -
2.2. 머신러닝의 종류
머신러닝은 크게 3가지로 나눠볼수 있습니다.
- Supervised Learing(지도학습)
- Un-supervised Learning(비지도학습)
- Reinforcement Learning(강화학습)
이와 관련된 내용은 차후 포스팅에서 충분히 다뤄질 예정이니 지금은 가볍게 종류만 파악하고 넘어가도록 하겠습니다.
2.3. 머신러닝의 맹점
최적의 머신러닝 알고리즘과 모델의 파라미터를 찾아서 최상의 Peformance(성능)을 내는것도 당연히 중요합니다. 하지만 머신러닝은 데이터기반으로 이뤄어지며, 다시말해 데이터의 의존성이 상당히 높기때문에 데이터에 따라 성능차이가 발생하게됩니다. 또한, 데이터 자체를 이해하고 효율적으로 가공, 처리, 추출함에 따라 머신러닝의 성능이 확연하게 차이가 발생합니다.
3. Numpy & Pandas
그래서 본격적으로 머신러닝 알고리즘에 대해 공부하기전에 Numpy(넘파이)와 Pandas(판다스)에 대한 이해가 필요합니다. 이는 앞서 언급한 데이터를 효율적으로 가공, 처리, 추출하기 위한 툴이며, Scikit-learn (sklearn, 사이킷런)은 API코드는 넘파이기반에서 왔기때문에 기본프레임워크 이해가 필요합니다. 단, 모든 넘파이와 판다스를 모두 이해하고 머신러닝을 공부하겠다는 접근법은 좋지않습니다. 왜냐면 그양이 너무 방대하기때문입니다. 기본적인 특성과 자주 사용하는 기능에 대한 방법만 익인 후, 필요하거나 모르는 부분이 있을때 구글링하는 것이 바람직합니다.
3.1. Numpy(넘파이)
기본적인 numpy 타입, 데이터타입확인, 크기변경 및 슬라이싱 하는 방법입니다.
import numpy as np
A = np.arange([1,2,3])
type(A) # A 타입확인
dtype(A) # A 데이터타입확인
A.astype('float64') # A 데이터타입을 'float64'변경
B = np.arange(10) # 특정크기 또는 특정차원은 연속된 값으로 생성
np.arange(start =1 , stop = 10) # 특정크기 또는 특정차원은 연속된 값으로 생성
C = np.zeros((3,2), dtype = "int32") # zeros값으로 특정차원 생성
D = C.reshape(2,3) # 크기변경
E = D[1:4] # 슬라이싱, 원하는 데이터만 가져오기
F = np.transpose(E) #전치행렬
row와 column 구분참조(그림출처 : 파이썬 머신러닝 완벽가이드, 권철민, 2019)
3.2. Pandas(판다스)
파이썬에서 데이터 처리로 많이 사용하는 라이브러리인, Pandas(판다스)도 다양한 기능들이 있습니다. 하지만, 단순히 다양한 기능들을 나열하는 것보다는 실제 데이터를 활용해서 직접 데이터 핸들링을 해보시면 이해하는데 도움이 될 것같습니다. 그래서 EM-DAT 사이트를 소개해드립니다.
3.2.1. 데이터 다운로드
EM-DAT 소개 및 데이터 다운로드 상세방법은 "More" 참조
1. EM-DAT 소개
1988년 Centre for Research on the Epidemiology of Disasters (CRED)는 해당 데이터베이스를 만들기 시작하였으며, 본 데이터를 통해서 세계에서 발생하는 재해 및 그 피해규모 등을 파악 할 수 있습니다. 본 사이트의 주된 목적은 국내 및 국제수준에 인도적 활동을 목적으로 재난대비을 위한 의사결정지원, 취약성 평가 등 객곽적인 자료를 제공입니다.
2. EM-DAT 데이터 다운로드
해당 사이트(EM-DAT)는 회원에게만 데이터제공을 하기때문에 가입신청이 필요합니다. '20년의 경우에만 해도 데이터다운로드 버튼으로 모든 데이터를 다운받았으나, '21년부터는 아래 그림처럼 본인이 관심가지는 재해유형, 발생지역, 연도 등으로 사전에 필터링하여 데이터를 제공받을 수 있습니다. 또한 시각화(지도, 막대그래프)도 지원합니다.
3.2.2. 데이터 확인
다운받은 엑셀파일을 확인해보면, 1~6 row에 분석에 필요없는 메타정보가 기입되어있습니다.
엑셀에서 손쉽게 삭제하는 방법도 있지만, 코드내에서 해당 부분을 제외하고 불러와서 작업을 진행해보록 하겠습니다. (참고: 구글의 코랩 사용)
import pandas as pd
## 데이터 경로 설정
DIR = "/content/gdrive/My Drive/Colab Notebooks/Data/"
DIR_DATA = DIR + "emdat_public_2022_01_02.xlsx"
## Skiprows 속성을 통해서 원하는 데이터만 불러오기
data = pd.read_excel(DIR_DATA, skiprows = 6)
data.head(10)
3.2.3. 데이터 핸들링
원본데이터는 전 세계의 재해정보를 모두 포함하고 있으나, 제가 관심가지는 국가(한국, KOR) 정보만 추출하도록 하겠습니다. .info()를 통해서 데이터의 개수 및 데이터타입을 확인할 수 있습니다. 또한, .describe()를 통해 기본적인 4분위값, 평균, 편차값 등을 손쉽게 확인이 가능합니다.
KOR = data[data['ISO']=="KOR"]
KOR.info()
KOR.describe()
여기서 각 재난 종류별로 또는 특정 재난(홍수 또는 산불) 등의 나눠서 구분하는것이 실질적으로 의미가 있는 분석이겠지만, 편의상 연도별로 재난종류에 관계없이 발생건수만을 표현해보록 하겠습니다. 이를 표현하기위해 KOR에 하나의 행을 만들어줌(NoC: Number of Occurence)
## 연도별 재난발생현황(재난특성구분X)
KOR.loc[:,"NoO"]= 1
## .groupby를 통해서 데이터처리
KOR_summary = KOR.groupby(['Year'])[['Total Deaths', 'No Injured', 'No Affected','No Homeless', "Total Damages ('000 US$)", 'NoO']].sum()
KOR_summary.reset_index(level = ["Year"], inplace= True)
마지막으로, 해당 데이터를 막대그래프로 시각화 작업까지 진행하도록 하겠습니다.
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
ax1.bar(KOR_summary['Year'],KOR_summary["NoO"])
ax2 = ax1.twinx()
ax2.plot(KOR_summary['Year'],KOR_summary["Total Damages ('000 US$)"], color= 'red')
fig.tight_layout()
plt.show()
### Reference
- 파이썬 머신러닝 완벽가이드, 권철민, 2019
- EM-DAT(The International Disaster Database) https://public.emdat.be/about
'Python' 카테고리의 다른 글
[Python] 도표 중첩 (0) | 2023.01.27 |
---|---|
[Python] 점프투파이썬(기초) 정리 (2) | 2023.01.16 |
[Python] 데이터 병합 - glob.glob() / pd.concat() (0) | 2022.02.02 |
[Google Colaboratory] 코랩으로 GPU, TPU 사용법 (0) | 2022.01.31 |
[Python]os 또는 glob를 활용한 파일리스트 가져오기 (0) | 2020.11.08 |