빅데이터분석기사 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
'프로그래밍 > Python' 카테고리의 다른 글
urlopen을 할 때 HTTP Error 403: Forbidden error가 난다면 (0) | 2021.12.19 |
---|---|
list comprehension (0) | 2021.12.18 |
(빅데이터분석기사) pandas에서 count()를 사용할 때 주의할 점 (0) | 2021.12.03 |
numpy array와 pandas에서 var을 구할 때 차이점 (0) | 2021.12.01 |
python 조건문 if문 사용할 때 주의해야할 점 (0) | 2021.11.18 |