ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     

     

     

    댓글

Designed by Tistory.