pbj0812의 코딩 일기

[통계학] PYTHON을 이용한 U 값 계산 본문

Science/통계학

[통계학] PYTHON을 이용한 U 값 계산

pbj0812 2020. 9. 3. 01:22

0. 목표

 - python을 이용한 U 값 계산

 - U 값 : 두 집단을 순위 데이터로 변환하여 분포가 겹치는 정도를 나타내는 통계량

1. 방법

 1) 데이터를 양 집단을 합친 순위로 변환

 2) 양 집단을 합쳐서 작은순으로 순서를 붙임

 3) A 집단보다 작은 B 직단의 개수를 계산하고 그 값을 합산한 값이 U 값

2. 구현

 1) 두 집단(데이터) 생성

a = [10.2, 8.3, 5.1, 3.4]
b = [90.0, 10.2, 7.7, 6.8, 4.0]

 2) 두 집단(데이터)을 하나로 합침

  - [10.2, 8.3, 5.1, 3.4, 90.0, 10.2, 7.7, 6.8, 4.0]

total = a + b
print(total)

 3) 순서 정렬

  - [3.4, 4.0, 5.1, 6.8, 7.7, 8.3, 10.2, 10.2, 90.0]

total.sort()
print(total)

 4) 순서 도출 함수

  - inp_list는 정렬된 리스트

  - count는 해당 숫자가 몇 개 들어가 있는지를 나타냄

  - index는 해당 숫자가 몇 번째 순위인지를 나타냄(0부터 시작하므로 +1 해줌)

  - if문은 만약 같은 숫자가 존재할 경우 그 평균을 구해 추출하게 작성

def rank(inp_list, search_num):
    count = inp_list.count(search_num)
    index = inp_list.index(search_num) + 1
    if count != 1:
        result = 0
        for i in range(1, count + 1):
            result += index
            index += 1
        result = result / count
    else:
        result = index
    return result

5) 순서 도출 함수(리스트)

  - 4)의 내용을 응용하여 리스트 형태로 받게 함

def rank_list(inp_list, search_list):
    result = []
    for i in search_list:
        tmp = rank(inp_list, i)
        result.append(tmp)
    return result

 6) a 집단 순위

  - [7.5, 6, 3, 1]

a_rank = rank_list(total, a)
print(a_rank)

 7) b 집단 순위

  - [9, 7.5, 5, 4, 2]

b_rank = rank_list(total, b)
print(b_rank)

 8) U 값 계산

  - a_rank 값이 기준

  - a_rank리스트에 존재하는 각 값보다 작은 값들이 b_rank에 몇개 있는지를 나타냄

  - 값이 같을 경우에는 0.5로 환산

  - 반환 값은 위의 값들을 합산한 값

def u(a_rank, b_rank):
    result = []
    for i in a_rank:
        tmp = 0
        for j in b_rank:
            if i > j:
                tmp += 1
            elif i == j:
                tmp += 0.5
            else:
                pass
        result.append(tmp)
    result = sum(result)
    return result    

 9) 결과

  - 7.5

print(u(a_rank, b_rank))

3. 참고

 - 통계학 도감(쿠리하라 신이치, 마루야마 아츠시)

Comments