본문 바로가기

Dacon 파이썬 프로젝트

1028 Lv1. 의사결정회귀나무로 따릉이 데이터 예측하기

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

1. EDA

(1) 파이썬 라이브러리 불러오기

    import [라이브러리] as [사용할 이름]
    : 데이터 분석을 위해 사용할 파이썬 라이브러리 불러오기 (matplotlib, pandas, numpy)
    ex) import numpy as np

(2) 파이썬 파일 불러오기(read_csv)

    import pandas as pd
    data = pd.read_csv('파일경로/파일이름.csv')

    : 데이터가 있는 csv 파일을 불러오기 위해선 pandas 라이브러리 불러와야함
      read_csv() 함수로 원하는 파일을 불러옴 -> pandas의 DataFrame 자료형으로 볼러옴 

(3) 파이썬 행 열 갯수 관찰하기(shape)

 [DataFrame 변수명].shape

 멤버 변수 shape : Dataframe의 행과 열 갯수에 대한 정보 

 실습 : train.shape
        test.shape

(4) 파이썬 데이터 확인하기(head())

  import pandas as pd
  train = pd.read_csv('data/train.csv')
  train.head() # train 데이터의 상단 5개 행 출력

  head() : 데이터의 상단 부분만 출력하는 함수
  tail() : 데이터의 하단 부분만 출력하는 함수 

  실습: import pandas as pd
        train = pd.read_csv('data/train.csv') 
        test = pd.read_csv('data/test.csv')
        train.head(10) #상위 10개 데이터 불러오기 

(5) 파이썬 결측치 확인하기(is_null() )

  import pandas as pd
  import numpy as np

  df = pd.DataFrame({
      'name' : ['kwon', 'park', 'kim'],
      'age' : [30, np.nan, 19],
      'class' : [np.nan, np.nan, 1]
  }]

  df.isnull()

  결측치(missing value) : 값이 없는(NULL, NA) 데이터, pandas에서는 NaN

  isnull() : DataFrame에서 결측치가 있는 지 없는 지 검사(True, False)
  sum() : isnull() 뒤에 sum() 함수 추가하면 각 열 별 결측치의 수 확인 가능

#실습코드 import pandas as pd train = pd.read_csv('data/train.csv') test = pd.read_csv('data/test.csv') print(train.isnull()) print('\n------------------------train.csv 각 열 별 결측치 수------------------------\n') print(train.isnull().sum())

2. 전처리

(1) 파이썬 데이터 기본 정보 확인하기(info())

  df.info()

  info() : 피쳐들의 기본 정보(결측치와 데이터 타입) 확인 가능
           -> 결측치 있을 시 모델링 전에 처리 해야 함.

  실습 코드
  : test.info()
    train.info()

(2) 파이썬 결측치 삭제, 대체(dropna, fillna)

DataFrame.dropna()
DataFrame.fillna()

dropna() : 결측치를 갖는 행을 Dataframe 에서 삭제
fillna() : 모든 결측 치를 인자 값으로 대체 가능 

#실습 코드
import pandas as pd

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

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

3. 모델링

(1) 파이썬 scikit-learn

  import sklearn
  from sklearn.tree import DecisionTreeClassifier

  :scikit-learn 라이브러리 불러오기 

(2) 파이썬 모델 개념(의사결정나무)

  의사 결정 나무 : 결정 트리는 의사 결정 규칙과 그 결과들을 트리 구조로 도식화 한 의사 결정 지원 도구의 일종

                   각 행 마다 하나의 피쳐를 정해서 해당 피쳐의 값에 대해 특정한 하나의 값을 

                   정한다면 모든 행들을 두 개의 노드로 이진 분류(Binary decision rule) 가능

                  * 특정 값을 정하는 의사 결정 나무 -> 한쪽 방향으로 쏠리게 하는 특정 값 찾기 (불순도 계산을 통해 찾음)


  import sklearn
  from sklearn.tree import DecisionTreeClassifier

(3) 파이썬 모델선언(의사결정나무)

from [라이브러리] import [모듈]
model = 모듈명()

[실습 코드]
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()

(4) 파이썬 모델 훈련(의사결정 나무)

  fit(X, Y) : 모델을 훈련 시키는 함수 (X: 예측에 사용되는 변수, Y:예측결과 변수)

  X_train = train.drop(['제외할컬럼명'], axis=1)
  Y_train = train['예측할컬럼명']

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

  #실습코드
  X_train = train.drop(['count'], axis=1) #'count' 피쳐를 가진 열을 제외한 데이터
  Y_train = train['count'] #'count' 피쳐의 데이터 

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

(5) 파이썬 테스트예측

  [할당할 array] = mode.predict(test)

  predict() : 훈련된 모델에서 predict() 메서드에 예측하고자 하는 data를 인자로 넣어 결과 array 할당 

  [실습코드]
  predict = model.predict(test)
  predict[:5] #상위 5개만 출력 

(6) 파이썬 to_csv() (제출파일생성)

#submission.csv 파일 df 파일로 불러오기
submission = pd.read_csv('data/submission.csv')

#submission df 파일의 count 피쳐에 예측결과 할당하기
submission['count']= pred

#제출파일 생성하기
submission.to_csv('sub.csv', index=False)

Lv1. 복습 코드

    import pandas as pd

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

    train.head()
    test.head()

    train.shape
    test.shape

    train.info()
    test.info()

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

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


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

    pred = model.predict(test)

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