3 분 소요

직전에 보고 들어갈 내용들만 정리

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'])

r = model.pvalues.max()
print(r)
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)
# train 데이터로 target을 종속변수로 로지스틱 회귀를 진행할 때 age 컬럼의 오즈비를 구하여라
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
# 로지스틱 회귀모형 적합 (GLM 사용) -> 이항분포시 로지스틱회귀
model2 = sm.GLM(y, X, family=sm.families.Binomial()).fit()

# 잔차 이탈도(residual deviance) 계산
residual_deviance = model2.deviance
print(residual_deviance)
# test 데이터의 독립변수로 target 예측 후 오류율을 구하여라
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)
# 각 구급 보고서 별 출동시각과 신고시각의 차이를 ‘소요시간’ 컬럼을 만들고 초(sec)단위로 구하고 소방서명 별 소요시간의 평균을 오름차순으로 정렬 했을때 3번째로 작은 소요시간의 값과 소방서명을 출력하라df['소요시각'] = (
                pd.to_datetime(
                    df['출동일자'].astype('str') + df['출동시각'].astype('str').str.zfill(6)
                )

                - 
    
                pd.to_datetime(
                    df['신고일자'].astype('str') + df['신고시각'].astype('str').str.zfill(6)
                )
                ).dt.total_seconds()
# 5대 범죄(절도, 사기, 배임, 방화, 폭행)의 월별 총 발생건수를 총범죄수라고 표현하자. 18,19년의 각각 분기별 총범죄수의 월평균 값을 구했을때 최대값을 가지는 년도와 분기를 구하고 해당 분기의 최댓값의 사기가 발생한 월의 사기 발생건수를 출력하라(1분기:1,2,3월 / 2분기 : 4,5,6월 / 3분기 7,8,9월 / 4분기 10,11,12월 , 1분기 월평균 : 1,2,3월의 총범죄수 평균)
df['총범죄수'] = df['절도']  +df['사기']  +df['배임']  +df['방화']  +df['폭행']
df['분기'] = [x+'_'+str(y) for x in ['2018','2019'] for y in range(1,5) for z in range(3)]

max_ = df.groupby(['분기'])['총범죄수'].mean().sort_values().index[-1] # '2019_02'
result = df[df.분기 ==max_].사기.max()
print(result)
# 칼럼 숫자 맞추기(dum_test 열을 dum_x 열에 맞춤)
dum_test = dum_test.reindex(columns = dum_x.columns, fill_value=0)
# 데이터 배열 생성 (빈도로 변환)
data = np.array([[smoking_male, non_smoking_male], [smoking_female, non_smoking_female]])

# 카이제곱 검정 수행
# 입력에 넘파이 배열, 판다스 데이터프레임 모두 지원
chi2_stat, p_val, dof, expected = chi2_contingency(data)

# 카이제곱검정 독립성 검정 통계량을 소숫점 이하 3자리까지 구하여라
from scipy.stats import chi2_contingency
crosstab = pd.crosstab(df["학과"], df["성별"])
s, p, _, _ = chi2_contingency(crosstab)

round_s = round(s, 3)
round_s
import statsmodels.api as sm
# 상수항 추가
X = sm.add_constant(df[['age', 'Cholesterol']]) 
# y, x 순서로 입력
model = sm.OLS(df['weight'], X)
results = model.fit()

# 전체 회귀 결과 출력
# print(results.summary())

# params 속성 => 회귀계수
print(results.params['age'])
# age가 고정일 때 Cholesterol와 weight가 선형관계에 있다는 가설을 유의수준 0.05하에 검정하라
# pvalues 속성
H = results.pvalues['Cholesterol']

if H <0.05 : 
    print('선형 관계에 있다.')
    
else:
    print('선형 관계에 없다.')
# 사용자 정의함수 & 데이터에 함수 매핑하는법
def category(x):
    if x >=25:
        return 'a'
    
    elif x >=23:
        return 'b'

    elif x >= 18.5:
        return 'c'
    
    else:
        return 'd'
    
df['bmi'] = df[df.columns[2]] / (df[df.columns[1]] /100)**2
df['bmi_category'] = df['bmi'].map(category)
#t분포 양쪽 꼬리에서의 t 값을 구하여라 (반올림하여 소수4째자리까지)
import numpy as np
from scipy.stats import t

std = np.std(df.height, ddof=1)
n = len(df.height)

# 신뢰수준, 자유도
confidence_level = 0.95
ddof = n - 1

# t 분포의 양쪽 꼬리에서의 t값
t_value = round(t.ppf((1 + confidence_level) / 2, ddof),4)
print(t_value)

lower = round(mean - t_value * std / np.sqrt(n), 3)
# 3 그룹의 데이터에 대해 크루스칼-왈리스 검정을 사용하여 검정 통계량을 반올림하여 소숫점 이하 3자리까지 구하여라
from scipy.stats import kruskal
a = df[df["ID"] == 'A'].value.values
b = df[df["ID"] == 'B'].value.values
c = df[df["ID"] == 'C'].value.values

# s, p = kruskal([a, b, c]) # 틀림
s, p = kruskal(a, b, c) # 배열이 아닌 그룹들이 들어간다
print(round(s, 3))

# 3 그룹의 데이터에 대해 크루스칼-왈리스 검정을 사용하여 p-value를 반올림하여 소숫점 이하 3자리까지 구하여라. 귀무가설과 대립가설중 0.05 유의수준에서 유의한 가설을 출력하라
round_p = round(p, 3) # 0.05 기준으로 검정
df.loc[:,'Temperature_f'] = df['Temperature'].str.replace('*','',regex=True).astype('float')
# 입력된 '*'를 정규식 패턴으로 인식.
# 즉, 모든 문자열에 대해 ''로 대체
# 어느 학교에서 수학 시험을 본 학생 100명 중 60명이 60점 이상을 받았다. 이 학교의 수학 시험의 평균 점수가 50점 이상인지 95%의 신뢰 수준에서 검정하려한다.

# 검정 통계량을 소숫점 이하 3자리에서 구하시오

import numpy as np
n = 100
p_hat = 0.6 # 60 / 100
p = 0.5 # 50 / 100
alpha = 0.05

# 검정 통계량 계산
z = round((p_hat - p) / np.sqrt(p * (1 - p) / n),5)
print(z)

# pvalue를 소숫점 이하 3자리까지 구하고 귀무가설과 대립가설중 유의한 것을 출력하라

from scipy.stats import norm
p_value = round(1 - norm.cdf(z),3)

print(p_value)
print('대립')

댓글남기기