데이터 핸들링
01-01.Data 형태 확인
import pandas as pd
df.shape
df.info()
df.isnull().sum()
01-02.Unique한 Value별 카운팅
df['col'].unique()
01-03.DataFrame 특정값 치환
import numpy as np
import pandas as pd
df.replace(-200, np.NaN)
01-04.Null 값 이전 값으로 채워넣기
import numpy as np
df.fillna(method='ffill')
특정 col만 가져오기
df[['col1', 'col2']]
조건에 맞는 DataFrame 출력
df[ (df['T'] >= 25) & (df['T'] <= 27) ]
오름차순, 내림차순 정렬
df['col'].sort_values(ascending=False)
특정값이 포함된 Data 찾기
df[df['col'].astype(str).str.contains('text')]
특정 조건 만족하는 값, 변경하기
import numpy as np
np.where(df['col'] <= 5, 1, 0)
groupby 활용 카운팅
df['y'].groupby(df['job']).value_counts()
pivot table 활용 데이터 처리
df_job = pd.pivot_table(df_job, # 피벗할 데이터프레임
index = 'index', # 행 위치에 들어갈 열
columns = 'col', # 열 위치에 들어갈 열
values = 'value') # 데이터로 사용할 열
중복 데이터 처리
df.drop_duplicates(['col'], keep = 'first', inplace=True)
데이터 시각화
Numeric(연속형) 변수 분포 확인
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.style.use(['dark_background'])
sns.displot(df['col']);
print("col :", df['col'].mean())
Plot size 조절
import matplotlib.pyplot as plt
plt.gcf().set_size_inches(20, 5)
산점도(Scatter plot) 그리기
sns.scatterplot(x=df['x'], y=df['y'], hue = df['hue'], data=df)
line plot 그리기
plt.plot(df['x'], df['y'], label='label')
pairplot 상관관계 분석
df_pair = df[['col1', 'col2', 'col3', 'col4']]
sns.pairplot(df_pair)
plt.show()
catplot 그리기
plt.style.use(['dark_background'])
sns.catplot(x="x", hue="y", kind="count",palette="pastel", edgecolor=".6",data=df);
plt.gcf().set_size_inches(25, 3)
데이터 분석 및 모델링
Train/Test set 분할
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
X=df_merge.drop(['y'], axis=1)
Y=df_merge['y']
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, stratify=Y)
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)
모델 학습 및 예측
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(random_state=123456)
rfc.fit(x_train, y_train)
y_pred_train = rfc.predict(x_train)
y_pred_test = rfc.predict(x_test)
이진분류 모델 성능 확인
from sklearn.metrics import classification_report
print(classification_report(y_train, y_pred_train))
print(classification_report(y_test, y_pred_test))
하이퍼 파라미터 튜닝
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
params = { 'n_estimators' : [400, 500],
'max_depth' : [6, 8, 10, 12]
}
rf_clf = RandomForestClassifier(random_state = 123456, n_jobs = -1)
grid_cv = GridSearchCV(rf_clf, param_grid = params, cv = 3, n_jobs = -1, scoring='recall')
grid_cv.fit(x_train, y_train)
print('최적 하이퍼 파라미터: ', gridcv.best_params)
print('최고 예측 정확도: {:.4f}'.format(gridcv.best_score))
중요 변수 파악(Feature Importance)
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.style.use(['dark_background'])
ftrimportances_values = rfc.feature_importances
ftr_importances = pd.Series(ftr_importances_values, index = x_train.columns)
ftr_top20 = ftr_importances.sort_values(ascending=False)[:20]
plt.figure(figsize=(8,6))
plt.title('Feature Importances')
sns.barplot(x=ftr_top20, y=ftr_top20.index)
plt.show()
모델 Save & Read
import pickle
saved_model = pickle.dumps(model)
model_from_pickle = pickle.loads(saved_model)
상관계수 값 출력
import scipy.stats as stats
stats.pearsonr(x=df['x'], y=df['y'])
선형회귀 상관계수 확인
dfcoef = pd.DataFrame({'col':X.columns, 'coef':mlr.coef}).reset_index(drop=True)
df_coef
min-max scale 활용 정규화
from sklearn.preprocessing import minmax_scale
rfm['Recency'] = minmax_scale(rfm['Recency'], axis=0, copy=True)