Appia의 IT세상

파이썬[Python] Pandas, 기술 통계[descriptive statistics] 메소드 본문

Python/Python Pandas

파이썬[Python] Pandas, 기술 통계[descriptive statistics] 메소드

Appia 2020. 3. 27. 07:17
반응형

이전 포스팅에서는 Pandas에 데이터 컨테이너인 DataFrame/Series를 대해 생성하고, 이에 대한 기본 메소드들에 대해서 살펴봤습니다. 이번 포스팅에서는 이러한 데이터 컨테이너와 함께 기술 통계에서 사용되는 메소드들에 대해서 살펴보고자 합니다. 

 

그럼 기술 통계[descriptive statistics]란 무엇일까요? 기술 통계는 측정이나 수집한 테이터를 정리, 표현 요약, 해석등을 통해 자료의 특성을 설명하는 통계 기법을 말하고 있습니다. 

 

그럼 간단히 기술적 통계에 사용되는 메소드에 대해서 다음 표에서 간단히 살펴보겠습니다. 

Method Description
count() 각 컬럼의 개체수
sum() 값의 합계
mean() 값의 평균 값 리턴
median() 값의 중간 값 리턴
mode() 최빈수 구하기
std() 값들의 표준편차 리턴
min() 값의 최소값 리턴
max() 값의 최대값 리턴
abs() 절대값 
prod() 값의 곱셈값 표현
cumsum() Row기반으로 누적합 표현
cumprod() Row기반으로 누적곱셈 표현
describe() 데이터에 대한 요약 리턴

*abs(), cumprod()의 경우 숫자 값만 적용가능 

 

그럼 위의 부분들에 간단한 예시를 보면서 조금 더 설명을 드리도록 하겠습니다. 

 

sum()/mean()/median()

지금 이 세가지 함수는 기술 통계학에서 가장 많이 사용되는 항목들입니다. sum의 경우 총합을 구합니다. 이 경우에 string 또는 문자가 포함되어 있을 경우 연결해서 표현합니다. 예를 들면 , 다음과 같이 데이터가 있을 경우를 봐보겠습니다. 

a

b

이럴 경우 sum()결과는 ab가 됩니다. 

mean() 평균값입니다. 즉 sum()/count()로 보셔도 무방합니다. median()의 경우 중간 값입니다. 즉, min()+man()/2가 됩니다. mean()/median()의 경우 문자열 또는 문자는 무시합니다. 그럼 다음 예를 살펴 보겠습니다. 

 

example)

import pandas as pd
 
# Series 생성
 
ds = {'Name': pd.Series(['Choi''Kim''Lee''Park']),
 
      'Age': pd.Series([29262523]),
 
      'Rating': pd.Series([2.563.204.63.8])}
 
# DataFrame 생성
 
df = pd.DataFrame(ds)
 
print(df)
 
print("SUM : ")
 
print(df.sum())   # sum()값 출력
 
print("SUM row base: ")
 
print(df.sum(1))   # sum()값 출력 row 기반으로 연산하기
 
print("mean : ")
 
print(df.mean())  # mean()값 출력
 
print("mean row base: ")
 
print(df.mean(1))  # mean()값 출력
 
print("median : ")
 
print(df.median())      #median()값 출력
cs

result) 

   Name  Age  Rating
 
0  Choi   29    2.56
 
1   Kim   26    3.20
 
2   Lee   25    4.60
 
3  Park   23    3.80
 
SUM : 
 
Name      ChoiKimLeePark
 
Age                  103
 
Rating             14.16
 
dtype: object
 
SUM row base: 
 
0    31.56
 
1    29.20
 
2    29.60
 
3    26.80
 
dtype: float64
 
mean : 
 
Age       25.75
 
Rating     3.54
 
dtype: float64
 
mean row base: 
 
0    15.78
 
1    14.60
 
2    14.80
 
3    13.40
 
dtype: float64
 
median : 
 
Age       25.5
 
Rating     3.5
 
dtype: float64
cs

제가 이야기 한바와 같이 mean/median에서는 문자열을 무시합니다. 단, sum의 경우 문자열 이어 붙이기를 합니다. 위의 예제와 같이 axis = 1를 입력할 경우는 좀 다른 형태를 가집니다. 기본적으로 column기반으로 합계등을 구합니다. 하지마느 axis = 1(실제 함수에서는 1만 입력해도 가능)를 입력할 경우 row기반으로 동작합니다. 단, 여기에서 문자열은 무시하고 진행됩니다. 

 

mode/std/min/max 

mode()의 경우 최빈값을 구하는 함수입니다. 단, 최빈값을 나타내줍니다. 단, 최빈값이 여러개일 때는 모두 표현해 줍니다. 최빈값 관련해서는 많은 분들이 collection모듈의 counter함수를 이용해주곤 합니다. 관련해서는 다음 링크를 참조해주시길 바랍니다. 

파이썬[Python] Counter 함수 - collection 모듈 / 알파벳 사용빈도 확인

 

파이썬[Python] Counter 함수 - collection 모듈 / 알파벳 사용빈도 확인

이번 포스팅은 collection 모듈에 포함되어 있는 Counter 함수에 대해서 살펴보고자 합니다. 실제, 저의 블로그의 유입 하신 분들중에 [파이썬 알파벳 갯수]로 검색해서 들어오신 분이 있었던 것 같습니다. 불행히..

appia.tistory.com

std()는 column 기반의 표준 편차, min()/max()최소값 최대값을 나타내줍니다. 그럼 다음 예시를 살펴보겠습니다. 

example)

import pandas as pd
 
# Series 생성
 
ds = {'Name': pd.Series(['Choi''Lee''Lee''Choi','Kim']),
 
      'Age': pd.Series([2926252527]),
 
      'Rating': pd.Series([2.563.204.63.24.1])}
 
# DataFrame 생성
 
df = pd.DataFrame(ds)
 
print(df)
 
print("Mode : ")
 
print(df.mode())
 
print("Std : ")
 
print(df.std())
 
print("Min : ")
 
print(df.min())
 
print("Max : ")
 
print(df.max())
cs

result)

   Name  Age  Rating
   
0  Choi   29    2.56
 
1   Lee   26    3.20
 
2   Lee   25    4.60
 
3  Choi   25    3.20
 
4   Kim   27    4.10
 
Mode : 
 
   Name   Age  Rating
   
0  Choi  25.0     3.2
 
1   Lee   NaN     NaN
 
Std : 
 
Age       1.673320
 
Rating    0.810629
 
dtype: float64
 
Min : 
 
Name      Choi
 
Age         25
 
Rating    2.56
 
dtype: object
 
Max : 
 
Name      Lee
 
Age        29
 
Rating    4.6
 
dtype: object
cs

문자열의 경우, 표준 편차는 무시합니다. 하지만, min/max의 경우 앞자리의 아스키 코드 값을 바탕으로 적용됩니다. 

 

describe()

그럼 이번에는 데이터 요약을 해주는 명령어인 describe()를 살펴보도록 하도록 하겠습니다. 위의 정보들에서 필요한 정보들을 출력해주는 명령어입니다. 그럼 예시를 한번 살펴보겠습니다. 

example)

import pandas as pd
 
# Series 생성
 
ds = {'Name': pd.Series(['Choi''Lee''Lee''Choi','Kim']),
 
      'Age': pd.Series([2926252527]),
 
      'Rating': pd.Series([2.563.204.63.24.1])}
 
# DataFrame 생성
 
df = pd.DataFrame(ds)
 
print(df.describe())
 
print("All : ")
 
print(df.describe(include='all'))
cs

result) 

            Age    Rating
            
count   5.00000  5.000000
 
mean   26.40000  3.532000
 
std     1.67332  0.810629
 
min    25.00000  2.560000
 
25%    25.00000  3.200000
 
50%    26.00000  3.200000
 
75%    27.00000  4.100000
 
max    29.00000  4.600000
 
All : 
 
       Name       Age    Rating
       
count     5   5.00000  5.000000
 
unique    3       NaN       NaN
 
top     Lee       NaN       NaN
 
freq      2       NaN       NaN
 
mean    NaN  26.40000  3.532000
 
std     NaN   1.67332  0.810629
 
min     NaN  25.00000  2.560000
 
25%     NaN  25.00000  3.200000
 
50%     NaN  26.00000  3.200000
 
75%     NaN  27.00000  4.100000
 
max     NaN  29.00000  4.600000
cs

위에서 describe(include='all')를 입력해주었더니, 문자열 관련된 정보까지 표현을 해줍니다. 만약 관련 파라미터를 입력하지 않는다면 수와 관련된 정보들만 나열해주고 연산을 해줍니다. 이 부분을 통해서 빠른 연산등이 가능합니다. 

 

이번 포스팅에서 Pandas에서 기술 통계에서 사용되는 메소드들에 대해서 살펴봤습니다. 이 부분을 토대로 사용하면서 왜 Pandas를 사용하는지에 대해서 알 수 있는 계기가 되지 않을까요? 물론 예시는 몇개 안되었지만, 실제 데이터에서는 몇만개 몇십만개를 바탕으로 사용할 때 그 진가를 발휘합니다. 

혹 궁금하신거나 문의 하신 부분이 있으시면 언제든지 댓글 및 방명록에 글 남겨 주시길 바랍니다. 감사합니다. 

 

 

반응형
Comments