작업 1유형#
Attention
DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_1.csv 캘리포니아 집값 일부 변형 : https://www.kaggle.com/datasets/harrywang/housing?select=housing.csv)
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째자리까지 구하여라
Show 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
Attention
DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_2.csv 년도별 국가의 GDP : https://www.kaggle.com/datasets/tunguz/country-regional-and-world-gdp
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를 가지는 국가의 숫자를 구하여라
Show 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
Attention
DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e3_p1_3.csv 타이타닉 탑승자 생존 데이터 : https://www.kaggle.com/competitions/titanic
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
데이터에서 결측치가 가장 많은 컬럼을 출력하라
Show 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 |
Show 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등급에 해당하는 유저는 몇명인지 확인하라
Show 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째자리까지 구하여라
Show 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하에서 귀무가설과 대립가설중 유의한 가설을 하나를 선택하시오(귀무/대립)
Show 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 출력할 것)
Show 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 출력할 것)
Show 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자리까지 출력하고 귀무가설, 대립가설 중 하나를 출력하라*
Show 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
대립