파이썬 버전 3.8 기준
pandas 버전 1.1.1 기준
pandas에서의 통계함수(메서드) |
본 포스팅에서는 다음과 같은 pandas에서 제공하는 다양한 통계함수에 대해 설명해보도록 한다.
○ count(요소개수), sum(합), mean(평균), mad(평균절대편차), abs(절대값), prod(곱)
○ median(중앙값), min(최소값), max(최대값), mode(최빈값)
○ std(표준편차), var(편차)
○ sem(평균의 표준오차), skew(표본왜도), kurt(표본첨도), quantile(분위수)
○ cumsum(누적합), cumprod(누적곱), cummax(누적최대값), cummin(누적최소값)
설명적 통계량(Descriptive statistic) 도출 메서드 |
pandas에는 Series와 DataFrame을 기반으로 기술통계학적 계산과 이와 관련된 연산을 수행하는 많고 다양한 메서드가 존재한다.
○ 대부분은 sum(), mean(), quantile()과 같이 더 낮은 차원을 생성하는 집계연산(aggregation)이다.
○ 누적데이터를 출력하는 cumsum()과 cumprod()와 같은 함수는 같은 사이즈의 객체를 생성한다.
일반적으로 이 메서드들은 ndarray와 같이{sum, std, ...} axis 입력변수를 가지며, 이 변수에는 축을 나타내는 정수나 문자열이 입력된다.
○ Series의 경우에는 1차원 데이터 객체이기 때문에 axis 입력변수가 없다.
○ DataFrame에는 "index"(정수로는 0, 기본값), "columns"(정수로는 1)으로 설정 가능하다.
통계 메서드 종류 |
아래에 각 함수에 대한 요약이 있다.
이것들은 또한 사용자 필요에 따라 사용될 수도 있는 level 입력변수를 가지며 이는 멀티인덱스에 적용할 수 있다.
○ count : 누락데이터(NaN)가 아닌 데이터의 수
○ sum : 값들의 합
○ mean : 값들의 평균
○ mad : 평균 절대 편차
○ median : 값의 산술 중앙값
○ min : 최소값
○ max : 최대값
○ mode : 최빈값
○ abs : 절대값
○ prod : 값의 곱
○ std : 베셀 보정 표본 표준 편차
○ var : 비편향 편차
○ sem : 평균의 표준 오차
○ skew : 표본 왜도 (3차 moment)
○ kurt : 표본 첨도 (4차 moment)
○ quantile : 표본 분위수 (%에서의 값)
○ cumsum : 누적 합
○ cumprod : 누적 곱
○ cummax : 누적 최대값
○ cummin : 누적 최소값
일반적인 통계 메서드 사용 형식 |
다음은 일반적인 통계 메서드의 사용 형식을 보여준다.
메서드 사용 형식)
result=Object.method(axis=None, skipna=True, level=None, numeric_only=None)
메서드별 공통 입력변수에 대한 설명은 다음과 같다.
○ axis: 함수를 적용할 축을 지정한다.
▷ Series에 적용될 경우 이 입력변수 0 or ‘index’만 사용할 수 있다.
▷ 0 or ‘index’: 함수를 각 열(columns)에 따라 적용한다.
▷ 1 or ‘columns’: 함수를 각 행(row)에 따라 적용한다.
○ skipna: 기본값은 True이며, NA/null 값들을 제외시킨다.
○ level: 멀티인덱스인 경우 메서드가 적용되는 특정 레벨을 선택한다.
○ numeric_only: 숫자 자료형(int, float, boolean) 등만 계산하는지 여부를 결정한다.
▷ None일 경우 모든 자료형을 연산을 수행하는 것을 시도한다.
▷ True일 경우 숫자형 자료인 경우에만 계산을 수행한다.
예외적인 사용형식의 통계 메서드 |
위의 형식과는 다르게 사용되는 통계메서드들이 존재한다.
quantile() 메서드
quantile() 메서드는 %분위수를 계산해야하는 메서드 이므로 분위수를 입력하는 변수가 있다.
또한 분위수 결과값 출력 시 보간(interpolation) 방식을 설정하는 변수 역시 존재한다.
메서드 사용 형식)
result=Object.quantile(q=0.5, axis=0, numeric_only=True, interpolation='linear')
위에 함수와 중복되는 입력변수(axis, numeric_only)는 본 섹션에선 설명을 생략한다.
○ q: 출력하는 분위수를 입력받는다.
▷ 기본값은 0.5이며 즉 50% 분위수이다.
○ interpolation: 분위수 결과가 두 데이터 i와 j 사이에 존재할때 보간하는 방식을 결정한다.
▷ 'linear': i+(j-i)*fraction 방식으로 계산한다. (기본값)
- fraction은 인덱스 데이터를 이용하여 계산되는 값이다.
▷ 'lower': i를 취한다.
▷ 'higher': j를 취한다.
▷ 'nearest': i랑 j 중 가까운 데이터를 취한다.
▷ 'midpoint': (i+j)/2 방식으로 계산한다.
abs() 메서드
abs() 메서드와 같은 경우 입력변수가 존재하지 않으며 아래와 같이 입력변수 입력 없이 바로 적용하면 된다.
abs 메서드 사용 형식)
result=Object.abs()
통계 메서드 사용 예제 |
예제를 수행하기 위해 다음과 같이 기본적인 셋업을 수행한다.
모듈의 임폴트)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
skipna 의 사용
통계 메서드들은 skipna 옵션이 존재하며, 이를 통해 누락데이터들을 처리할 수 있다.
○ 대부분 기본값은 skipna가 True로 설정되어있다.
skipna의 사용 예제)
# 예제용 DataFrame의 정의
In[4]: sample_df= pd.DataFrame([[9.1, 1.2, 1.3, np.nan], [2.1, 9.2, 9.3, 2.4], [np.nan, 3.2, 3.3, 3.4]], index=['a', 'b', 'c'], columns=['A','B','C','D'])
# ex1: skipna 사용 예제
In[5]: sample_df.sum(axis=0, skipna=False)
Out[5]:
A NaN
B 13.6
C 13.9
D NaN
dtype: float64
In[6]: sample_df.sum(axis=0, skipna=True)
Out[6]:
A 11.2
B 13.6
C 13.9
D 5.8
dtype: float64
통계 메서드 사용 예제
브로드캐스팅(broadcasting)과 산술메서드들을 조합하여, 다양한 통계적 절차를 묘사할 수 있다.
대표적인 예로 표준화(standarization) 등이 있다.
○ 데이터를 영평균으로 만들고 표준편차를 1로 만든다.
표준화 사용 예제)
# 예제용 DataFrame의 정의
In[7]: sample_df= pd.DataFrame([[9.1, 1.2, 1.3, 1.4], [2.1, 9.2, 9.3, 2.4], [3.1, 3.2, 3.3, 3.4]], index=['a', 'b', 'c'], columns=['A','B','C','D'])
# ex2-1: 산술연산을 병행한 표준화 수행 예제
In[7]: sample_df_stand=(sample_df-sample_df.mean())/ sample_df.std()
In[8]: sample_df_stand
Out[8]:
A B C D
a 1.144586 -0.800641 -0.800641 -1.0
b -0.704361 1.120897 1.120897 0.0
c -0.440225 -0.320256 -0.320256 1.0
In[9]: sample_df_stand.std()
Out[9]:
A 1.0
B 1.0
C 1.0
D 1.0
dtype: float64
In[10]: sample_df_stand.mean()
Out[10]:
A 1.850372e-17
B 2.220446e-16
C -5.551115e-17
D 0.000000e+00
dtype: float64
# ex2-2: 산술메서드를 활용한 표준화 수행 예제
In[11]: sample_df_stand2=sample_df.sub(sample_df.mean(axis=1), axis=0).div(sample_df.std(axis=1), axis=0)
In[12]: sample_df_stand2
Out[12]:
A B C D
a 1.499671 -0.525526 -0.499890 -0.474255
b -0.902680 0.853218 0.877949 -0.828487
c -1.161895 -0.387298 0.387298 1.161895
In[13]: sample_df_stand2.std(axis=1)
Out[13]:
a 1.0
b 1.0
c 1.0
dtype: float64
In[14]: sample_df_stand2.mean(axis=1)
Out[14]:
a 0.000000e+00
b 0.000000e+00
c -3.386180e-15
dtype: float64
누적 데이터 출력 메서드
cumsum()과 cumprod()와 같은 메서드들은 기본적으로 NaN 값들의 위치를 보존한다.
○ 단 skipna 변수를 통해 NaN 발생시 데이터의 출력 방식을 조절할 수 있다.
누적 데이터 출력 메서드 사용 예제)
# 예제용 DataFrame의 정의
In[15]: sample_df= pd.DataFrame([[9.1, 1.2, 1.3, np.nan], [2.1, 9.2, 9.3, 2.4], [np.nan, 3.2, 3.3, 3.4]], index=['a', 'b', 'c'], columns=['A','B','C','D'])
# ex3: 누적 데이터 출력 메서드 사용 예제
In[16]: sample_df.cumsum()
Out[16]:
A B C D
a 9.1 1.2 1.3 NaN
b 11.2 10.4 10.6 2.4
c NaN 13.6 13.9 5.8
In[17]: sample_df.cumsum(axis=1)
Out[17]:
A B C D
a 9.1 10.3 11.6 NaN
b 2.1 11.3 20.6 23.0
c NaN 3.2 6.5 9.9
In[18]: sample_df.cumsum(axis=1, skipna=False)
Out[18]:
A B C D
a 9.1 10.3 11.6 NaN
b 2.1 11.3 20.6 23.0
c NaN NaN NaN NaN
Series의 Numpy 함수로의 적용
NumPy 함수에 Series를 입력할 경우 누락데이터를 자동으로 제거시키고 계산을 수행한다.
모듈의 임폴트)
# ex4: numpy 함수로의 적용 예제
In[19]: np.sum(sample_df['A'])
Out[19]: 11.2
In[20]: np.sum(sample_df['A'].to_numpy())
Out[20]: nan
누락값이 아닌 데이터 숫자의 개수 반환
Series.nunique() 는 누락값들이 아닌 데이터의 숫자를 반환한다.
nunique() 메서드 사용 예제)
# ex5: nunique 메서드 사용 예제
In[21]: sample_df['A'].nunique()
Out[21]: 2
|
|
|
| 참고자료 |
|
|
|
|
'Python > Pandas' 카테고리의 다른 글
최대/최소값 인덱스(레이블) idxmin, idxmax 메서드-pandas(38) (0) | 2020.10.15 |
---|---|
데이터 요약을 위한 describe() 메서드-pandas(37) (2) | 2020.10.12 |
요소별 함수의 적용 applymap(), map() 메서드-pandas(35) (0) | 2020.10.10 |
다중(여러개) 함수 적용 transform() 메서드-pandas(34) (0) | 2020.10.09 |
다수(여러개)의 함수 사용을 위한 agg() 메서드-pandas(33) (0) | 2020.10.08 |
댓글