본문으로 바로가기

[파이썬] 기술 통계 분석

category Domain/ETC 2021. 3. 3. 18:00

* 파이썬을 이용한 기술 통계 분석 코드 작성 및 기본 개념에 대해 정리

 

정량적 분석으로,

대표값을 추출할 수 있을만한 통계 수치를 활용

 

데이터 값에 대한 수치 분석으로, 모델에 대한 성능지표로도 사용

※ 수치해석에 의존해서는 안됨

 

 

# 기술 통계  (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)