프로그래머스 데이터분석 데브코스 진행중에 통계, 확률쪽 이해도 잘 안되고 머리에 쉽게 정착하지 못해서 바퀴 다시만들기를 시작했다.
과정을 이해하기 위해 일부러 길게 작성한 부분도 있다.
평균
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