무던히 하다보면 느는

[python] 통계 관련 함수 정리 본문

코딩테스트

[python] 통계 관련 함수 정리

무던히 하다보면 느는 2025. 4. 17. 16:33

01. 이상치 제거 후 평균 계산

[설명]

이상치란 ? 관측된 데이터의 일반적인 범위에서 많이 벗어난 값, 즉 너무 작은 값이나 너무 큰 값.

 이상치가 모델링 및 의사결정에 미칠 수 있기 때문에 기준을 정해서 이상치를 처리하는 것은 필수

 

01 Z-score 방법

- 평균값 기반으로 이상치를 탐지하는 방법

- 평균, 표준편차를 이용해서 특정 데이터가 평균값으로부터 얼마나 멀리 떨어져 있는지 계산

- 특정 임계값을 넘어가면 이상치로 판단

 

02 IQR 방법

- 중앙값 기반으로 이상치를 탐지하는 법

- 사분위수, IQR을 이용해서 특정 데이터가 중앙값으로부터 얼마나 멀리 떨어져 있는지 계산

- 박스플롯의 최솟값, 최댓값을 넘어가면 이상치로 판단

 

[문제]

주어진 거래 데이터 리스트에서
Z-score 기준으로 이상치(절대값 2.0 이상)를 제거한 후,
나머지 데이터의 평균을 계산하시오.

 

from scipy.stats import zscore
import numpy as np

amounts = np.array([100,110,120,130,140,10000])
zscores = zscore(amounts)

filtered = amounts[np.abs(zscores) < 2]
mean_result = filtered.mean()
mean_result

 

02. 그룹별 표준편차

std_by_category = transactions.groupby('category')['amount'].std()

 

03. IQR 기반 이상값 개수

values = [10, 12, 14, 15, 16, 17, 18, 100, 105]

q1 = np.percentile(values, 25)
q3 = np.percentile(values, 75)
iqr = q3 - q1

lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr

outliers = [v for v in values if v < lower or v > upper]
outlier_count = len(outliers)

 

q1 : 14

q3 : 18

iqr : 4

lower : 8

upper : 24

 

outliers = [100, 105], 즉 len(outliers) = 2

 

04. rolling window 평균 변화율 ★★ 

1분 단위 매출 데이터가 주어질 때, 3분 이동평균 기준으로 직전 시점 대비 변화율(%) 을 구하시옹

(단, NaN은 제외) 다시 풀기

sales = [100, 150, 200, 250, 300, 350, 400]

s = pd.Series(sales)
rolling_avg = s.rolling(window=3).mean()
per_change = rolling_avg.pct_change().dropna() * 100

 

s.rolling(window=3)

그리고 .pct_change().dropna()*100

 

05. 상관계수 기반 유사 사용자 추출

correlations = ratings.corr(method="pearson")["user1"].drop("user1")
most_similar_user = correlations.idxmax()
most_similar_user

 

결측값 채우기 : 'one' 열

one_mean = df['one'].mean(axis=0)

df['one'] = df['one'].fillna(value=one_mean)

df