[유형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보다 작으므로 귀무가설을 기각한다.')
'자격증공부 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 모의고사 1 (이상치, 분류(3개set), 쌍체T표본검정) (0) | 2023.06.30 |
---|---|
[빅데이터분석기사] 모의고사 5 (누적합, 결측치, 이상치, 정렬, 회귀, 정규분포검증) (0) | 2023.06.30 |
[빅데이터분석기사][작업형2] 5회 기출문제 풀이(회귀) (0) | 2023.06.22 |
[빅데이터분석기사][작업형1] 4회 기출문제 풀이(기초통계, 날짜) (0) | 2023.06.22 |
[빅데이터분석기사][작업형2] 4회 기출문제 풀이 (분류, 2개 데이터set) (0) | 2023.06.19 |