빅데이터 분석기사 실기 3회
1유형
1번
##### 3회 #####
### 1유형 ###
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_1.csv')
df.head(5)
# 결측치가 하나라도 존재하는 행의 경우 경우 해당 행을 삭제하라.
# 그후 남은 데이터의 상위 70%에 해당하는 데이터만 남겨둔 후
# median_income 컬럼의 1분위수를 반올림하여
# 소숫점이하 2째자리까지 구하여라
df = df.dropna().reset_index(drop = True) # 결측치있는 행 제거후, 인덱스 재정렬
df_filter = df.iloc[:int(len(df) * 0.7)] # 상위 70%
result = df_filter["median_income"].quantile(0.25).round(2) # 1분위수 반올림
result
2번
# 1990년도는 해당년도 평균 이하 GDP를 가지지만,
# 2010년도에는 해당년도 평균 이상 GDP를 가지는 국가의 숫자를 구하여라
import pandas as pd
df =pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_2.csv')
df.head()
# 1990년 평균
mean_GDP_1990 = df[df["Year"] == 1990]["Value"].mean()
# 2010년 평균
mean_GDP_2010 = df[df["Year"] == 2010]["Value"].mean()
df_1990_filter = df[(df["Year"] == 1990) & df["Value"] <= mean_GDP_1990]
df_2010_filter = df[(df["Year"] == 2010) & df["Value"] >= mean_GDP_2010]
# df_1990_filter = df[(df[df["Year"] == 1990]["Value"] <= mean_GDP_1990)]
# df_2010_filter = df[(df[df["Year"] == 2010]["Value"] >= mean_GDP_2010)]
result = len(set(df_1990_filter["Country Code"]) & set(df_2010_filter["Country Code"])) # &연산 : 교집합
result
3번
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_3.csv')
df.head()
# 데이터에서 결측치가 가장 많은 컬럼을 출력하라
df.isnull().sum().sort_values().index[-1]
2유형
### 2유형 ###
import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p2_train_.csv')
test = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p2_test_.csv')
train.head()
# 종속 변수 : TravelInsurance , TravelInsurance가 1일 확률을 구해서 제출하라.
# 평가지표 : auc
# 제출 파일의 컬럼은 ID, proba 두개만 존재해야한다.
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
train_drop = train.drop(columns = ["ID"])
train_x = train_drop.drop(columns = ["TravelInsurance"])
train_y = train_drop["TravelInsurance"]
# stratify : train_y(TravelInsurance) 열 클래스의 비율 유지
val_train_x, val_test_x, val_train_y, val_test_y = train_test_split(train_x, train_y, stratify = train_y, random_state = 42)
# 범주형 변수를 원핫 인코딩
dum_val_train_x = pd.get_dummies(val_train_x)
# dum_val_train_x와 동일한 열을 가지도록 맞춘다
dum_val_test_x = pd.get_dummies(val_test_x)[dum_val_train_x.columns]
rf = RandomForestClassifier()
rf.fit(dum_val_train_x, val_train_y)
val_pred = rf.predict_proba(dum_val_test_x)[:, 1] # 클래스 1의 확률
# print("predict_proba : \n", val_pred)
# print(val_train_y)
print(roc_auc_score(val_test_y, val_pred))
test_drop = test.drop(columns = ["ID"]) # ID열 제거
dum_test = pd.get_dummies(test_drop)[dum_val_train_x.columns] # 열 맞추기
test_pred = rf.predict_proba(dum_test)[:, 1]
test_pred_df = pd.DataFrame(test_pred, columns = ["proba"])
summission = pd.concat([test["ID"], test_pred_df], axis = 1)
# display(summission.head())
summission.to_csv("abc.csv", index = False)
3유형
1번
##### 3유형 #####
### 1. ###
# 다이어트약의 전후 체중 변화 기록이다.
# DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p3_1.csv
# 투약 후 체중에서 투약 전 체중을 뺏을 때 값은 일반 적으로 세가지 등급으로 나눈다.
# -3이하 : A등급, -3초과 0이하 : B등급, 0 초과 : C등급.
# 약 실험에서 A,B,C 그룹간의 인원 수 비율은 2:1:1로 알려져 있다.
# 위 데이터 표본은 각 범주의 비율에 적합한지 카이제곱 검정하려한다.
import pandas as pd
df= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p3_1.csv')
df.head()
# A등급에 해당하는 유저는 몇명인지 확인하라
df["투약후-투약전"] = df["투약후"] - df["투약전"]
condition = (df["투약후-투약전"] <= -3)
df[condition].shape[0]
2번
# 다이어트약의 전후 체중 변화 기록이다.
# DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p3_1.csv
# 투약 후 체중에서 투약 전 체중을 뺏을 때 값은 일반 적으로 세가지 등급으로 나눈다.
# -3이하 : A등급, -3초과 0이하 : B등급, 0 초과 : C등급.
# 약 실험에서 A,B,C 그룹간의 인원 수 비율은 2:1:1로 알려져 있다.
# 위 데이터 표본은 각 범주의 비율에 적합한지 카이제곱 검정하려한다.
# 카이제곱검정 통계량을 반올림하여 소숫점 이하 3째자리까지 구하여라
from scipy.stats import chisquare
df["등급"] = pd.cut(df["투약후-투약전"], bins = [-float("inf"), -3, 0, float("inf")], labels = ['A', 'B', 'C'])
observed_counts = df["등급"].value_counts()
# observed_counts
total_count = observed_counts.sum()
total_count
expected_counts = [total_count * 2/4, total_count * 1/4, total_count * 1/4]
chi2, p_value = chisquare(f_obs = observed_counts, f_exp = expected_counts)
print(round(chi2, 3))
3번
# 카이제곱 검정 p값을 반올림하여 소숫점 이하 3자리까지 구하고, 유의수준 0.05하에서 귀무가설과 대립가설중 유의한 가설을 하나를 선택하시오(귀무/대립)
round(p_value, 3) # 귀무가설 채택
print("귀무")
4번
# 다이어트약의 전후 체중 변화 기록이다.
# DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p3_2.csv
# A,B 공장에서 생산한 기계들의 rpm 값들을 기록한 데이터이다.
# 대응 표본 t 검정을 통해
# B공장 제품들이 A 공장 제품들보다 rpm이 높다고 말할 수 있는지 검정하려한다
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p3_2_.csv')
df.head()
# A,B 공장 각각 정규성을 가지는지 샤피로 검정을 통해 확인하라. (각 공장의 pvalue 출력할 것)
from scipy.stats import shapiro
a = df[df["group"] == 'A']["rpm"]
b = df[df["group"] == 'B']["rpm"]
print(shapiro(a))
print(shapiro(b))
5번
#A,B 공장 생산 제품의 rpm은 각각 정규성을 가지는지 샤피로 검정을 통해 확인하라. (각 공장의 pvalue 출력할 것)
from scipy.stats import levene
s, p = levene(a, b)
round_p = round(p, 3)
print(round_p)
6번
from scipy.stats import ttest_rel
s, p = ttest_rel(b, a, alternative = "greater")
round_p = round(p, 3)
print(round_p) # 귀무가설 기각
print("대립")
댓글남기기