데이터 자격 검정 사이트에서 제공해주는 실습 환경
https://dataq.goorm.io/exam/3/%EC%B2%B4%ED%97%98%ED%95%98%EA%B8%B0/quiz/1
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
# 사용자 코딩
#1. 데이터 유형 파악
#print(train.info())
#print(test.info())
#2. 전처리 과정
# (1) X, Y train/test set 분리하기
X_train = train.drop(["회원ID","성별"],axis=1)
y = train['성별']
X_test = test.drop('회원ID',axis=1)
# print(X_train.shape,y.shape,X_test.shape) 계속 shape 확인해주기!
# (2) 결측치 처리하기
X_train['환불금액'] = X_train['환불금액'].fillna(0)
X_test['환불금액'] = X_test['환불금액'].fillna(0)
# (3) 수치형 변수 스케일링
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
num_col = X_train.select_dtypes(exclude="object").columns
X_train[num_col] = ss.fit_transform(X_train[num_col])
X_test[num_col] = ss.transform(X_test[num_col])
# (4) 범주형 변수 인코딩하기
# train : 피자 치킨 콜라 사이다 -> 0 1 2 3
# test : 피자 치킨 콜라 사이다 맥주 -> 0 1 2 3 4
# print(set(X_test["주구매상품"]) - set(X_train["주구매상품"]))
# print(set(X_test["주구매지점"]) - set(X_train["주구매지점"]))
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
X_train['주구매상품'] = encoder.fit_transform(X_train['주구매상품'])
X_test['주구매상품'] = encoder.transform(X_test['주구매상품'])
X_train['주구매지점'] = encoder.fit_transform(X_train['주구매지점'])
X_test['주구매지점'] = encoder.transform(X_test['주구매지점'])
# 3 . 데이터 분리
from sklearn.model_selection import train_test_split
X_train,X_val,y_train,y_val = train_test_split(X_train,y,test_size=0.2,stratify=y)
# 4. 모델 학습 및 검증
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train,y_train)
y_val_pred = model.predict(X_val)
# 5. 평가
from sklearn.metrics import roc_auc_score
auc_score = roc_auc_score(y_val,y_val_pred)
print(auc_score)
# 6. 결과 저장
y_pred = model.predict(X_test)
result = pd.DataFrame(y_pred,columns = ['pred'])
result.to_csv("result.csv",index=False)
# 7. 생성 결과 확인
result = pd.read_csv("result.csv")
print(result)
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/JEunJin/BigData_python/master/bigdata_csvfile/used_cars_price_data.csv')
# print(df.info())
# print(df.head())
# 데이터 전처리 (결측값, 라벨인코딩)
df['fuel_type'].fillna(df['fuel_type'].mode()[0],inplace=True)
df['accident'].fillna(df['accident'].mode()[0],inplace=True)
df['clean_title'].fillna(df['clean_title'].mode()[0],inplace=True)
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
encoder = LabelEncoder()
df['brand']=encoder.fit_transform(df['brand'])
df['model']=encoder.fit_transform(df['model'])
df['milage']=encoder.fit_transform(df['milage'])
df['fuel_type']=encoder.fit_transform(df['fuel_type'])
df['engine']=encoder.fit_transform(df['engine'])
df['transmission']=encoder.fit_transform(df['transmission'])
df['ext_col']=encoder.fit_transform(df['ext_col'])
df['int_col']=encoder.fit_transform(df['int_col'])
df['accident']=encoder.fit_transform(df['accident'])
df['clean_title']=encoder.fit_transform(df['clean_title'])
df['price']=encoder.fit_transform(df['price'])
# print(df.info())
# train 3800 , test 209
train = df.iloc[:3800,:]
test = df.iloc[3800:,:]
# print(train.info())
# print(test.info())
# 데이터 분할
from sklearn.model_selection import train_test_split
X = train.drop(['price'],axis=1)
y = train['price']
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)
# 모델링 및 학습
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(n_estimators=120,max_depth=15)
rfr.fit(X_train,y_train)
pred1 = rfr.predict(X_test)
# 모델 성능평가
from sklearn.metrics import mean_squared_error
import numpy as np
mse = mean_squared_error(y_test,pred1)
print(mse) # mse : 129369.88813380101
rmse = np.sqrt(mse)
print(rmse) # rmse : 359.6802581930248
# 최종 결과 예측
test_X_data = test.drop('price',axis=1)
pred2 = rfr.predict(test_X_data)
# 결과 제출 및 확인
pd.DataFrame({'price':pred2}).to_csv("result.csv",index=False)
result = pd.read_csv("result.csv")
print(result)