본문 바로가기
데이터 분석/데이터 분석

빅데이터 분석기사 실기 예제문제 풀어보기

by thomasito 2022. 6. 19.
반응형

빅데이터 분석기사 실기 환경은 반드시 보고 들어가자

 빅데이터 분석기사 실기 예제 프로그램과 문제는 홈페이지에서 확인 할 수 있다. R과 python 두 가지를 모두 선택할 수 있는데 나는 당연히 파이썬을 선택했다. 이 모듈을 미리 써봐야 하는 이유는 주피터나 구글 코랩처럼 한 줄 한 줄 실행하는 것이 아니고 전체코드를 계속 실행하면서 결과물을 확인해야 하기 때문이다. 또한 구글 코랩환경과 달리 일일이 print() 명령문을 써줘야 코딩 결과를 확인할 수 있는 어려움도 있다.

링크는 아래와 같다.

https://dataq.goorm.io/exam/116674/%EC%B2%B4%ED%97%98%ED%95%98%EA%B8%B0/quiz/1

 

구름EDU - 모두를 위한 맞춤형 IT교육

구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/

edu.goorm.io

 

작업형 1번 문제 : 간단한 데이터 전처리 문제

[문제]

 mtcars 데이터셋(data/mtcars.csv)의 qsec 컬럼을 최소최대 척도(Min-Max Scale)로 변환한 후 0.5보다 큰 값을 가지는 레코드 수를 구하시오.(* dataset 위치 : data/mtcars.csv)

 

 첫 번째 작업형 문제는 크게 어렵지 않다. 시키는 대로

1) 최소 최대 척도로 데이터 스케일링을 하고,

2) 0.5 보다 큰 값을 가지는 데이터를 추출하여,

3) 개수를 세서 출력하면 된다.

import pandas as pd
data = pd.read_csv('data/mtcars.csv', index_col=0)
# print(data)

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)
data_scaled = pd.DataFrame(data_scaled, columns = data.columns)
# print(data_scaled)

condition = data_scaled['qsec'] > 0.5
print(data_scaled[condition]['qsec'])
print(data_scaled[condition]['qsec'].count())

 

작업형 2번 문제 : 전처리 후 모델 학습 -> 테스트 데이터 예측 -> 성과 평가

[문제]

아래는 백화점 고객의 1년 간 구매 데이터이다.
(가) 제공 데이터 목록y_train.csv : 고객의 성별 데이터 (학습용), CSV 형식의 파일X_train.csv, X_test.csv : 고객의 상품구매 속성 (학습용 및 평가용), CSV 형식의 파일


(나) 데이터 형식 및 내용

1. y_train.csv (3,500명 데이터)
* custid: 고객 ID* gender: 고객의 성별 (0: 여자, 1: 남자)
2. X_train.csv (3,500명 데이터), X_test.csv (2,482명 데이터) 


고객 3,500명에 대한 학습용 데이터(y_train.csv, X_train.csv)를 이용하여 성별예측 모형 만든 후, 이를 평가용 데이터(X_test.csv)에 적용하여 얻은 2,482명 고객의 성별 예측값(남자일 확률)을 다음과 같은 형식의 CSV 파일로 생성하시오.

(제출한 모델의 성능은 ROC-AUC 평가지표에 따라 채점)

 

(유의사항)- 성능이 우수한 예측모형을 구축하기 위해서는 적절한 데이터 전처리, Feature Engineering, 분류
알고리즘 사용, 초매개변수 최적화, 모형 앙상블 등이 수반되어야 한다.
- 수험번호.csv(예: 0000.csv) 파일이 만들어지도록 코드를 제출한다.- 제출한 모델의 성능은 ROC-AUC 평가지표에 따라 채점한다.- dataset은 'data/y_train.csv' 의 형태로 읽어들인다.

 

두 번째 작업형 문제는 다소 복잡하다. 하지만 적당한 모형을 골라서 훈련데이터로 학습시킨 모델에 테스트 데이터를 넣어서 예측값들을 풀어내면 된다. 이것은 다소 정리가 필요하다.

 

1) 데이터 전처리 : 범주형 변수 변환 (LabelEncoder), 결측값 처리(fillna()), 파생변수 만들기

2) 데이터 스케일링 : 표준 스케일링을 사용하여 변환

3) 예측 모형을 결정하고 학습시킨다. 남/녀를 구분하는 분류 문제이기 때문에 로지스틱 회귀분석(LogisticRegression)과 의사결정나무(DecisionTreeClassifier)를 학습시켜 본다.

4) 훈련 데이터 X 값을 모델에 넣어서 성능이 어떤지 확인해 본다. (roc_auc_score 로 측정) 평가점수가 더 높게 나온 모형을 선택하는데 의사결정나무를 선택한다.

5) 테스트 데이터를 선택한 모형에 넣어서 예측값을 도출한 후 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")

# 사용자 코딩
# 1. 성별예측 모형을 만든다. -> 로지스틱 회귀분석, 의사결정나무
# 2. 평가용 데이터에 적용하여 얻은 성별 예측값을 csv 파일로 생성
# 3. 제출한 모델의 성능은 ROC AUC 평가지표에 따라 채점

# 범주형 변수 변환 (X_train)-------------------------------------------
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
data1 = encoder.fit_transform(X_train['주구매상품'])
data1 = pd.DataFrame(data1, columns = ['주구매상품'])
X_train['주구매상품'] = data1

data2 = encoder.fit_transform(X_train['주구매지점'])
data2 = pd.DataFrame(data2, columns = ['주구매지점'])
X_train['주구매지점'] = data2

X_train_custid = X_train['cust_id']
X_train = X_train.drop(columns = ['cust_id'])

# 결측값 처리 (missing value) -----------------------------------------
print(X_train.isnull().sum())
X_train['환불금액'] = X_train['환불금액'].fillna(0)

# 변수스케일링 (Standard Scaler) ---------------------------------------

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_train_scaled = pd.DataFrame(X_train_scaled, columns = X_train.columns)


# 범주형 변수 변환 (X_test)---------------------------------------------
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
data1 = encoder.fit_transform(X_test['주구매상품'])
data1 = pd.DataFrame(data1, columns = ['주구매상품'])
X_test['주구매상품'] = data1

data2 = encoder.fit_transform(X_test['주구매지점'])
data2 = pd.DataFrame(data2, columns = ['주구매지점'])
X_test['주구매지점'] = data2

X_test_custid = X_test['cust_id']
X_test = X_test.drop(columns = ['cust_id'])

# 결측값 처리 (missing value) -----------------------------------------
# print(X_test.isnull().sum())
X_test['환불금액'] = X_test['환불금액'].fillna(0)

# 변수스케일링 (Standard Scaler) ---------------------------------------

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_test_scaled = scaler.fit_transform(X_test)
X_test_scaled = pd.DataFrame(X_test_scaled, columns = X_test.columns)

# y 함수에서 cust_id 날리기---------------------------------------------
y_train_custid = y_train['cust_id']
y_train = y_train.drop(columns = ['cust_id'])

# 로지스틱 회귀함수 가져와서 값 에측하고 비교해보기------------------------

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train_scaled, y_train)
y_train_predicted = pd.DataFrame(model.predict(X_train_scaled), columns = y_train.columns)

from sklearn.metrics import roc_auc_score
print(roc_auc_score(y_train, y_train_predicted))

# 의사결정나무 가져와서 값 에측하고 비교해보기-----------------------------

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train_scaled, y_train)
y_train_predicted = pd.DataFrame(model.predict(X_train_scaled), columns = y_train.columns)
print(y_train_predicted)

from sklearn.metrics import roc_auc_score
print(roc_auc_score(y_train, y_train_predicted))

# 테스트 데이터로 값 예측하기 ---------------------------------------------
y_test_predicted = pd.DataFrame(model.predict(X_test_scaled), columns = y_train.columns)
print(y_test_predicted)

y_test_predicted['cust_id'] = y_train_custid
print(y_test_predicted)

# 값 저장하기 ------------------------------------------------------------
y_test_predicted.to_csv('data/exam_num.csv')

 

  홈페이지에서 특별한 답안을 제시하지 않고 있으며, 채점 기준은 다르기 때문에 이런 느낌이다라고 참고 하시면 되겠다.

반응형

댓글