본문 바로가기

Contact English

【빅데이터분석기사】 파이썬 실기 필수 암기 및 예제

 

파이썬 실기 필수 암기 및 예제

 

추천글 : 【빅데이터분석기사】 빅데이터분석기사 목차 


a. 파이썬에서 유용한 주요 함수 모음 

b. R 실기 필수 암기 및 예제


※ 제6회 빅데이터분석기사 실기시험(2023.06.24)부터 기존 단답형 10문제를 작업형 신규 유형인 '작업형 제3유형'으로 대체 (ref)

※ 일반적으로 유형 1은 파이썬으로 풀기 좋고, 유형 2, 유형 3은 R로 풀기를 권장합니다. 

빅데이터분석기사 실기 체험 : 실행시간만 1분으로 한계가 있고, 실행횟수는 제한 없음

 

  1. 타입 체크 : type(x)
  2. 길이 : len(x)
  3. 차원 (e.g., numpy.ndarray, cv2.imread) : x.shape 
  4. 차원 (e.g., PIL.PngImagePlugin.PngImageFile, PIL.Image.open) : x.size
  5. int로 형변환 : .astype(int)
  6. 주어진 배열에서 고유한 원소들의 집합 : .unique()
  7. x초 만큼 대기 : time.sleep(x)
  8. 리스트가 있을 때 index와 함께 for 문을 쉽게 생성하는 법 : for index, e in enumerate(my_list): ...
  9. 주어진 문장을 '_' 단위로 쪼개고 그 중 앞 부분만을 취함 : myStr.split('_')[0]

 

A. 작업형 제1유형(30점; 3문제)

⑴ 개요

① 데이터 타입 : object, int, float, bool 등 

② 기초 통계량 : 평균, 중앙값, 사분위수, IQR, 표준편차 등

③ 데이터 인덱싱, 필터링, 정렬, 변경 등

④ 결측치, 이상치, 중복값 처리 (제가 또는 대체)

⑤ 데이터 정규화 : Z-scaling, min-max normalization 등

⑥ 데이터 합치기

⑦ 날짜/시간 데이터

문제 예시 

 

제공된 데이터(data/mtcars.csv)의 qsec 칼럼을 최소-최대 척도(Min-Max Scale)로 변환한 후 0.5보다 큰 값을 가지는 레코드 수를 【제출 형식】에 맞게 답안 작성 페이지에 입력하시오.

 

【유형 1】 ㉠ 정수(integer)로 입력 (단, 소수점을 포함한 경우 소수점 첫째 자리에서 반올림하여 계산) ㉡ 정수 답안만 입력

 

풀이 (추후 업데이트)

 

 

B. 작업형 제2유형(40점; 1문제)

⑴ 개요

분류모델 : 연속 변수로 명목 변수를 예측. SVM, 결정나무, 랜덤 포레스트(분류 알고리즘 중 가장 뛰어남)를 주로 사용

회귀모델 : 연속 변수로 연속 변수를 예측. 선형회귀, probit, logit을 주로 사용

문제 예시 

 

제공된 데이터는 백화점 고객이 1년간 상품을 구매한 속성 데이터이다. 제공된 학습용 데이터(data/customer_train.csv)를 이용하여 백화점 구매 고객의 성별을 예측하는 모델을 개발하고, 개발한 모델에 기반하여 평가용 데이터(data/customer_test.csv)에 적용하여 얻은 성별 예측 결과를 【제출 형식】에 따라 CSV 파일로 생성하여 제출하시오.

 

* 예측 결과는 ROC-AUC 평가지표에 따라 평가함

* 성능이 우수한 예측 모델을 구축하기 위해서는 데이터 정제, Feature Engineering, 하이퍼 파라미터(hyper parameter) 최적화, 모델 비교 등이 필요할 수 있음. 다만, 과적합에 유의하여야 함.

 

【제출 형식】

㉠ CSV 파일명 : result.csv (파일명에 디렉토리∙폴더 지정 불가)

㉡ 예측 성별 칼럼명 : pred

㉢ 제출 칼럼 개수 : pred 칼럼 1개

㉣ 평가용 데이터 개수와 예측 결과 데이터 개수 일치 : 2,482개

 

풀이

① 데이터 불러오기

② EDA

③ 데이터 전처리

④ 데이터 분리

⑤ 검증 및 예측

⑥ 제출

⑷ 풀이 1. 회귀(regression)

 

import pandas as pd

train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')


print(train.shape, test.shape)
print(train.info())
print(train.describe())...

print(train.isnull().sum())
print(test.isnull().sum())

cols = 결측치
train = train.drop(cols, axis = 1)
test = test.drop(cols, axis = 1)

train.shape, test.shape

train = train.fillna(0)
test = test.fillna(0)

train = train.drop('id', axis = 1)
test_id = test.pop('id')
test.head()

cols = train.select_dtypes(include='object').columns

from sklearn.preprocessing import LabelEncoder

for col in cols:
    le = LabelEncoder()
    train[col] = le.fit_transform(train[col])
    test[col] = le.transform(test[col])

from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split(train.drop('price', axis=1), train['price'], test_size = 0.1, random_state = 2023)

from sklearn.ensemble import RandomForesrRegressor

rf = RandomForestRegressor()
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)

from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error

print(r2_score(y_val, pred))
print(mean_absolut_error(y_val, pred))
print(mean_squared_error(y_val, pred))

pred = rf.predict(test)

pd.DataFrame({'id':test_id, 'price':pred).to_csv('0000.csv', index=False)

 

풀이 2. 분류(classification)   

 

import pandas as pd
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

cols = train.select_dtypes(include = 'object').columns

from sklearn.preprocessing import LabelEncoder

for col in cols:
    le = LabelEncoder()
    train[col] = le.fit_transform(train[col])
    test[col] = le.transform(test[col])

train = train.drop('CLIENTNUM', axis=1)
test_id = test.pop('CLIENTNUM')

# print(train.head())

from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train.drop('Attrition_Flag', axis =1), train['Attrition_Flag'], test_size = 0.2, random_state = 2023)

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier()
rf.fit(X_val, y_val)
pred = rf.predict(X_val)
pred_proba = rf.predict_proba(X_val)

print(pred.shape)

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

print(f1_score(y_val, pred))
print(accuracy_score(y_val, pred))
print(recall_score(y_val, pred))
print(roc_auc_score(y_val, pred_proba[:,1]))

pred = rf.predict(test)

pd.DataFrame({'CLIENTNUM':test_id, 'Attrition_Flag':pred}).to_csv('oooo.csv', index=False)

 

 

C. 작업형 제3유형(30점; 2문제; 문제마다 소문제 존재)

⑴ 개요

문제 예시

 

제공된 데이터(data/Titanic.csv)는 타이타닉호의 침몰 사건에서 생존한 승객 및 사망한 승객의 정보를 포함한 자료이다. 아래 데이터를 이용하여 생존 여부(Survived)를 예측하고자 한다. 각 문항의 답을 【제출 형식】에 맞춰 답안 작성 페이지에 입력하시오. (단, 벌점화(penalty)는 부여하지 않는다.)

 

① Gender와 Survived 변수 간의 독립성 검정을 실시하였을 때, 카이제곱 통계량은? (반올림하여 소수 셋째 자리까지 계산)

② Gender, SibSp, Parch, Fare를 독립변수로 사용하여 로지스틱 회귀모형을 실시하였을 때, Parch 변수의 계수값은? (반올림하여 소수 셋째 자리까지 계산)

③ 위 ②번 문제에서 추정된 로지스틱 회귀모형에서 SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값은? (반올림하여 소수 셋째 자리까지 계산)

 

【제출 형식】 ㉠ 소수 넷째 자리에서 반올림하여 소수 셋째 자리까지만 계산

 

 풀이 (추후 업데이트)

 

입력: 2024.06.02 12:21