본문 바로가기
python

기초 통계 함수 바퀴 다시만들기 (1)

by 포잉띠 2024. 4. 4.

프로그래머스 데이터분석 데브코스 진행중에 통계, 확률쪽 이해도 잘 안되고 머리에 쉽게 정착하지 못해서 바퀴 다시만들기를 시작했다.

 

과정을 이해하기 위해 일부러 길게 작성한 부분도 있다. 

 

평균

def mean(n) :
    a = sum(n)
    m = a/len(n)
    return m

 

 

중앙값

def middle(n):
    sorted_n = sorted(n)
    len_n = len(sorted_n)
    if  len_n %2 == 0 :
        return (sorted_n[len_n//2-1] + sorted_n[len_n//2]) /2
    else :
        return (sorted_n[len_n//2])

 

 

mode / 최빈값

def mode(n) :
    a = {}
    for i in n :
        if  i in a :
            a[i] += 1
        else :
            a[i] = 1
    return max(a, key= a.get)

 

 

분산, 표준편차

def var(n) :
    n_mean = mean_0(n)
    m_n = list(map(lambda x :  (x-n_mean)**2  , n))
    return sum(m_n)/len(n)

def std(n) :
    return var(n)**0.5

 

 

공분산

def convariance(x, y) :
    if len(x) == len(y) :
        x_mean = mean_0(x)
        y_mean = mean_0(y)
        
        cov = sum((a-x_mean)*(a-y_mean)for a, a in zip(x, y))/len(x)
        return cov
    else :
        return None

 

 

확률밀도함수(pdf)

def pdf (x, mu, sigma) :
    import math
    # 평균에서 얼마나 떨어져 있는가. 
    x_mu = (x-mu)**2 
    
    # x의 값이 분포에서 얼마나 멀리 있는지 정규화, x의 확률 밀도를 계산하기 위해
    nomali = math.exp( -x_mu/(2*sigma**2) ) 
    
    # 면적 구하기 위해
    fx_nomali = 1/(sigma*(math.sqrt(2*math.pi))) 
    
    return nomali*fx_nomali

 

 

확률질량함수(pmf)

def pmf(p, n, k ) :
    import math
    
    # n개 중에서 k개를 선택하는 방법의 수
    comb = math.comb(n, k) 
    # factorial ver
    # comb = math.factorial(n) / math.factorial(k)*math.factorial(n-k)
    
    # k번 성공한 확률
    percent_k_true = p**k
    
    #실패할 확률
    percent_false = ( 1 - p ) ** ( n - k ) 
    
    #총 계산
    result = comb * (percent_k_true) * ( percent_false )
    return result