작업 1유형#
Attention
DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p1.csv 데이터 출처 : 자체 제작 데이터 설명 : 학생 15명의 국어,수학,영어,과학 시험 점수이다. 각 학생은 4과목 중 3과목을 선택해서 시험봤다.
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p1.csv')
df.head(5)
학생 | 국어 | 수학 | 영어 | 과학 | |
---|---|---|---|---|---|
0 | ID_0 | 63.0 | NaN | 79.0 | 84.0 |
1 | ID_1 | 91.0 | 93.0 | NaN | 73.0 |
2 | ID_2 | 59.0 | 55.0 | NaN | 56.0 |
3 | ID_3 | 71.0 | 83.0 | 82.0 | NaN |
4 | ID_4 | 62.0 | 72.0 | 56.0 | NaN |
1-1
국어,수학,영어,과학 과목 중 가장 많은 학생들이 응시한 시험을 선택하고 해당과목의 점수를 표준화 했을 때 가장 큰 표준화 점수를 구하여라
Show code cell source
import numpy as np
sub = df.iloc[:,1:].count().idxmax()
std = df[sub]
r = ((df[sub] - df[sub].mean()) / df[sub].std(ddof=0)).max() # 모표준편차 ddof=0
print(r)
# scipy
from scipy.stats import zscore
result = zscore(df[sub].dropna()).max()
1.713855688712825
Attention
DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p2.csv 데이터 출처 : 자체제작 32개 변수의 수치값
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p2_.csv')
df.head(5)
var_1 | var_2 | var_3 | var_4 | var_5 | var_6 | var_7 | var_8 | var_9 | var_10 | ... | var_23 | var_24 | var_25 | var_26 | var_27 | var_28 | var_29 | var_30 | var_31 | var_32 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | -0.335864 | -2.425701 | 0.452851 | -1.381924 | -0.425591 | -1.461498 | -0.417082 | -0.944226 | -0.351224 | 1.474046 | ... | 1.715714 | 0.300227 | 0.439828 | -0.094772 | 1.551995 | 3.308446 | -0.391377 | 1.963829 | -1.458605 | -0.348652 |
1 | 0.803535 | -0.699433 | 0.095579 | 0.788053 | -0.267674 | -0.370746 | 0.636034 | -1.674584 | -0.058465 | -1.188973 | ... | -1.348879 | -0.899480 | -1.271886 | 0.333734 | -0.373565 | -2.091508 | -0.715245 | -0.688441 | 0.910927 | -0.746899 |
2 | -0.408470 | -0.361105 | -0.857278 | 0.338294 | 2.317821 | -0.099928 | 0.557053 | -0.847932 | 0.973471 | 0.101203 | ... | -0.388353 | 0.918553 | -1.984422 | 0.385055 | 1.161414 | -1.280253 | 2.831802 | -0.953771 | -0.228466 | 0.766254 |
3 | -0.690599 | 0.777928 | -0.079963 | 0.164086 | 1.721702 | 0.146761 | -0.988636 | 0.885344 | 0.647053 | 0.674609 | ... | 0.337074 | -1.406224 | -0.699728 | -0.836068 | -0.226315 | 1.260893 | -0.781630 | -0.219995 | 0.871289 | 0.017578 |
4 | 0.179819 | -0.668267 | 0.381849 | -0.884196 | 0.758519 | -1.026190 | 0.986227 | -1.663167 | 2.290551 | 0.564845 | ... | -0.700137 | -0.153825 | -1.835313 | 0.182131 | 0.890247 | 0.024791 | 1.489955 | 1.276357 | -0.285144 | 1.066486 |
5 rows × 32 columns
1-2
32개의 변수간 상관관계를 확인 했을 때, var_11 컬럼과 상관계수의 절댓값이 가장 큰 변수를 찾아 해당 변수의 평균값을 구하여라
Show code cell source
max_v = df.corr()['var_11'].abs().sort_values().index[-2]
r = df[max_v].mean()
print(r)
-0.06289356546077182
Attention
DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p3.csv
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p3.csv')
df.head(5)
var_1 | var_2 | var_3 | var_4 | var_5 | var_6 | var_7 | var_8 | var_9 | var_10 | var_11 | var_12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | -0.401584 | 0.007198 | -0.134910 | -0.419514 | -0.686331 | -1.174550 | -0.499150 | -0.557510 | 0.357347 | 0.844209 | 0.082097 | 0.475098 |
1 | 1.064622 | -0.531247 | 0.571185 | -0.762243 | -1.456043 | 0.355432 | 0.880010 | 0.523183 | -0.141733 | 0.301472 | 0.840299 | -0.045113 |
2 | 0.900195 | -1.148496 | -0.718437 | -2.315266 | -0.755505 | 0.630923 | 0.586027 | 0.086497 | -0.381657 | -1.602532 | 1.566340 | -0.654105 |
3 | 1.199227 | -0.114200 | 0.101536 | -1.851971 | -0.672844 | 0.796077 | 0.644246 | -0.836296 | -1.707074 | 0.376281 | 1.303967 | 1.228015 |
4 | 0.607393 | 1.675917 | 1.063759 | -0.799493 | -0.959568 | -0.103007 | -0.245984 | -0.059492 | 0.293592 | -0.517044 | 0.100772 | 0.403833 |
1-3
**var_6 컬럼의 1,3사분위수 각각 IQR의 1.5배 벗어난 이상치의 숫자를 구하라 **
Show code cell source
q1 = df['var_6'].quantile(0.25)
q3 = df['var_6'].quantile(0.75)
iqr = q3-q1
min_ = q1 - 1.5 * iqr
max_ = q3 + 1.5 * iqr
r= df[(df['var_6'] <min_) | (df['var_6'] >max_)].shape[0]
print(r)
8
작업 2유형#
Attention
제주업종별카드이용정보 : https://www.jejudatahub.net/data/view/data/1048 후처리 train = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p2_train2.csv test = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p2_test2.csv
종속변수 :이용금액 , 평가지표 : rmse
import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p2_train2.csv')
test = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p2_test2.csv')
display(train.head(2))
test.head(2)
ID | 연월 | 업종명 | 이용자구분 | 성별 | 이용자수 | 이용건수 | 이용금액 | |
---|---|---|---|---|---|---|---|---|
0 | ID_5020 | 202201 | 여관업 | 법인 | 알수없음 | 7693 | 12105 | 3049021809 |
1 | ID_5021 | 202201 | 여관업 | 제주도민 | 남성 | 3990 | 4291 | 294163241 |
ID | 연월 | 업종명 | 이용자구분 | 성별 | 이용자수 | 이용건수 | |
---|---|---|---|---|---|---|---|
0 | ID_2575 | 201911 | 한식 음식점업 | 제주도민 | 여성 | 153363 | 163462 |
1 | ID_6637 | 202305 | 건강보조식품 소매업 | 법인 | 알수없음 | 136 | 144 |
Show code cell source
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.ensemble import RandomForestRegressor
import numpy as np
from sklearn.preprocessing import LabelEncoder
y = train['이용금액']
x = train.drop(columns =['이용금액'])
l = LabelEncoder()
l.fit(x['업종명'])
pre_x = x.copy()
pre_x = pre_x.drop(columns ='ID')
pre_x['업종명'] = l.fit_transform(x['업종명'])
dum_x = pd.get_dummies(pre_x)
test_x = test.drop(columns =['ID'])
test_x['업종명'] = l.transform(test_x['업종명'])
dum_test = pd.get_dummies(test_x)
x_train,x_test,y_train,y_test = train_test_split(dum_x,y)
rr = RandomForestRegressor(random_state =1)
rr.fit(x_train,y_train)
pred = rr.predict(x_test)
print('test rmse', 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.head()
# sumission.to_csv('00000000.csv',index=Fasle)
#rmse값이 2억.. 크더라도 당황하지 말아요.. 날짜 데이터에 대한 후처리, 업종명에 대해 후처리 등의 접근을 추가로 해볼 여지가 있어보입니다~!
test rmse 221994382.9171271
ID | price | |
---|---|---|
0 | ID_2575 | 8.770071e+09 |
1 | ID_6637 | 4.158916e+07 |
2 | ID_5704 | 2.335561e+06 |
3 | ID_3606 | 2.303795e+06 |
4 | ID_6443 | 6.095615e+05 |
작업 3유형#
Attention
데이터url = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p3_1.csv 종속변수 : Target
import pandas as pd
df=pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p3_1.csv')
df.head()
Target | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | v9 | ... | v12 | v13 | v14 | v15 | v16 | v17 | v18 | v19 | v20 | v21 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 21.650072 | 0.496714 | -0.138264 | 0.647689 | 1.523030 | -0.234153 | -0.234137 | 1.579213 | 0.767435 | -0.469474 | ... | -0.465730 | 0.241962 | -1.913280 | -1.724918 | -0.562288 | -1.012831 | 0.314247 | -0.908024 | -1.412304 | 1.465649 |
1 | -19.469855 | -0.225776 | 0.067528 | -1.424748 | -0.544383 | 0.110923 | -1.150994 | 0.375698 | -0.600639 | -0.291694 | ... | -0.013497 | -1.057711 | 0.822545 | -1.220844 | 0.208864 | -1.959670 | -1.328186 | 0.196861 | 0.738467 | 0.171368 |
2 | -24.475600 | -0.115648 | -0.301104 | -1.478522 | -0.719844 | -0.460639 | 1.057122 | 0.343618 | -1.763040 | 0.324084 | ... | 0.611676 | 1.031000 | 0.931280 | -0.839218 | -0.309212 | 0.331263 | 0.975545 | -0.479174 | -0.185659 | -1.106335 |
3 | 13.476831 | -1.196207 | 0.812526 | 1.356240 | -0.072010 | 1.003533 | 0.361636 | -0.645120 | 0.361396 | 1.538037 | ... | -2.619745 | 0.821903 | 0.087047 | -0.299007 | 0.091761 | -1.987569 | -0.219672 | 0.357113 | 1.477894 | -0.518270 |
4 | 3.505322 | -0.808494 | -0.501757 | 0.915402 | 0.328751 | -0.529760 | 0.513267 | 0.097078 | 0.968645 | -0.702053 | ... | -1.463515 | 0.296120 | 0.261055 | 0.005113 | -0.234587 | -1.415371 | -0.420645 | -0.342715 | -0.802277 | -0.161286 |
5 rows × 22 columns
3-1
선형관계 가장 큰 변수 찾아 상관계수를 구하여라
Show code cell source
r = df.corr()['Target'].sort_values()[-2]
print(r)
0.6270251925517436
3-2
Target 변수를 종속변수로 하여 다중선형회귀모델링을 진행했을 때 v2 컬럼의 회귀 계수는?
Show code cell source
import numpy as np
import pandas as pd
import statsmodels.api as sm
# 다중선형회귀분석
X = df.drop('Target', axis=1)
X = sm.add_constant(X) # 상수항 추가
y = df['Target']
model = sm.OLS(y, X).fit()
print(model.params['v2'])
6.440301364843057
3-3
회귀 계수들이 가지는 p값들 중 최대 값은?
Show code cell source
r = model.pvalues.max()
print(r)
0.9265545986906869
Attention
심장병 발병 예측 / 종속변수 target 1: 발병
데이터 출처 : uci머신러닝 데이터 url : https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p3_t.csv train 데이터는 앞의 210개 행을, test데이터는 나머지 부분을 사용한다
import pandas as pd
df= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e7_p3_t.csv')
df.head()
age | sex | cp | trestbps | chol | fbs | restecg | thalach | exang | oldpeak | slope | ca | thal | target | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 63.0 | 1.0 | 1.0 | 145.0 | 233.0 | 1.0 | 2.0 | 150.0 | 0.0 | 2.3 | 3.0 | 0.0 | 6.0 | 0 |
1 | 67.0 | 1.0 | 4.0 | 160.0 | 286.0 | 0.0 | 2.0 | 108.0 | 1.0 | 1.5 | 2.0 | 3.0 | 3.0 | 1 |
2 | 67.0 | 1.0 | 4.0 | 120.0 | 229.0 | 0.0 | 2.0 | 129.0 | 1.0 | 2.6 | 2.0 | 2.0 | 7.0 | 1 |
3 | 37.0 | 1.0 | 3.0 | 130.0 | 250.0 | 0.0 | 0.0 | 187.0 | 0.0 | 3.5 | 3.0 | 0.0 | 3.0 | 0 |
4 | 41.0 | 0.0 | 2.0 | 130.0 | 204.0 | 0.0 | 2.0 | 172.0 | 0.0 | 1.4 | 1.0 | 0.0 | 3.0 | 0 |
3-4
train 데이터로 target을 종속변수로 로지스틱 회귀를 진행할 때 age 컬럼의 오즈비를 구하여라
Show code cell source
import pandas as pd
import numpy as np
import statsmodels.api as sm
train = df.iloc[:210].reset_index(drop=True)
test = df.iloc[210:].reset_index(drop=True)
# 종속변수와 독립변수 설정
X = train.drop('target', axis=1)
y = train['target']
# 로지스틱 회귀모형 적합
model = sm.Logit(y, X).fit()
# age의 weight 오즈비 계산
odds_ratios = np.exp(model.params['age'])
odds_ratios
Optimization terminated successfully.
Current function value: 0.343347
Iterations 7
0.9562078844664191
3-5
train으로 로지스틱 회귀 진행했을 경우 잔차 이탈도 (residual deviance)를 계산하라
Show code cell source
# 로지스틱 회귀모형 적합 (GLM 사용) -> 이항분포시 로지스틱회귀
model2 = sm.GLM(y, X, family=sm.families.Binomial()).fit()
# 잔차 이탈도(residual deviance) 계산
residual_deviance = model2.deviance
print(residual_deviance)
#model2.summary()
#model.summary()
# 결과 비교해보기
144.205620063278
3-6
train으로 로지스틱 회귀 진행했을 경우 로짓 우도값을 도출하라
#
3-7
test 데이터의 독립변수로 target 예측 후 오류율을 구하여라
Show code cell source
pred = (model.predict(test.drop(columns=['target'])) >0.5).astype('int')
from sklearn.metrics import accuracy_score
error_rate = 1- accuracy_score(test['target'],pred)
print(error_rate)
0.1954022988505747