SQL/코딩테스트
[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