빅데이터분석기사 3회 대비 실전 벼락치기

1. 정렬하기

 

data.sort_values( by = (정렬기준이 되는 칼럼) ,  ascending =True/False)

 

ascending =True이면 오름차순 정렬이고 ascending = False이면 내림차순 정렬

 

 

2. series는 대응하는 원소끼리 수학적 계산이 가능

 

단, 인덱스가 맞지 않으면 계산이 이상해질 수 있음

 

 

3. 통계량계산

 

data.mean() , data.median(), data.sum(), data.count(), data.std(), data.var(), ....

 

최빈값은 scipy 모듈을 이용해서 구할 수 있음

 

from scipy.stats import mode

 

mode_data = mode(data)

 

 

4. 결측치 찾기

 

data.isnull().sum()을 통해 결측치가 존재하는지 확인

 

 

5. 결측치 채우기, 제거하기

 

data.fillna(<채울 값>, inplace = ) 으로 결측치에 <채울 값>을 넣어 결측치 채우기

 

data.dropna(inplace=)를 하면 결측치 행 제거

 

 

6. 기초 통계량 찾기

 

data.describe()를 통해 수치형 변수들의 min,max,25%, 50%, 75% 등의 기초 통계량을 확인할 수 있음

 

 

7. 중복제거

 

series.unique()를 통해 중복을 제거한 유일한 값들을 구할 수 있음

 

 

8. 척도변환

 

데이터들의 기초 통계량을 확인하고 분포 범위가 차이가 난다고 판단이 들면 scaling을 할 수 있음

 

최소-최대변환은 (x-min)/(max-min)으로 최댓값이 1, 최솟값이 0으로 되게 만들고

 

표준화 변환은 (x-mean)/std으로 평균이 0, 표준편차가 1이 되도록 만든다

 

로버스트 변환은 중앙값이 0, IQR이 1이 되도록 만든다

 

sklearn.preprocessing에서 모듈을 지원함

 

from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler

 

scaler = (스케일러 이름)()

 

scaling_data = scaler.fit_transform(data)

 

dataframe = pd.DataFrame(scaling_data,columns = data.columns)

 

 

 

9. 범주형 변수 encoding

 

from sklearn.preprocessing import LabelEncoder

 

encoder = LabelEncoder()

 

data[categorical] = encoder.fit_transform(data[categorical)

 

--------------------------------------------

categorical_dummies = pd.get_dummies(data[categorical], drop_first=True/False)

 

 

 

10. 사용 모델

 

xgboost의 XGBRegressor와 XGBClassifier가 성능이 기본적으로 좋다

 

from xgboost import XGBRegressor, XGBClassifier

 

model = XGBRegressor(n_estimator = , max_depth = , )

 

model = XGBClassifier(n_estimator = , max_depth = , eval_metric = 'error',..)

 

model.fit(x_train,y_train)

 

y_predict = model.predict(x_test)

 

y_predict_proba = model.predict_proba(x_test)

 

그 외에 고려할만한 모델

 

from sklearn.linear_model import LinearRegression,LogisticRegression,SGDClassifier

 

from sklearn.tree import DecisionTreeClassifier

 

from sklearn.svm import SVC

 

1분안에 가능하면 여러 모델 앙상블도 생각은 해보기

 

 

11. 성능평가

 

from sklearn.model_selection import train_test_split

 

X_TRAIN,X_TEST,Y_TRAIN,Y_TEST = train_test_split(x_train,y_train,test_size=0.2)

 

X_TRAIN,Y_TRAIN으로 학습하고 X_TEST,Y_TEST로 평가해본 후 성능이 가장 좋은 모델 고르기

 

from sklearn.metrics import r2_score, f1_score, roc_auc_score, accuracy_score, precision_score, recall_score,....

 

r2_score(Y_TEST, y_predicted)

 

 

 

12. 제출하기

 

x_test_index = pd.DataFrame(x_test_index,columns='index')

 

y_predicted = pd.DataFrame(y_predicted,columns = 'prediction')

 

submission = pd.concat([x_test_index,y_predicted],axis=1)

 

submission.to_csv('submission.csv',index=False)

 

 

13. 전처리에서 생각해볼만한 점

 

1) describe()로 기초 통계량 확인하고 분포 차이가 심하면 scaling 시도

 

2) 결측치 확인하고 너무 많으면 제거하고 그렇지 않으면 대치하는 방법, 혹은 과감히 데이터 row를 제거하거나

 

3) 시간을 나타내는 칼럼은 pd.to_datetime()으로 datetime으로 만들 수 있음

 

datetime.dt.year, dt.month, dt.day, ....로 year, month, day, ... 등을 분리할 수 있음

 

4) 상관관계 확인해보기

 

독립변수간 상관관계가 심하거나, 독립변수와 종속변수간 상관관계가 얼마나 되는지 생각해보기

 

data.corr(), data[[칼럼리스트]].corr(),...

 

5) 파생변수 생각해보기

 

논리적으로 합칠 수 있는 변수는 파생변수로 합쳐보기

 

가족수 = 형제자매수 + 부모자식수.........

 

6) 마지막 예측 결과에서 불가능한 값은 가능하게 처리

 

자전거 대여 수량은 음수가 불가능한데 음수를 예측하면 0으로 바꿔주기

 

 

더 있는것 같은데 모르겠다...

참고

 

https://wotres.tistory.com/entry/Robust-scaling-%ED%95%98%EB%8A%94%EB%B2%95-in-python

 

Robust scaling 하는법 in python

<엔지니어는 구현을 못하면 모르는것이다> Robust scaling 은 중앙값 0, 사분위수의 제3사분위수에서 제1사분위수를 뺀값인 IQR이 1이 되도록 변환하는 방법을 말한다. 아웃라이어의 영향을 최소화한

wotres.tistory.com

 

 

TAGS.

Comments