Python/데이터분석 실습

[DACON_101] Lv.1 의사결정회귀나무로 따릉이 데이터 예측하기

dori_0 2022. 2. 2. 23:28

https://dacon.io/competitions/open/235698/overview/description

▶ [ Lv.1 의사결정회귀나무로 따릉이 데이터 예측하기 ] 를 공부했습니다.


 

▶ EDA _ 탐색적 자료 분석

1. 라이브러리, 파일 불러오기

데이터분석을 하기 위해 pandas 라이브러리와 파일을 불러오기

import pandas as pd

train = pd.read_csv('C:/data/train.csv')
test = pd.read_csv('C:/data/test.csv')
 

2. 행, 열 개수 관찰하기

shape를 이용해 train, test의 행/열 개수 파악

train.shape
# 행 1459개, 열 11개
test.shape
# 행 715개, 열 10개
 

 

3. 데이터 확인하기

head() 메서드를 이용해 데이터의 상단부분 확인

( 하단 부분을 확인하고 싶다면 tail() 메서드 이용하기! )

train.head(10)
test.head(10)
 
 

다음과 같이 확인이 된다.

 

 

4. 결측치 확인하기

isnull() 메서드를 사용해 train과 test의 NAN를 확인

print(train.isnull()) # 데이터의 결측치 여부 확인
train.isnull().sum() # 데이터의 열별 결측치 수 확인
print(test.isnull())
test.isnull().sum()
 
데이터의 열별 결측치 수 ( train )
데이터의 열별 결측치 수 ( test )

 

▶ 전처리

1. 데이터의 기본 정보 확인하기

column, 결측치, 데이터 타입 등을 확인

train.info()
test.info()
 

 

2. 결측치 삭제, 대체

dropna() - 결측치를 갖는 행을 DataFrame 객체에서 삭제

fillna() - 모든 결측치를 인자값으로 대체

train = train.dropna()
test = test.fillna(0)

print(train.isnull().sum())
print(test.isnull().sum())
 

train은 dropna()를 이용해서 결측치 갖는 행을 삭제 했고 test는 fillna()를 이용해 모든 결측치를 0으로 대체했다.

train, test의 열별 결측치를 다시 확인해보니 제대로 적용 된 것이 보인다.

 

▶ 모델링

※ 의사결정나무란?

  • 어느 대안이 선택될 것인가라는 것과 일어날 수 있는 불확실한 상황 중에서 어떤 것이 실현되는가라는 것에 의해 여러 결과가 생긴다는 상황을 나뭇가지와 같은 모양으로 도식화한 것
  • 결론에 도달할 때까지 연속적인 '예/아니오' 질문들을 반복해 최종 의사결정을 하는 방법
  • 각 변수에 따라 어떤 확률을 가지는지 확인 가능

 

1. 의사결정나무 모델 선언

sklearn.tree에서 DecisionTreeRegressor 모듈 불러오기

from sklearn.tree import DecisionTreeRegressor
model = DecisionTreeRegressor()
 

 

2. 의사결정나무 모델 훈련

모델을 선언한 후, fit(X, Y) 함수를 사용해 모델 훈련시키기

X 데이터 - 예측에 사용되는 변수

Y 데이터 - 예측 결과 변수

X_train = train.drop(['count'], axis=1)
Y_train = train['count']

model = DecisionTreeRegressor()
model.fit(X_train, Y_train)
 

 

3. 테스트 예측

훈련된 모델로 test 파일을 예측해보기

pred = model.predict(test)
 

 

4. 저장하기

submission = pd.read_csv('C:/data/submission.csv')
submission['count'] = pred
submission.to_csv('sub.csv',index = False)
 

이렇게 저장하면 된다!