본문 바로가기
자격증 공부/빅데이터분석기사

빅데이터 분석기사 실기 4회 기출

by 해모해모 2023. 6. 23.
728x90
반응형

# 작업형 1유형
list = [2, 3, 3.2, 5, 7.5, 10, 11.8, 12, 23, 25, 31.5, 34]
import pandas as pd
df = pd.DataFrame({
    'value' : list
})
# print(df)

# 1-1. 제1사분위수와 제3사분위수 구하기
q1 = df['value'].quantile(.25)
q3 = df['value'].quantile(.75)
# print(q1, q3)
# 정답 : 제1사분위수 = 4.55, 제3사분위수 = 23.5

# 1-2. 제1사분위수와 제3사분위수 차이의 절대값 구하기
# print(abs(q1-q3))
# 정답 : 18.95

# 1-3. 그 값의 소수점을 버린 후 정수로 출력
result = abs(q1-q3)
print(int(result))
# 정답 : 18

# 작업형 1유형
# print(df.head())

# 2. num_loves와 num_wows를 매우 긍정적인 반응으로 정의할 때, 전체 반응 수(num_reactions) 중 매우 긍정적인 반응 수가 차지하는 비율 계산
# 그 비율이 0.5보다 작고 0.4보다 크며 유형이 비디오에 해당하는 건수를 정수로 출력

# 매우 긍정적인 반응 수 합계
df['mostP'] = df['num_loves'] + df['num_wows']
# print(df.head())

# 비율 계산
df['pRatio'] = df['mostP'] / df['num_reactions']
# print(df.head())

# 0.5보다 작고 0.4보다 큰 애들만 남기기
cond = (df['pRatio'] < 0.5) & (df['pRatio'] > 0.4)
df = df[cond]
# print(df.head())

# 그 유형이 비디오에 해당하는 건수를 정수로 출력
print(len(df['status_type'] == 'video'))

# 정답 : 90

# 작업형 1유형
# 3. 2018년 1월에 넷플릭스에 등록된 컨텐츠 중에서 'United Kingdom'이 단독 제작한 컨텐츠의 수를 정수로 출력

# print(df.head()) # country가 나라
# print(df.info())

# 날짜형으로 변환
df['date_added'] = pd.to_datetime(df['date_added']) 
# print(df.info())
# print(df.head())

# 년, 월 출력
df['year'] = df['date_added'].dt.year
df['month'] = df['date_added'].dt.month
# print(df.head())

# 2018년 1월인 것만 고르기
# print(len(df))
cond = (df['year'] == 2018) & (df['month'] == 1)
df = df[cond]
# print(len(df))

# United Kingdom이 단독 제작한 컨텐츠 수
cond = df['country'] == 'United Kingdom'
df = df[cond]
print(len(df)) 

# 정답 : 6

# 작업형 2유형
# 고객이 속한 Segmentation 예측, macro_f1 결과로 평가

# print(X_train.shape, X_test.shape, y_train.shape)

# EDA
# print(X_train.head()) # ID값 포함됨
# print(y_train.value_counts()) # 6718개, 타겟 : Segmentation
# print(X_train.info()) # object형 5개
# print(X_train.describe())
# print(X_train.describe(include='object'))

# 결측치 확인 -> 없음
# print(X_train.isnull().sum())
# print(X_test.isnull().sum())

# ID값 제거
X_train = X_train.drop('ID', axis = 1)
test_id = X_test.pop('ID')
# print(X_train.head())
# print(X_test.head())

# object형 라벨인코딩
cols = X_train.select_dtypes(include = 'object')
# print(cols)

from sklearn.preprocessing import LabelEncoder
for col in cols : 
  le = LabelEncoder()
  X_train[col] = le.fit_transform(X_train[col])
  X_test[col] = le.transform(X_test[col])

# print(X_train.info())
# print(X_test.info())

# 모델 학습 및 예측
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state = 2023)
model.fit(X_train, y_train['Segmentation'])
pred = model.predict(X_test)

# print(pred)

# 데이터프레임 생성 및 csv 추출
pd.DataFrame({
    'ID' : test_id,
    'Segmentation' : pred
}).to_csv('1111.csv', index = False)

print(pd.read_csv('1111.csv'))
728x90
반응형

댓글