빅데이터분석기사 실기 2유형 (Python)

송범·2024년 11월 19일

데이터 자격 검정 사이트에서 제공해주는 실습 환경

https://dataq.goorm.io/exam/3/%EC%B2%B4%ED%97%98%ED%95%98%EA%B8%B0/quiz/1

분류 모델 (RandomForestClassifier)

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)

회귀 모델(RandomForestRegressor)


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)

profile
BackEnd&Data Scientist가 되고 싶은 개발 기록 노트

0개의 댓글