본문 바로가기

자격증공부/빅데이터분석기사

[빅데이터분석기사] 모의고사4 (표준편차, 그룹합, 값 대체, 회귀, 일원배치법)

320x100

 

[유형1-1] 표준편차 구하기

(문제) 주어진 데이터에서 f1 컬럼값이 'ENFJ'와 'INFP'인 'f1'의 표준편차 차이를 절대값으로 구하시오.

 

ㅇ 문제 바로가기(캐글)

 

* 표준편차 : df[조건]['컬럼'].std()

 

(풀이)

import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# print(df.head(3))
# print(df.shape)
# print(df.info())

cond1 = df['f4'] == 'ENFJ'
cond2 = df['f4'] == 'INFP'

print(abs(df[cond1]['f1'].std()-df[cond2]['f1'].std()))

 

[유형1-2] 결측치 제거 및 그룹함

(문제) 주어진 데이터에서 f1컬럼의 결측 데이터를 제거하고, city와 f2을 기준으로 묶어 합계를 구하고, city가 경기이면서 f2가 0인 조건을 만족하는 f1값을 구하시오.

 

ㅇ 문제 바로가기(캐글)

 

* df 선택 : df.iloc

* 그룹합 : df.groupby(['컬럼명1']).sum()

* 결측치 컬럼 삭제 : df.dropna(subset = ['컬럼']

 

(풀이)

import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# print(df.shape)
# print(df.head(3))
# print(df.info())

# f1 결측치 제거
# print(df.isnull().sum())
# print(help(df.dropna))
df = df.dropna(subset=['f1'])
# print(df.isnull().sum())

# city와 f2 기준으로 그룹합
# print(help(df.groupby))
print(df.groupby(['city', 'f2']).sum())
df2= df.groupby(['city', 'f2']).sum()

# city가 경기이면서 f2가 0인 조건에 만족하는 f1값
print(df2.iloc[0,1])
print(df2.iloc[0]['f1'])

 

[유형1-3] 값 변경 및 기초통계

(문제) 'f4' 컬럼의 값이 'ESFJ'인 데이터를 'ISFJ'로 대체하고, 'city'가 '경기'이면서 'f4'가 'ISFJ'인 데이터 중 'age' 컬럼의 최대값을 출력하시오.

 

ㅇ 문제 바로가기(캐글)

 

* 값 대체 : df.replace('대상 값', '대체 값')

* 최대값 : df.max()

 

(풀이)

import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# print(df.head(2))
# print(df.info())
# print(df.shape)

# print(df['f4'].head(10))
df['f4'] = df['f4'].replace('ESFJ','ISFJ')
# print(df['f4'].head(10))

cond1 = df['city'] == '경기'
cond2 = df['f4'] == 'ISFJ'

print(df[cond1&cond2]['age'].max())

 

[유형2] 집 값 예측(회귀)

(문제) 집 값 예측 / 예측할 변수 ['SalePrice'] / 평가 : rmse(낮을수록 좋은 성능), r2(높을수록 좋은 성능)

 

ㅇ 문제 바로가기(캐글)

 

# 평가 지표 : rmse, r2

import numpy as np
from sklearn.metrics import r2_score, mean_squared_error
def rmse(y, y_pred):
    return np.sqrt(mean_squared_error(y, y_pred))

print("R2 : " + str(r2_score(y_val, pred)))
print("RMSE : " + str(rmse(y_val, pred)))

 

(풀이)

import pandas as pd
# X_train = pd.read_csv('X_train.csv')
# X_test = pd.read_csv('X_test.csv')

######### EDA
# print(X_train.shape, X_test.shape)
# print(X_train.info(), X_test.info())

######## 데이터전처리
# 결측치 처리 (범주형데이터 제외, 수치형데이터 평균값 대체)
# print(X_train.isnull().sum().sort_values(ascending=False)[0:30])
X_train = X_train.select_dtypes(exclude = 'object').copy()
X_test = X_test.select_dtypes(exclude = 'object').copy()
# print(X_train.isnull().sum().sort_values(ascending=False)[0:30], X_test.isnull().sum().sort_values(ascending=False)[0:30])
# GarageYrBlt(train) / MasVnrArea (test) 결측치
m = X_train['GarageYrBlt'].mean()
n = X_test['MasVnrArea'].mean()
# print(m, n)
X_train['GarageYrBlt'] = X_train['GarageYrBlt'].fillna(m)
X_test['MasVnrArea'] = X_test['MasVnrArea'].fillna(n)
# print(X_train.isnull().sum().sort_values(ascending=False)[0:30], X_test.isnull().sum().sort_values(ascending=False)[0:30])

# 학습에 필요한 컬럼 정의
target = y_train['SalePrice']

######## 피처엔지니어링
# 수치형 : MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
# print(X_train.head(3), X_test.head(3))
X_train = scaler.fit_transform(X_train)
X_test= scaler.transform(X_test)
# print(X_train.head(3), X_test.head(3))

######## 모델, 평가 생성, 하이퍼파라미터 조정
# 훈련/검증 데이터 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(X_train, target, test_size=0.1, random_state=2022)
# print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# 평가 지표 : rmse, r2
from sklearn.metrics import r2_score, mean_squared_error
def rmse(y, y_pred):
    return np.sqrt(mean_squared_error(y, y_pred))

# Xgboost
from xgboost import XGBRegressor
model = XGBRegressor()
model.fit(X_tr, y_tr)
pred = model.predict(X_val)
# print("R2 : " + str(r2_score(y_val, pred)))
# print("RMSE : " + str(rmse(y_val, pred)))

######### 최종값 생성 및 파일 제출
model.fit(X_train, target)
pred = model.predict(X_test)
# print(pred)

submit = pd.DataFrame({
        'Id': y_test.Id,
    'SalePrice': pred
})

submit.to_csv('0000.csv', index=False)

# print(submit)

 

[유형3] 일원배치법(3개 그룹)

(문제) 세 가지 다른 교육방법(A,B,C)을 사용하여 수험생들의 시험 성적을 개선시키는 효과를 평가하고자 한다. 30명의 학생들을 무작위로 세 그룹으로 배정하여 교육을 실시하였고, 시험을 보고 성적을 측정하였습니다. 다음은 각 그룹의 학생들의 성적 데이터입니다.

ㅇ 귀무가설(H0) : 세 그룹(A, B, C) 간의 평균 성적 차이가 없다.

ㅇ 대립가설(H1) : 세 그룹(A, B, C) 간의 평균 성적 차이가 있다.

 

1. f값(소수 둘째자리)

2. p값(소수 여섯째자리)

3. 검정결과 출력

 

ㅇ 문제 바로가기(캐글)

 

# 일워배치법 : stats.f_oneway()

 

(풀이)

# 각 그룹의 데이터
groupA = [85, 92, 78, 88, 83, 90, 76, 84, 92, 87]
groupB = [79, 69, 84, 78, 79, 83, 79, 81, 86, 88]
groupC = [75, 68, 74, 65, 77, 72, 70, 73, 78, 75]


import pandas as pd
from scipy import stats

# print(dir(stats))
# print(help(stats.f_oneway)) F, p = f_oneway(a, b, c)

f, p = stats.f_oneway(groupA, groupB, groupC)
# print(f,p)

# 1번
print(round(f,2))

# 2번
print(round(p,6))

# 3번
print('p-vlau가 0.05보다 작으므로 귀무가설을 기각한다.')
320x100
반응형