본문 바로가기
IT 이것저것

빅데이터분석기사:실기 작업형2 완벽대비

by 관성맨 2023. 1. 5.
반응형

 

데이터수집 -> 데이터 전처리 -> 데이터 모델링 -> 데이터 모형 평가

 

위 순서로 차근차근 따라가면 된다.

 

 

 

 

 

 

 

1. 데이터 수집

 

수집을 위해 pandas 라이브러리를 추가해주고  pd.read_csv 함수를 이용해 데이터를 불러온다.

 

import pandas as pd

# 데이터 로드
X_test = pd.read_csv("data/X_test.csv")
X_train = pd.read_csv("data/X_train.csv")
y_train = pd.read_csv("data/y_train.csv")

# 데이터 확인
X_train.head()

 

 

X_train과 y_train이 원래 각각 나뉘어져 있는 경우에는 위와같이 불러오면 되는데

train데이터에 label 컬럼까지 포함되어 있는 경우에는 아래와 같이 불러오면 된다.

 

X_train = X_train.drop(['ylabel컬럼이름'], axis=1)
y_train = X_train['ylabel컬럼이름']

 

이러면 데이터 수집은 완료


 

 

 

 

 

 

 

2.  데이터 전처리

 

  • 결측치 확인 및 처리 (null 처리)
  • 데이터 타입 확인 및 명목형 데이터 변환

 

 

위 두가지를 기본으로 해주면 된다.

 

더 들어가서 전처리 하면 수치형 데이터들도 최소-최대 정규화를 통해 진행하는 등의 전처리가 있을 수 있지만 빅데이터분석기사 실기 시험에서는 안해도 된다.(나중에 몇년 후에는 모르겠지만 당장은 필요 없어보인다)

 

 

기본적으로 모델링 돌아가게끔 최소한의 작업만 해줘도 시험보는데는 충분하다.

 

 

 

1) 가장 기초형. get_dummies사용

# 결측치 확인
x_train.isnull.sum()

# 결측치 존재 시 결측치 처리 (평균대체, 0으로 대체, 결측치 삭제 등등)
x_train = x_train.fillna(0) # 예시로 0으로 대체한 것.


# 데이터 타입 확인
x_train.info() # 명목형 변수인 object형을 확인한다.


# 명목형 데이터 변환
# pd.get_dummies함수를 사용하면 굉장히 간단하다
x_train_dummies = pd.get_dummies(x_train)
x_test_dummies = pd.get_dummies(x_test)

# 그럼 자동으로 명목형 변수들이 수치형으로 변환이 된다.

 

그런데 여기서 주의해야할 점이 있다.

pd.get_dummies는 범주형 데이터가 train과 test데이터에서 각각 같게 나왔을 경우에만 사용가능하다.

 

즉, x_train데이터와 x_test데이터를 각각 get_dummies처리한 결과의 컬럼수가 동일해야만 그 이후의 모델링 및 평가를 진행할 수 있다. 그게 아니라면 모델링하고 fit하는 부분에서 에러가 발생하게 된다.

 

그래서 직접 one-hot encoding으로 변환해주는 방법도 알고 있는 것이 좋다.

 

 

 

2) 중급형

# 패키지 import해주고
from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder(handle_unknown='ignore')

ohe.fit(x_train)

 

위와 같이 handle_unknown 옵션에 ignore를 사용하면
x_train에 들어있지 않은 범주형 데이터에 대해서는 전부 0처리 하도록 만들어 준다.
즉, x_train과 x_test의 컬럼의 수를 갖게 일치시켜 주는 방법이다.

 

 

 

 

 

 

 

 

 

 

3. 데이터 모델링

 

 

분류, 회귀에 따라 알맞은 것을 사용하면 되는데

제일 만만한 RandomForest를 사용하는 것도 방법이다.

 

 

  • 분류  ->  RandomForestClassifier
  • 회귀  ->  RandomForestRegressor

 

from sklearn.model_selection import train_test_split

x_train_1, x_valid, y_train_1, y_valid = train_test_split(x_train, y_train, test_size = 0.2, random_state=23)
# random_state는 아주 중요한 하이퍼파라미터이다. 조절 잘하면 성능지표를 끌어올릴 수 있다.


#분류
rf = RandomForestClassifier()
rf.fit(x_train_1,y_train_1)
y_pred_train = rf.predict(x_train_1)
y_pred_valid = rf.predict(x_valid)
y_pred_test = rf.predict(x_test)

#회귀
rf = RandomForestRegressor()
rf.fit(x_train_1,y_train_1)
y_pred_train = rf.predict(x_train_1)
y_pred_valid = rf.predict(x_valid)
y_pred_test = rf.predict(x_test)

 

 

train_test_split을 안한다고 시험점수가 깎이거나 하지는 않는다.

test데이터에 대한 예측을 하기 전 train데이터를 이용해 성능지표를 확인하고 싶어서 하는 것이므로 해도 되고 안해도 되지만 성능지표가 잘 나왔는지, 하이퍼파라미터 튜닝을 통해 성능지표가 개선되는것을 보고 싶다면 하는게 좋다.

 

 

 

 

 

 

 

 

 

 

4. 데이터 모형 평가

 

 

어떤 지표로 평가를 할 것인지는 문제에서 주어질 것이다. 그러므로 문제를 잘 읽고 해당되는 평가지표를 사용하면 된다.

 

 

# 분류의 경우 f1_score를 보통 사용한다.

from sklearn.metrics import f1_score, roc_auc_score

print('f1_score:',f1_score(y_train_1, y_pred_train))
print('f1_score:',f1_score(y_valid, y_pred_valid))

print('roc_auc_score:',roc_auc_score(y_train_1, y_pred_train))
print('roc_auc_score:',roc_auc_score(y_valid, y_pred_valid))

 

 

위와 같이 했으면 다 끝났다. '실행'을 해보고 에러가 없다 싶으면 x_test데이터도 마찬가지로 위와 같은 방식으로 predict함수 사용하여 예측해주면 된다.

 

 

그리고 마지막으로는 엑셀로 만들어서 제출하면 된다.

 

 

답안 제출 유의사항은 시험문제에도 잘 나와 있겠지만 .csv파일명의 이름을 뭘로 할 것인지는 시험문제 가이드에 잘 나와있으니 나온 그대로 따라하면 된다.

또한 .csv파일 만들 때 index가 자동으로 생성되는 경우가 있는데 문제에서 index없애는 것이 일반적인 경우이므로index=False를 사용해서 없애주면 된다.

 

 

pd.DataFrame({'컬럼명': x_test.ID, 'label컬럼명': y_pred_test}).to_csv('제목.csv', index=False)

 

 

이렇게 하면 웬만하면 만점 받을 수 있다. 작업형 2유형이 처음부터 끝까지 다 작성해야하는 부분이라 비전공자의 경우에는 어떻게 공부해야하나 막막할 수가 있는데 step-by-step 각 단계를 차근차근 따라가면 누구나 할 수 있다.

각 단계별로 가장 기본적인 코드들만 외워가도 되니 포기하지 말자.

 

 

그럼 화이팅이다.
반응형

댓글