반응형

14-05 표준편차 (std)

DataFrame.std(axis=None, skipna=None, level=None, ddof=1, numeric_only=None, kwargs)

 

개요


std 메서드는 행/열에 대한 표본표준편차를 구하는 메서드입니다.
※ 모표준편차가 아니라 표본표준편차입니다.
※ ※ 후술할 ddof=0 일 경우 자유도가 n이므로 모표준편차로 계산이 가능합니다

여기에 이미지 첨부 필요

 

사용법


기본 사용법
※ 자세한 내용은 아래 예시를 참고 바랍니다.
df.std(axis=None, skipna=None, level=None, ddof=1, numeric_only=None, kwargs)
axis : 표본표준편차를 구할 축을 지정합니다.
skipna : 결측치를 무시할지 여부입니다.
level : Multi Index의 경우 대상 레벨을 지정할 수 있습니다.
ddof : 표본표준편차 계산의 분모가되는 자유도를 지정합니다. 산식은 n - ddof값으로 기본값은 n-1입니다.
numeric_only : 숫자, 소수, bool로 구성된 열만 대상으로할지 여부입니다.
kwargs : 함수의 경우에 추가적으로 적용할 키워드입니다.

반응형

 

예시


먼저 기본적인 사용법 예시를 위해 4x4짜리 Multi Index 객체를 생성하겠습니다.

[N,T,F]=[np.NaN,True,False]
idx = [['IDX1','IDX1','IDX2','IDX2'],['row1','row2','row3','row4']]
col = ['col1','col2','col3','col4']
data = [[1,5,7,13],[5,2,19,1],[13,6,4,12],[8,N,0,8]]
df = pd.DataFrame(data,idx,col)
print(df)
>>
           col1  col2  col3  col4
IDX1 row1     1   5.0     7    13
     row2     5   2.0    19     1
IDX2 row3    13   6.0     4    12
     row4     8   NaN     0     8

기본적인 사용법
인수입력 없이 std메서드를 사용할 경우 각 열의 요소들의 표본표준편차를 계산합니다.

print(df.std())
>>
col1    5.057997
col2    2.081666
col3    8.185353
col4    5.446712
dtype: float64


skipna인수의 사용
skipna=False인 경우 결측값이 포함된 경우 NaN을 출력합니다.

print(df.std(skipna=False))
>>
col1    5.057997
col2         NaN
col3    8.185353
col4    5.446712
dtype: float64


axis인수의 사용
axis 인수를 통해 계산의 대상이 될 축을 지정할 수 있습니다.

print(df.std(axis=1))
>>
IDX1  row1    5.000000
      row2    8.341663
IDX2  row3    4.425306
      row4    4.618802
dtype: float64


level인수의 사용
Multi Index의 경우 level 인수를 이용해 레벨을 지정할 수 있습니다.

print(df.std(level=0))
>>
          col1     col2      col3      col4
IDX1  2.828427  2.12132  8.485281  8.485281
IDX2  3.535534      NaN  2.828427  2.828427


ddof인수의 사용
ddof인수란 표본표준편차 계산에 사용되는 분모인 n-ddof 값을 말합니다.
이는 자유도 라고 하며 모표준편차와 표본 표준편차에서 반드시 발생하는 괴리율을 줄이기 위해 사용됩니다.

자유도란 통계적 추정을 할 때 표본자료 중 모집단에 대한 정보를 주는 독립적인 자료의 수를 말합니다.
표본표준편차는 정규분포를 그리는 모 표준편차에 비해서 더 좁은 분산값을 갖기 때문에 n이 아닌 n-1로 나누어줍니다.
※ 보다 자세히 설명하자면 추정량에 대한 증명시 표본분산을 구할 때 n-1로 나누면 정확히 σ²가 나오며
이는 n보다 n-1이 더 값의 정확도가 높음을 의미합니다. 자세한것은 추가로 공부하시는걸 추천드립니다.

자유도에 따라 변하는 값을 보겠습니다. 열당 값은 4개로 즉, n이 4이기 때문에 4부터는 값/0이기때문에 값의 지정이 불가해집니다.
자유도가 증가할 수록 표본 표준편차가 넓어지는것을 확인할 수 있습니다.

print(df.std())
>>
col1    5.057997
col2    2.081666
col3    8.185353
col4    5.446712
dtype: float64
print(df.std(ddof=2))
>>
col1     6.194756
col2     2.943920
col3    10.024969
col4     6.670832
dtype: float64
print(df.std(ddof=3))
>>
col1     8.760708
col2          NaN
col3    14.177447
col4     9.433981
dtype: float64
print(df.std(ddof=4))
>>
col1   NaN
col2   NaN
col3   NaN
col4   NaN
dtype: float64
반응형

+ 최근 글