3회 기출 변형#

  • 작업 3유형 통계 반영

Hits

광고 한번 눌러주시겠나요

작업 1유형#

import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_1.csv')
df.head(5)
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value ocean_proximity
0 -122.23 37.88 41.0 880.0 129.0 322.0 126.0 8.3252 452600.0 NEAR BAY
1 -122.22 37.86 21.0 7099.0 1106.0 2401.0 1138.0 8.3014 358500.0 NEAR BAY
2 -122.24 37.85 52.0 1467.0 190.0 496.0 177.0 7.2574 352100.0 NEAR BAY
3 -122.25 37.85 52.0 1274.0 235.0 558.0 219.0 5.6431 341300.0 NEAR BAY
4 -122.25 37.85 52.0 1627.0 280.0 565.0 259.0 3.8462 342200.0 NEAR BAY

1-1

결측치가 하나라도 존재하는 행의 경우 경우 해당 행을 삭제하라. 그후 남은 데이터의 상위 70%에 해당하는 데이터만 남겨둔 후 median_income 컬럼의 1분위수를 반올림하여 소숫점이하 2째자리까지 구하여라

Hide code cell source
df = df.dropna().reset_index(drop=True)
df_filter = df.iloc[:int(len(df)*0.7)]
result = df_filter['median_income'].quantile(0.25).round(2)
print(result)
2.51
import pandas as pd
df =pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_2.csv')
df.head()
Country Name Country Code Year Value
0 Arab World ARB 1968 2576068.3
1 Arab World ARB 1969 2843420.4
2 Arab World ARB 1970 3138550.0
3 Arab World ARB 1971 3642691.0
4 Arab World ARB 1972 4331605.7

1-2

1990년도는 해당년도 평균 이하 GDP를 가지지만, 2010년도에는 해당년도 평균 이상 GDP를 가지는 국가의 숫자를 구하여라

Hide code cell source
df_1990 = df[df.Year ==1990]
df_2010 = df[df.Year ==2010]


df_1990_filter = df_1990[df_1990.Value <= df_1990.Value.mean()]
df_2010_filter = df_2010[df_2010.Value >= df_2010.Value.mean()]

result = len(set(df_2010_filter['Country Code']) & set(df_1990_filter['Country Code']))
print(result)
5
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_3.csv')
df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3.0 Braund, Mr. Owen Harris male 22.0 1.0 0.0 A/5 21171 7.2500 NaN S
1 2 1 1.0 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1.0 0.0 PC 17599 71.2833 C85 C
2 3 1 3.0 Heikkinen, Miss. Laina female 26.0 0.0 0.0 STON/O2. 3101282 7.9250 C85 S
3 4 1 1.0 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1.0 0.0 113803 53.1000 C123 S
4 5 0 3.0 Allen, Mr. William Henry male 35.0 0.0 0.0 373450 8.0500 C123 S

1-3

데이터에서 결측치가 가장 많은 컬럼을 출력하라

Hide code cell source
result = df.isnull().sum().sort_values().index[-1]
print(result)
Fare

작업 2유형#

Attention

여행자 보험 가입여부 분류 : https://www.kaggle.com/datasets/tejashvi14/travel-insurance-prediction-data
DataUrl(train) = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p2_train_.csv
DataUrl(test) = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p2_test_.csv
종속 변수 : TravelInsurance , TravelInsurance가 1일 확률을 구해서 제출하라. 평가지표 : auc
제출 파일의 컬럼은 ID, proba 두개만 존재해야한다.

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()
ID Age Employment Type GraduateOrNot AnnualIncome FamilyMembers ChronicDiseases FrequentFlyer EverTravelledAbroad TravelInsurance
0 1008 26 Private Sector/Self Employed Yes 1400000 5 0 No Yes 1
1 199 30 Private Sector/Self Employed No 1450000 5 0 Yes Yes 1
2 86 32 Government Sector Yes 900000 4 0 No No 0
3 560 26 Private Sector/Self Employed Yes 1400000 7 0 No Yes 1
4 161 34 Private Sector/Self Employed No 1400000 3 1 No Yes 1
Hide code cell source
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split


train_drop = train.drop(columns =['ID'])
train_y = train_drop['TravelInsurance']
train_x = train_drop.drop(columns =['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=1)

dum_val_train_x = pd.get_dummies(val_train_x)
dum_val_test_x = pd.get_dummies(val_test_x)[dum_val_train_x.columns]


rf = RandomForestClassifier(random_state =14)
rf.fit(dum_val_train_x, val_train_y)

val_pred = rf.predict_proba(dum_val_test_x)[:,1]

print('test_auc' , roc_auc_score(val_test_y,val_pred))


test_drop = test.drop(columns =['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('000000000.csv',index=False)
test_auc 0.8268327067669172
ID proba
0 6 0.014286
1 9 0.410000
2 20 0.067333
3 21 0.208167
4 23 0.050000

작업 3유형#

Attention

다이어트약의 전후 체중 변화 기록이다. 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()
ID 투약전 투약후
0 user_1 55.137 56.106
1 user_2 66.584 60.409
2 user_3 52.259 50.639
3 user_4 77.081 69.164
4 user_5 62.677 57.622

3-1-a

A등급에 해당하는 유저는 몇명인지 확인하라

Hide code cell source
df['dels'] = df['투약후'] - df['투약전']

def groupby_filter(x):
    if x <=-3:
        return 'A'
    
    elif x <=0:
        return 'B'
    
    else:
        return 'C'
    
df['groupby'] = df['dels'].apply(groupby_filter)
result = df['groupby'].value_counts().sort_index()['A']
print(result)
121

3-1-a

카이제곱검정 통계량을 반올림하여 소숫점 이하 3째자리까지 구하여라

Hide code cell source
target = df['groupby'].value_counts().sort_index().to_frame()
target['expected'] = [target['groupby'].sum()*0.5,target['groupby'].sum()*0.25,target['groupby'].sum()*0.25]

from scipy.stats import chisquare
s,p = chisquare(target['groupby'],target['expected'])

round_s = round(s,3)
print(round_s)
3.613

3-1-a

카이제곱 검정 p값을 반올림하여 소숫점 이하 3자리까지 구하고, 유의수준 0.05하에서 귀무가설과 대립가설중 유의한 가설을 하나를 선택하시오(귀무/대립)

Hide code cell source
round_p = round(p,3)
print(round_p)
print('귀무')
0.164
귀무

Attention

다이어트약의 전후 체중 변화 기록이다. 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()
rpm group
0 163.6 A
1 246.9 A
2 234.9 A
3 156.9 A
4 226.6 A

3-2-a

A,B 공장 각각 정규성을 가지는지 샤피로 검정을 통해 확인하라. (각 공장의 pvalue 출력할 것)

Hide code cell source
from scipy.stats import shapiro

# 10-1 a,b 상황 각각 정규성을 가지는지 샤피로 검정을 통해 확인하라.
a = df[df['group']=='A'].rpm
b =  df[df['group']=='B'].rpm
print(shapiro(a)) #pvalue=0.397
print(shapiro(b)) #pvalue=0.956
ShapiroResult(statistic=0.9863898158073425, pvalue=0.397915244102478)
ShapiroResult(statistic=0.9943947196006775, pvalue=0.9562925100326538)

3-2-b

A,B 공장 생산 제품의 rpm은 각각 정규성을 가지는지 샤피로 검정을 통해 확인하라. (각 공장의 pvalue 출력할 것)

Hide code cell source
from scipy.stats import levene
s , p =levene(a,b)
round_p = round(p,3)
print(round_p)
0.904

3-2-c

대응 표본 t 검정을 통해 B공장 제품들의 rpm이 A 공장 제품의 rpm보다 크다고 말할 수 있는지 검정하라. pvalue를 소숫점 이하 3자리까지 출력하고 귀무가설, 대립가설 중 하나를 출력하라*

Hide code cell source
from scipy.stats import ttest_rel
s , p =ttest_rel(b,a,alternative='greater')
round_p = round(p,3)
print(round_p)
print('대립')
0.009
대립