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

송범·2024년 12월 7일

건물 데이터를 기반으로 건물의 난방 부하(에너지 효율성)를 예측하시오.

  • 예측할 컬럼 : Heat_Load(Very Low, Low, Medium, High, Very High)
  • 랜덤포레스트 분류 모델 사용 RandomForestClassifier
  • 모델의 성능은 Macro F1 - Score로 평가한다.
import pandas as pd


train = pd.read_csv("sample_data/energy_train.csv")
test = pd.read_csv("sample_data/energy_test.csv")

train['Heat_Load'] = train['Heat_Load'].map({
    "Very Low" : 0,
    "Low" : 1,
    "Medium" : 2,
    "High" : 3,
    "Very High" : 4,
})
print(train.info())
train

train['Roof'].value_counts()

# train["Roof"] = train["Roof"].map({
#     220.5 : "Big"
# })
train["Roof"] = train["Roof"].map({
    "Small" : 0,
    "Medium" : 1,
    "Large" : 2,
    "220.5" : 3,
})
test["Roof"] = test["Roof"].map({
    "Small" : 0,
    "Medium" : 1,
    "Large" : 2,
    "220.5" : 3,
})

train['Height'] = train['Height'].map({
    "Short" : 0,
    "Tall": 1,
})
test['Height'] = test['Height'].map({
    "Short" : 0,
    "Tall": 1,
})


train.Orient.unique()

train['Orient'] = train['Orient'].map({
    'South' : 0,
    'West' : 1,
    "East" : 2,
    "North" : 3,
})
test['Orient'] = test['Orient'].map({
    'South' : 0,
    'West' : 1,
    "East" : 2,
    "North" : 3,
})
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

train['Surf_Area']  = scaler.fit_transform(train[['Surf_Area']])
test['Surf_Area']  = scaler.transform(test[['Surf_Area']])


train['Surf_Area']  = scaler.fit_transform(train[['Surf_Area']])
test['Surf_Area']  = scaler.transform(test[['Surf_Area']])



train['Wall_Area']  = scaler.fit_transform(train[['Wall_Area']])
test['Wall_Area']  = scaler.transform(test[['Wall_Area']])

train['Cool_Load']  = scaler.fit_transform(train[['Cool_Load']])
test['Cool_Load']  = scaler.transform(test[['Cool_Load']])


from sklearn.model_selection import train_test_split

X = train.drop('Heat_Load',axis=1)
y = train['Heat_Load']

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import f1_score

model = RandomForestClassifier()

model.fit(X_train,y_train)

pred1 = model.predict(X_test)


print(f1_score(y_test,pred1,average="macro"))

pred2 = model.predict(test)
# pred2.map({
#        0: "Very Low" ,
#     1 : "Low",
#     2 : "Medium",
#     3 : "High",
#    4 :  "Very High",
# })
result = pd.DataFrame(pred2,columns=['pred']).to_csv("result.csv",index=False)

result = pd.read_csv("result.csv")

result['pred'] = result['pred'].map({
    0: "Very Low" ,
    1 : "Low",
    2 : "Medium",
    3 : "High",
   4 :  "Very High",
})

result.to_csv("result.csv",index=False)

result

통신사에서 고객에게 청구될 총 금액을 예측하시오.

  • 예측할 컬럼 : TotalCharges(총 금액)
  • 랜덤포레스트 회귀 모델 사용 RandomForestRegressor
  • 모델의 성능은 MAE(Mean Absolute Error)로 평가한다.

train = pd.read_csv("sample_data/churn_train.csv")
test = pd.read_csv("sample_data/churn_test.csv")
train['gender'] = train['gender'].map({
    "Male" : 0,
    "Female" : 1
})

test['gender'] = test['gender'].map({
    "Male" : 0,
    "Female" : 1
})
train = train.drop('customerID',axis=1)
test = test.drop('customerID',axis=1)

train['Partner'] = train['Partner'].map({
    "No" : 0,
    "Yes" : 1
})

test['Partner'] = test['Partner'].map({
    "No" : 0,
    "Yes" : 1
})
from sklearn.preprocessing import LabelEncoder

encoder = LabelEncoder()



def Encoder(data) : 
    train[data] = encoder.fit_transform(train[[data]])
    test[data] = encoder.transform(test[[data]])
                  
Encoder('Dependents')
Encoder('PhoneService')
Encoder('MultipleLines')
Encoder('InternetService')
Encoder('OnlineSecurity')
Encoder('OnlineBackup')
Encoder('DeviceProtection')
Encoder('TechSupport')
Encoder('StreamingTV')
Encoder('StreamingMovies')
Encoder('Contract')
Encoder('PaperlessBilling')
Encoder('PaymentMethod')


train

from sklearn.model_selection import train_test_split 
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
X = train.drop("TotalCharges",axis = 1)
y = train["TotalCharges"]

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)

model = RandomForestRegressor()
model.fit(X_train,y_train)
pred1 = model.predict(X_test)
score = mean_absolute_error(y_test,pred1)

pred2 = model.predict(test)

result = pd.DataFrame(pred2,columns = ['pred']).to_csv("result.csv",index=False)

result = pd.read_csv("result.csv")

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

0개의 댓글