* 파이썬을 이용한 기술 통계 분석 코드 작성 및 기본 개념에 대해 정리
정량적 분석으로,
대표값을 추출할 수 있을만한 통계 수치를 활용
데이터 값에 대한 수치 분석으로, 모델에 대한 성능지표로도 사용
※ 수치해석에 의존해서는 안됨
# 기술 통계 (Descriptive Statistics)
표본 자체의 속성을 파악하는데 주안점을 둔 데이터 분석 통계
4가지
1. 중심경향성(Central tendendy)
: 변량의 중심적인 경향을 나타내는 통계량 / 대표값
- 평균 : 변량들의 합을 표본 크기로 나눈 값
- 중간값 : 변량들을 산술적 가치에 따라 서열로 나열했을 때 가운데의 값
- 최빈값 : 가장 빈도가 많은 변량
* 변량 (데이터 / 자료)
2. 산포도(Dispersion)
: 변량의 퍼져있는 정도 즉, 변량의 변화 정도 파악
- 최대값 : 변량 중 가장 큰 값
- 최소값 : 가장 작은 값
- 범위 : 최대값 - 최소값
- 분산 : 평균으로부터 각 변량이 떨어진 거리들에 대한 평균
- 표준편차 : 분산에 루트, 표준편차가 작으면 평균에 변량값이 몰려있음(고르게)
- 표준오차 : 표본 평균 분포의 표준편차
3. 분포(Distribution)
: 변량 분포의 형태와 대칭성을 설명하는 통계량
- 첨도 : 데이터 분포의 뾰족한 정도를 나타내는 통계량
첨도가 0 => 정규분포
첨도가 높아질수록 꼬리가 길며, Outlier 도 많아짐
- 왜도 : 데이터 분포의 기울어짐, 비대칭성을 나타내는 통계량
왜도가 0 => 정규분포, T분포와 같은 대칭성 분포
왜도가 양수 => 오른쪽 긴꼬리
4. 백분위(Percentile)
: 크기가 있는 값들로 이뤄진 자료를 순서대로 나열했을 때 백분율로 나타낸 특정 위치의 값
: 크기가 작은 것부터 나열하여 0 ~ 100
사분위수
- 1분위수 : 25%
- 2분위수 : 중앙값, 50%
- 3분위수 : 75%
# 적용 항목
1. 평균
2. 중앙값
3. 표준 편차
4. 분산
5. 첨도
6. 왜도
7. 범위
8. 1분위수(25%)
9. 2분위수(50%)
10. 3분위수(75%)
11. 최소값
12. 최대값
13. 누적합
14. 누적곱
# 코드 작성
대부분 Numpy 라이브러리 활용
첨도와 왜도의 경우, Scipy.stats 에서 제공하는 skew, kurtosis 사용
※ 현재 작성된 코드의 경우, 결과에 대해서는 의미없음(임의의 값 사용)
from scipy.stats import skew, kurtosis
# 기술 통계 분석
def descriptive_statistics(x):
"""
:param x: ndarray type의 값
"""
# 리스트로 변환 (왜도, 첨도)
x_tmp = x.reshape(-1)
x_list = x.tolist()
# 평균
avg = x.mean()
# 중앙값
median = np.median(x)
# 표준 편차
std = x.std()
# 분산
var = x.var()
# 첨도
kurto = kurtosis(x_list)
# 왜도
skewness = skew(x_list)
# 범위
x_range = x.max() - x.min()
# 1분위수(25%)
quantile_1 = np.percentile(x, 25)
# 2분위수(50%)
quantile_2 = np.percentile(x, 50)
# 3분위수(75%)
quantile_3 = np.percentile(x, 75)
# 최소값
min = x.min()
# 최대값
max = x.max()
# 누적 합
cumsum = x.cumsum()[-1]
# 누적 곱
cumprod = x.cumprod()[-1]
return avg, median, std, var, kurto, skewness, x_range, quantile_1, quantile_2, quantile_3, min, max, cumsum, cumprod
# 임의의 값(예시)
test = np.array([0.1, 0.1, 0.1, 0.1, 0.9])
# 기술통계 분석 수행
avg, median, std, var, kurto, skewness, x_range, quantile_1, quantile_2, quantile_3, min, max, cumsum, cumprod = descriptive_statistics(test)
# 결과 출력
print(avg)
print(median)
print(std)
print(var)
print(kurto)
print(skewness)
print(x_range)
print(quantile_1)
print(quantile_2)
print(quantile_3)
print(min)
print(max)
print(cumsum)
print(cumprod)