빅데이터 분석기사 실기 5회
1유형
1번
##### 5회 #####
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p1_1_.csv')
df.head(5)
# 20L가격과 5L가격이 모두 0원이 아닌 데이터만 필터를 한 후,
# 각 row별로 20L가격과 5L가격의 차이를 ‘차이가격’ 이라 부른다고 하자.
# 시도명 별 차이가격의 평균가격을 비교할때
# 그 값이 가장 큰 금액을 반올림하여
# 소숫점 이하 1자리까지 구하여라
filtered_df = df[(df["20L가격"] != 0) & (df["5L가격"] != 0)]
filtered_df["차이가격"] = df["20L가격"] - df["5L가격"]
result = filtered_df.groupby(["시도명"])["차이가격"].mean().sort_values().max().round(1)
result
# BMI는 몸무게(kg) / (키(M) * 키(M)) 로 정의 된다.
# 초고도 비만은 BMI 25이상 , 고도 비반은 BMI 25미만 - 23이상 , 정상은 23미만 - 18.5이상 저체중은 18.5미만으로 정의 된다.
# 주어진 데이터에서 초고도비만 인원 + 저체중 인원 의 숫자는?
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p1_2_.csv')
df.head(5)
df["bmi"] = (df["weight(kg)"]) / (df["height(cm)"] * df["height(cm)"] / 10000)
df
# BMI는 몸무게(kg) / (키(M) * 키(M)) 로 정의 된다.
# 초고도 비만은 BMI 25이상 , 고도 비반은 BMI 25미만 - 23이상 , 정상은 23미만 - 18.5이상 저체중은 18.5미만으로 정의 된다.
# 주어진 데이터에서 초고도비만 인원 + 저체중 인원 의 숫자는?
def classify(bmi) :
if bmi >= 25 :
return "초고도"
elif bmi >= 23 :
return "고도"
elif bmi >= 18.5 :
return "정상"
else :
return "저체중"
df["bmi_category"] = df["bmi"].map(classify)
result = df[df["bmi_category"].isin(["초고도", "저체중"])].shape[0]
result
2번
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p1_3.csv')
df.head(5)
df["순유입인원"] = df[[x for x in df.columns if "전입" in x]].sum(axis = 1)\
- df[[x for x in df.columns if "전출" in x]].sum(axis = 1)
result = df.groupby(["년도"])["순유입인원"].max().sum()
result
2유형
1번
##### 2유형 #####
import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p2_train_.csv')
test = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p2_test_.csv')
display(train.head(2))
test.head(2)
# 예측 변수 price, test.csv에 대해
# ID별로 price 값을 예측하여 제출,
# 제출 데이터 컬럼은 ID와 price 두개만 존재해야함.
# 평가지표는 rmse
from sklearn.ensemble import RandomForestRegressor
# 훈련용 정답 데이터
y = train["price"]
x = train.drop(columns = ["price", "ID"])
# 테스트용 데이터
test_x = test.drop(columns = ["ID"])
# 훈련데이터에서 불필요한 열 제거 후, 원핫인코딩한 데이터
dum_x = pd.get_dummies(x)
dum_test = pd.get_dummies(test_x)
dum_test = dum_test.reindex(columns = dum_x.columns, fill_value = 0) # 훈련데이터 칼럼과 일치
x_train, x_test, y_train, y_test = train_test_split(dum_x, y) # 전처리한 데이터 분할
rr = RandomForestRegressor()
rr.fit(x_train, y_train)
pred = rr.predict(x_test)
print(np.sqrt(mean_squared_error(y_test, pred)))
pred_test = rr.predict(dum_test)
sumission = pd.DataFrame()
sumission["ID"] = test["ID"]
sumission["price"] = pred_test
sumission
3유형
1번
3 그룹의 데이터에 대해 크루스칼-왈리스 검정을 사용하여 p-value를 반올림하여 소숫점 이하 3자리까지 구하여라. 귀무가설과 대립가설중 0.05 유의수준에서 유의한 가설을 출력하라
# 어느 학교에서 추출한 55명 학생들의 키 정보이다.
# DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p3_1.csv 이 학생들의 키의 95% 신뢰구간을 구하고자 한다.
import pandas as pd
df= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p3_1.csv')
df.head()
mean = df["height"].mean().round(3)
mean
# t분포 양쪽 꼬리에서의 t 값을 구하여라 (반올림하여 소수4째자리까지)
import numpy as np
from scipy.stats import t
std = np.std(df["height"], ddof = 1)
n = df.shape[0]
confidence_level = 0.95
ddof = n - 1
alpha = 0.05
t_value = round(t.ppf((1 - alpha / 2), ddof), 4)
# t_value = round(t.ppf((1 + confidence_level) / 2, ddof), 4)
t_value
# 95% 신뢰구간을 구하여라(print(lower,upper) 방식으로 출력, 각각의 값은 소숫점 이하 3째자리까지)
lower = round(mean - t_value * std / np.sqrt(n), 3)
upper = round(mean + t_value * std / np.sqrt(n), 3)
print(lower, upper)
2번
import pandas as pd
df= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p3_2.csv')
print(df["ID"].unique())
print(df.head())
from scipy.stats import kruskal
# 3 그룹의 데이터에 대해 크루스칼-왈리스 검정을 사용하여 검정 통계량을 반올림하여 소숫점 이하 3자리까지 구하여라
a = df[df["ID"] == "A"]["value"].values
b = df[df["ID"] == "B"]["value"].values
c = df[df["ID"] == "C"]["value"].values
# s : 검정통계량, kruskal-wallis 검정의 결과로 계산된 h 통계량
# p : p-value, 유의확률
s, p = kruskal(a, b, c)
result = round(s, 3)
result
# 3 그룹의 데이터에 대해 크루스칼-왈리스 검정을 사용하여
# p-value를 반올림하여 소숫점 이하 3자리까지 구하여라.
# 귀무가설과 대립가설중 0.05 유의수준에서 유의한 가설을 출력하라
p = round(p, 3)
print(p) # 귀무가설 기각
print("대립")
댓글남기기