import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import scipy.stats as stats # 수도권 normal(x,y,z) x -> 평균, y-> 분산, z -> 갯수 house_a = np.random.normal(6, 5, 40) # 지방 house_b = np.random.normal(5.5, 5, 40) # array를 list로 변환후 데이터프레임으로 감싸기 pd.DataFrame(house_a.tolist()) tmp1 = pd.concat([pd.DataFrame(['B']*40), pd.DataFrame(house_b.tolist())],axis=1) tmp2 = pd.concat([pd.DataFrame(['A']*40), pd.DataFrame(house_a.tolist())],axis=1) df = pd.concat([tmp1, tmp2], axis=0) # 데이터의 열 이름 변경 df.columns = ['grp', 'value'] sns.boxplot(x='grp', y='value', data=df) plt.show()
# 등분산성 검정 # 귀무가설: 수도권(grp A), 지방(grp B) 집값의 분산이 같다 # 대립가설: 수도권(grp A), 지방(grp B) 집값의 분산이 다르다 stats.levene(np.array(df[df['grp'] == 'A']['value']), np.array(df[df['grp'] == 'B']['value'])) # t검정 stats.ttest_ind(np.array(df[df['grp'] == 'A']['value']), np.array(df[df['grp'] == 'B']['value']), equal_var=True)
등분산 결과 pvalue=0.702027608205829 로 유의수준 0.05보다 큼으로 귀무가설을 기각해 등분산성이 없다고 판단된다 .
t 검정 결과 pvalue=0.9330675569599344 로 유의수준 0.05보다 큼으로 귀무가설을 기각해 모집단 간의 평균의 차이가 있다고 판단된다.