250x250
Link
나의 GitHub Contribution 그래프
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] 데이터 에듀 ADP 실기 모의고사 파이썬 ver. (정형 데이터마이닝) 본문

adp 실기/기출문제

[Python] 데이터 에듀 ADP 실기 모의고사 파이썬 ver. (정형 데이터마이닝)

ㅅ ㅜ ㅔ ㅇ 2022. 9. 8. 17:07
728x90

사용 데이터 : weatherAUS.csv

 

변수 데이터 형태 설명
Date 날짜형 날짜
Location 범주형 장소
MinTemp 수치형 최저 온도 (섭씨)
MaxTemp 수치형 최고 온도 (섭씨)
Rainfall 수치형 하루 동안 기록된 강우량
WindGustDir 범주형 자정까지 24시간 동안 가장 강한 바람이 부는 방향
WIndGustSpeed 수치형 24시간에서 자정 사이 가장 강한 바람 속도 (km/h)
WindDir9am 범주형 바람 방향
WindDIr3pm 범주형 바람 방향
WindSpeed9am 수치형 평균 10분 이상 풍속
WindSpeed3pm 수치형 평균 10분 이상 풍속
Humidity9am 수치형 습도
Humidity3pm 수치형 습도
Pressure9am 수치형 대기압
Pressure3pm 수치형 대기압
Cloud9am 범주형 구름으로 하늘이 가려진 정도
Cloud3pm 범주형 구름으로 하늘이 가려진 정도
Temp9am 수치형 온도
Temp3pm 수치형 온도
RainToday 범주형 24시 ~ 9시 강수량 1mm 초과할 경우 1, 아니면 0
RainTomorrow 범주형 목표 변수로 내일 비가왔는지 물음 (비안옴 : 0, 비 옴 : 1)

 

1. 데이터의 요약값을 보고 NA값이 10,000개 이상인 열을 제외하고 남은 변수 중 NA값이 있는 행을 제거하시오. 그리고 AUS 데이터의 Date 변수를 Date형으로 변환하고, 전처리가 완료된 weather AUS 데이터를 train(70%), test(30%) 데이터로 분할하시오. (set.seed(6789)를 실행한 후 데이터를 분할하시오.)

 

import pandas as pd
df = pd.read_csv('../data/weatherAUS.csv')
df.head()

 

 

df.isna().sum()

 

 

# 결측치가 10000개 이상인 열 삭제
df.drop(columns=['WindDir9am','Pressure9am', 'Pressure3pm', 'Cloud9am', 'Cloud3pm'], axis=1, inplace=True)
df.head()

 

 

 

df.dropna(inplace=True)
df.isna().sum().sum()

#0


# Date 변수를 Date형으로 변환
df['Date'] = pd.to_datetime(df['Date'])
df.info()

 

 

from sklearn.model_selection import train_test_split

X = df.drop(columns=['RainTomorrow','Date'])
y = df['RainTomorrow']

X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=6789)
print(X_train.shape, X_test.shape)
print(y_train.shape, y_test.shape)

# (90003, 14) (38573, 14)
# (90003,) (38573,)

 

 

 

2. train데이터로 종속변수인 RainTomorrow(다음날의 강수 여부)를 예측하는 분류모델을 3개 이상 생성하고, test 데이터에 대한 예측값을 csv파일로 각각 제출하시오.

속도 측면에서 LinearRegression, 정확도 측면에서 XGBClassifier, 마지막으로 RandomForestClassifier을 선택하여 모델을 생성한다. 

 

from sklearn.preprocessing import LabelEncoder

features = ['Location','WindGustDir','WindDir3pm', 'RainToday']

for feature in features:
    le = LabelEncoder()
    X_train[feature] = le.fit_transform(X_train[feature])
    X_test[feature] = le.transform(X_test[feature])
    
le = LabelEncoder()
y_train = le.fit_transform(y_train)
y_test = le.transform(y_test)

 

LabelEncoder를 사용하여 범주형 변수 변환

 

from sklearn.linear_model import LogisticRegression
import time

lr = LogisticRegression()
tic = time.time()
lr.fit(X_train, y_train)
toc = time.time()

print("Time : {}".format(toc-tic))

lr_pred = lr.predict(X_test)
lr_model = pd.DataFrame({'prediction':lr_pred})
lr_model.to_csv('Linear_Regression.csv',index=False)

# Time : 0.5599298477172852

 

from xgboost import XGBClassifier

xgb = XGBClassifier()
tic = time.time()
xgb.fit(X_train, y_train)
toc = time.time()

print('Time : {}'.format(toc-tic))

xgb_pred = lr.predict(X_test)
xgb_model = pd.DataFrame({'prediction': xgb_pred})
xgb_model.to_csv('XGB.csv', index=False)

# Time : 2.3415465354919434

 

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier()
tic = time.time()
rf.fit(X_train, y_train)
toc = time.time()

print("Time : {}".format(toc-tic))

rf_pred = rf.predict(X_test)
rf_model = pd.DataFrame({'prediction':rf_pred})
rf_model.to_csv('RandomForest.csv', index=False)

# Time : 13.661814451217651

예상대로 시간은 LinearRegressor가 가장 적게 걸렸으며, RandomForest모델이 가장 오래 걸렸다.

 

 

3. 생성된 3개의 분류모델에 대해 성과분석을 실시하여 정확도를 비교하여 설명하시오. 또, ROC curve를 그리고 AUC값을 산출하시오.

 

import matplotlib.pyplot as plt
from sklearn.metrics import plot_roc_curve, roc_auc_score

# LogisticRegression
plot_roc_curve(lr, X_test, y_test)
plt.show()

 

로지스틱 회귀분석의 AUC : 0.82

 

plot_roc_curve(xgb, X_test, y_test)
plt.show()

 

 

plot_roc_curve(rf, X_test, y_test)
plt.show()

 

 

AUC 값은 XGB가 0.88로 가장 높았으며, 그 다음이 RandomForest가 0.87로 높았음

728x90
Comments