-
t-test 검정 문제(2) DB 예제, 정규성 확인Python 데이터 분석 2022. 11. 8. 17:19
[two-sample t 검정 : 문제3]
DB에 저장된 jikwon 테이블에서 총무부, 영업부 직원의 연봉의 평균에 차이가 존재하는지 검정하시오.
연봉이 없는 직원은 해당 부서의 평균연봉으로 채워준다.
# [two-sample t 검정 : 문제3] # DB에 저장된 jikwon 테이블에서 총무부, 영업부 직원의 연봉의 평균에 차이가 존재하는지 검정하시오. # 연봉이 없는 직원은 해당 부서의 평균연봉으로 채워준다. # 귀무 : 총무부, 영업부 직원의 연봉의 평균에 차이가 존재하지 않는다. # 대립 : 총무부, 영업부 직원의 연봉의 평균에 차이가 존재한다. import MySQLdb import pickle with open('mydb.dat', mode='rb') as obj: config = pickle.load(obj) try: conn = MySQLdb.connect(**config) cursor = conn.cursor() sql = """ select buser_name, jikwon_pay from jikwon JOIN buser ON buser_num = buser_no """ cursor.execute(sql) # datas = cursor.fetchall() # 이 방법도 있다. datas = pd.read_sql(sql, conn) df = pd.DataFrame(datas) df.columns = '부서명', '연봉' df.index = range(1, 31) # print(df.head(2)) # print("부서멸 연봉의 합 : ", df.groupby(['부서명'])['연봉'].sum()) print("부서별 연봉의 합 : ", df.groupby(['부서명'])['연봉'].mean()) a = df[df['부서명'] == '총무부'] a_pay_mean = a.loc[:,'연봉'] print(a_pay_mean) b = df[df['부서명'] == '영업부'] b_pay_mean = b.loc[:,'연봉'] print(b_pay_mean) print(stats.shapiro(a_pay_mean)) # pvalue=0.02604 < 0.05 이므로 정규성 불만족 print(stats.shapiro(b_pay_mean)) # pvalue=0.02560 < 0.05 이므로 정규성 불만족 print(stats.mannwhitneyu(a_pay_mean, b_pay_mean)) # 정규성 만족이 안 될 때 이 방법을 사용한다. # statistic=51.0, pvalue=0.47213346080125185 except Exception as e: print('err :', e) finally: cursor.close() conn.close() # 해석 : pvalue=0.47213 > 0.05 이므로 귀무 채택. 총무부, 영업부 직원의 연봉의 평균에 차이가 존재하지 않는다. <console> 부서별 연봉의 합 : 부서명 관리부 6262.500000 영업부 4908.333333 전산부 5328.571429 총무부 5414.285714 Name: 연봉, dtype: float64 1 9900 10 3700 13 4900 17 8000 25 3800 26 3500 29 4100 Name: 연봉, dtype: int64 2 8800 3 7900 5 3000 6 2950 8 7800 15 4000 16 3000 20 2900 21 2950 24 4500 27 5900 28 5200 Name: 연봉, dtype: int64 ShapiroResult(statistic=0.7803537845611572, pvalue=0.02604489028453827) ShapiroResult(statistic=0.8372057676315308, pvalue=0.02560843899846077) MannwhitneyuResult(statistic=51.0, pvalue=0.47213346080125185)
정규성을 만족하지 않는 경우 두 가지 방법이 있다.
result2 = stats.wilcoxon(sco1, sco2)
result2 = stats.mannwhitneyu(sco1, sco2)[대응표본 t 검정 : 문제4]
어느 학급의 교사는 매년 학기 내 치뤄지는 시험성적의 결과가 실력의 차이없이 비슷하게 유지되고 있다고 말하고 있다. 이 때, 올해의 해당 학급의 중간고사 성적과 기말고사 성적은 다음과 같다. 점수는 학생 번호 순으로 배열되어 있다.
중간 : 80, 75, 85, 50, 60, 75, 45, 70, 90, 95, 85, 80
기말 : 90, 70, 90, 65, 80, 85, 65, 75, 80, 90, 95, 95
그렇다면 이 학급의 학업능력이 변화했다고 이야기 할 수 있는가?
# [대응표본 t 검정 : 문제4] # 어느 학급의 교사는 매년 학기 내 치뤄지는 시험성적의 결과가 실력의 차이없이 비슷하게 유지되고 있다고 말하고 있다. 이 때, 올해의 해당 학급의 중간고사 성적과 기말고사 성적은 다음과 같다. 점수는 학생 번호 순으로 배열되어 있다. # 그렇다면 이 학급의 학업능력이 변화했다고 이야기 할 수 있는가? # 귀무 : 매년 학기 내 치뤄지는 시험성적의 결과는 실력의 차이가 없다. # 대립 : 매년 학기 내 치뤄지는 시험성적의 결과는 실력의 차이가 있다. num1 = [80, 75, 85, 50, 60, 75, 45, 70, 90, 95, 85, 80] num2 = [90, 70, 90, 65, 80, 85, 65, 75, 80, 90, 95, 95] print(np.mean(num1), ' ', np.mean(num2)) # 74.1666 vs 81.6666 차이? print(stats.shapiro(num1)) # pvalue=0.36814 > 0.05 이므로 정규성 만족 print(stats.shapiro(num2)) # pvalue=0.19300 > 0.05 이므로 정규성 만족 print(stats.ttest_rel(num1, num2)) # statistic=-2.6281127723493993, pvalue=0.023486192540203194 # 해석 : pvalue=0.02348 < 0.05 이므로 귀무 기각. 매년 학기 내 치뤄지는 시험성적의 결과는 실력의 차이가 있다. <console> 74.16666666666667 81.66666666666667 ShapiroResult(statistic=0.9288562536239624, pvalue=0.3681465983390808 ShapiroResult(statistic=0.9066108465194702, pvalue=0.19300280511379242 Ttest_relResult(statistic=-2.6281127723493993, pvalue=0.023486192540203194
'Python 데이터 분석' 카테고리의 다른 글
Python 데이터분석 기초 37 - 일원분산분석으로 평균차이 검정(웹에서 데이터 가져오기) (0) 2022.11.09 Python 데이터분석 기초 36 - 세 개 이상의 모집단에 대한 가설검정 – 분산분석(ANOVA), 사후검정 (0) 2022.11.09 t-test 검정 문제(1) 정규성 확인 (0) 2022.11.08 서로 대응인 두 집단의 평균 차이 검정(paired samples t-test) 예제 (0) 2022.11.08 Python 데이터분석 기초 35 - 서로 대응인 두 집단의 평균 차이 검정(paired samples t-test) (0) 2022.11.08