본문 바로가기
KT AIVLE SCHOOL

[AICE Associate 자격증 준비] python 코드 공부

by 얀나대장 2023. 4. 11.

AICE 자격증 준비하면서 배운점과 기본 문법을 사용해 데이터 분석, 학습하는 과정을 기록하며 공부합니다.

 

환경 : jupyter notebook

언어 : python3

 

1. scikit-learn import, alias sk

import sklearn as sk

 

2. 판다스 라이브러리 pd로 불러오기

import pandas as pd

 

3. pd로 데이터 불러오기

df = pd.read_csv('nav_data.csv', encoding='cp949')

→ 한글로된 csv를 인코딩 할 때 utf-8, cp949 등을 encoding으로 사용해야함.

 

 

4. jointplot을 활용해 ['Time_Driving'] 과 ['Speed_Per_Hour']를 살펴보기

!pip install seaborn

import matplotlib.pyplot as plt
import seaborn as sns

sns.jointplot(x=df['Time_Driving'], y=df['Speed_Per_Hour'], data=df)

→ seaborn을 사용하기 위해서는 seaborn을 install 해야 한다.

 

5. 데이터 간 상관계수로 heatmap 그리기

sns.heatmap(df.corr(), annot=True, cmap='Blues')

 

6. 필요 없는 데이터 삭제 ['Time_Departure']

df_temp = df.drop(['Time_Departure'], axis = 1)

 

7. sklearn 에서 주소 컬럼을 Encoder로 변경

from sklearn.preprocessing import LabelEncoder

Le = LabelEncoder()
df_temp['Address1']=Le.fit_transform(df_temp['Address1'])
df_temp['Address2']=Le.fit_transform(df_temp['Address2'])

→ LabelEncoder는 원핫인코딩이 아닌 범주→  숫자 인코딩임

 

8. pd를 사용해서 원핫 인코딩 진행

df_temp = pd.get_dummies(data=df_temp, columns=['Address1','Address2', 'Weekday','Hour','Day'], drop_first=True)

 

9. sklearn에 있는 train, test set 분리를 사용해서 x, y 학습, 테스트 데이터셋 나누기

from sklearn.model_selection import train_test_split
x = df_temp.drop(['Time_Driving', 'Time_Arrival'], axis=1) #time_arrival도 제외
y = df['Time_Driving'].values

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1)

→ y 지정할 때 valuse 쓰는거 잊지 않기!, Time_Arrival을 문자열이라 삭제 진행

 

10. StandardScaler로 학습, 테스트셋 정규화

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

 

11. Decision Tree로 학습. max_depth = 5

from sklearn.tree import DecisionTreeRegressor

D_tree = DecisionTreeRegressor(max_depth=5)
D_tree.fit(x_train, y_train)

 

12. R2, MSE 값을 계산해서 scatter plot 그려보기. x=실제값, y=예측값

from sklearn.metrics import r2_score, mean_squared_error
y_pred = D_tree.predict(x_test)
rmse = mean_squared_error(y_test, y_pred)**0.5
r2 = r2_score(y_test, y_pred)

print(f'RMSE : {rmse}, R-squaured : {r2}')

sns.scatterplot(x=y_test, y=y_pred)

→  RMSE 함수는 없기 때문에 mse를 계산해서 루트로 계산.

 

13. 딥러닝을 사용해 학습. Early Stopping, ModelCheckpoint 사용. 'best_model.h5'로 가장 좋은 모델 저장

clear_session()

model = Sequential()

model.add(Input(shape=(117,)))
model.add(Dense(128, activation='relu'))

model.add(Dense(1))

model.compile(loss='mse',optimizer='adam', metrics='mae')

es = EarlyStopping(monitor = 'val_loss', min_delta=0, verbose=1, patience = 5, restore_best_weights=True)
mc = ModelCheckpoint('best_model.h5', monitor = 'val_loss', save_best_only=True)

history = model.fit(x_train, y_train, validation_split=0.2, callbacks=[es, mc], epochs=10, verbose = 1)

→ loss로 mae를 줘도 되고, mse를 줘도 된다.

MAE  : Mean Absolute Error

MSE : Mean Squared Error

 

→ history로 저장해야 나중에 loss 함수를 그릴 수 있음! 까먹지 않기

 

14. MAE와 Val_mae를 그래프 하나에서 비교. 범례 추가

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title("Training mae")
plt.xlabel('Epochs')
plt.ylabel('mae')
plt.legend(['mae','val_mae'])
plt.show()

→ legend로 범례를 추가해도 되고 plot(x, label = 'mae') 후 legend(loc='best')로 사용해도 된다.

 

배운점

AICE 공부하면서 복습도 하고, 데이터로 머신러닝, 딥러닝 하며 학습하는 능력도 기를 수 있었다.

팀별로 이야기를 하면서 서로 효율적인 코드를 알려주고, 궁금한점, 공부하는 법에 대해 공유하는 시간도 가졌다.

AICE 시험 백점 맞자! 아자아자!

댓글