이대로만 하면 2유형 40점 만점!
https://www.kaggle.com/code/agileteam/t2-6-bike-regressor
import pandas as pd
train = pd.read_csv("/kaggle/input/bike-sharing-demand/train.csv")
test = pd.read_csv("/kaggle/input/bike-sharing-demand/test.csv")
#target: count컬럼
#EDA
# print(train.info())
# print(train.head())
# print(test.info())
# print(test.head())
'''
train과 test의 컬럼 맞추기 ...
없애야 할 독립변수: casual, registered
종속변수: train['count']
결측치 없음
datetime pd.to_datetime해주어야함
레이블인코딩 필요없음
이상치 확인 .. 없음!
# print(train['season'].unique())
# print(train['holiday'].unique())
# print(train['workingday'].unique())
# print(train['weather'].unique())
'''
# #데이터 전처리 - 결측치 처리 : 생략!
# for column in train.columns:
# mode_val = train[column].mode()[0]
# train[column].fillna(mode_val, inplace = True)
# for column in test.columns:
# mode_val = test[column].mode()[0]
# test[column].fillna(mode_val, inplace = True)
train['datetime'] = pd.to_datetime(train['datetime'])
test['datetime'] = pd.to_datetime(train['datetime'])
train['year'] = train['datetime'].dt.year
train['month'] = train['datetime'].dt.month
train['day'] = train['datetime'].dt.day
train['dayofweek'] = train['datetime'].dt.dayofweek
train['weekend'] = train['dayofweek'].apply(lambda x: 1 if x>=5 else 0)
test['year'] = test['datetime'].dt.year
test['month'] = test['datetime'].dt.month
test['day'] = test['datetime'].dt.day
test['dayofweek'] = test['datetime'].dt.dayofweek
test['weekend'] = test['dayofweek'].apply(lambda x: 1 if x>=5 else 0)
#데이터 전처리 - 레이블인코딩
# from sklearn.preprocessing import LabelEncoder
# le = LabelEncoder()
# for column in train.select_dtypes(include = ['object']).columns:
# train[column] = le.fit_transform(train[column])
# for column in test.select_dtypes(include = ['object']).columns:
# test[column] = le.fit_transform(test[column])
'''
datetime에서 year, month, dayofweek만 사용!
'''
print(train.head())
print(test.info())
#데이터 분할
from sklearn.model_selection import train_test_split
X = train.drop(columns = ['datetime','casual', 'registered', 'count'])
y = train['count']
x_train, x_test, Y_train, Y_test = train_test_split(X, y, test_size = 0.2, random_state = 11)
#모델링, 학습, 예측
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(n_estimators = 20, max_depth = 20, random_state = 11)
rfr.fit(x_train, Y_train)
pred1 = rfr.predict(x_test)
# 예측 성능 평가
from sklearn.metrics import mean_squared_error, r2_score
mse = mean_squared_error(Y_test, pred1)
rmse = mse**0.5
print(rmse)
r2 = r2_score(Y_test, pred1)
print(r2)
# 테스트데이터로 예측
test_X = test.drop(columns = ['datetime'])
pred2 = rfr.predict(test_X)
#결과 데이터 생성 및 확인
pd.DataFrame({'datetime': test['datetime'], 'pred': pred2}).to_csv('result.csv', index= False)
result = pd.read_csv('result.csv')
print(result)
데이터 전처리 반복문으로 한번에 !
1. 결측치 처리
for column in df.columns:
mode_value = df[column].mode()[0]
df[column].fillna(mode_value, inplace = True)
2. 레이블 인코딩
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for column in df.select_dtypes(include = [‘object’]).columns:
df[column] = le.fit_transform(df[column])
'빅데이터분석기사_실기 > 제2유형: 데이터 분석' 카테고리의 다른 글
제 2유형 [회귀 Regression] Insurance (0) | 2024.07.16 |
---|---|
제 2유형 [회귀 Regression] House Prices (0) | 2024.07.16 |
제 2유형 [분류 Classification] 성인 인구소득 (범주형) (0) | 2024.07.16 |
제 2유형 [분류 Classification] 당뇨병 (0) | 2024.07.16 |
제 2유형 [분류 Classification] 타이타닉 (0) | 2024.07.16 |