본문으로 바로가기

 

빅데이터 분석기사 실기시험에서 작업형 2번 문제가 회귀형으로 나오는 경우, 작성가능한 프레임

 <목표> 2018년 연봉액 맞추기 

 

환경구축

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

from pandas.plotting import scatter_matrix

warnings.filterwarnings('ignore')  # 경고창 무시
plt.rcParams['font.family'] = 'Malgun Gothic' # matplotlib 한글 깨짐 처리

 

데이터 불러오기

# Load Data

# picher_file_path = '../data/picher_stat_2017.csv'
df = pd.read_csv('picher_stat_2017.csv')
df.head()

 

데이터 탐색하기

df.info()
# 데이터 상관관계 파악

df.corr()
# 데이터 상관관계 시각화

plt.figure(figsize=(16,9))
sns.heatmap(df.corr(), cmap='gray')
# y값 분포확인

sns.histplot(df['연봉(2018)'], kde=True, bins=100)
# 변수(features)로 사용가능한 칼럼 확인
df.columns
# 연속형, 범주형 칼럼 구분하기
col_cont = []
col_cat = []
# 사용할 변수 정의

features = [
#     '선수명', 
    '팀명', 
    '승', 
    '패', 
    '세', 
    '홀드', 
    '블론', 
    '경기', 
    '선발', 
    '이닝', 
    '삼진/9',
    '볼넷/9', 
    '홈런/9', 
    'BABIP', 
    'LOB%', 
    'ERA', 
    'RA9-WAR', 
    'FIP', 
    'kFIP', 
    'WAR',
#     '연봉(2018)', 
    '연봉(2017)'
]
# 사용하고 있는 변수(features) 확인

len(features)
# X값 분포확인

plt.figure(figsize=(20,20))
for index, col_name in enumerate(features):
    plt.subplot(5,4,index+1)
    sns.histplot(df[col_name])

 

데이터 전처리

# Label Encdoer (le) : 문자열로 구성된 칼럼이 있는 경우

# from sklearn.preprocessing import LabelEncoder
# df.loc[:, 'col_name'].apply(LabelEncoder().fit_transform)
# df['col_name'].LabelEncoder.fit_transform(df['col_name'])
# Regualr Expression (regex) : 특정한 규칙을 가진 문자열의 집합을 변환

# import re
# d['col_name'].map(lambda x: re.sub(r'before', 'after', x))
# NaN : 결측치 제거/치환

# df = df.replace('nan', np.nan)
# df.isnull().sum()
# df = df.fillna(0)
# df.loc[:, ['col_name']] = df.loc[:, ['col_name']].fillna(0)
# 선수명 칼럼 분리
df_pitcher = df.iloc[:, 0]
df = df.drop('선수명', axis=1)
# 팀명을 라벨인코딩 적용

df.loc[:, ['팀명']] = df.loc[:, ['팀명']].apply(LabelEncoder().fit_transform)
# 데이터프레임 표준화
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(df)
X = df[features]
y = df['연봉(2018)']
# y값 log적용
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
sns.histplot(y)
plt.subplot(1,2,2)
sns.histplot(np.log1p(y))

y = np.log1p(y)
train_set와 test_set 분할

from sklearn.model_selection import train_test_split
X_train, X_Test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

 

모델정의 및 평가

from sklearn.ensemble import RandomForestReegressor
from xgboost import XGMRegressor

from sklearn.metrics import mean_absolute_error, mean_squared_error
rfr = RandomForestRegressor()
rfr.fit(X_train, y_train)
print('RFR ACC.:', rfr.score(X_train, X_test), rfr.score(y_train, y_test)

p_test = predict(X_test)
print('p_test MAE.:', mean_absolute_error(y_test, p_test))
print('p_test MSE.:', mean_squared_error(y_test, p_test))
print('p_test RMSE.:', np.sqrt(mean_squared_error(y_test, p_test)))
xgb = XGBReressor()
xgb.fit(X_train, y_train)
print('XGBR ACC.:', xgb.score(X_train, y_train), xgb.score(X_test, y_test))

p_test = xgb.predict(X_test)
print('p_test MAE.:', mean_absolute_error(y_test, p_test))
print('p_test MSE.:', mean_squared_error(y_test, p_test))
print('p_test RMSE.:', np.sqrt(mean_squared_error(y_test, p_test)))

 

 


#빅데이터분석기사후기 #빅데이터분석기사실기 #빅데이터분석기사필기pdf #빅데이터분석기사합격률 #빅데이터분석기사쓸모 #빅데이터분석기사2022일정 #빅데이터분석기사전망 #빅데이터분석기사실기 #빅데이터분석기사실기파이썬 #빅데이터분석기사실기파이썬 #빅데이터분석기사실기문제 #빅데이터분석기사실기합격률 #빅데이터분석기사실기준비 #빅데이터분석기사필기기출문제 #빅데이터분석기사필기복원 #빅분기기출 #빅분기정리 #빅분기난이도 #빅분기필기복원