일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 깃
- 엑셀
- 파이썬GUI
- Windows11
- VBA
- 윈도우11
- 윈도우10
- python
- 아웃룩
- 안드로이드
- 비주얼베이직
- Android
- git
- 문자열
- 파이썬
- win32com
- pythongui
- matlab
- Excel
- office
- pandas
- windows
- Windows10
- 파워포인트
- Outlook
- html
- 오피스
- pyqt5
- 파이썬3
- python3
Appia의 IT세상
파이썬[Python] Pandas, 기술 통계[descriptive statistics] 메소드 본문
이전 포스팅에서는 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([29, 26, 25, 23]), 'Rating': pd.Series([2.56, 3.20, 4.6, 3.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 모듈 / 알파벳 사용빈도 확인
std()는 column 기반의 표준 편차, min()/max()최소값 최대값을 나타내줍니다. 그럼 다음 예시를 살펴보겠습니다.
example)
import pandas as pd # Series 생성 ds = {'Name': pd.Series(['Choi', 'Lee', 'Lee', 'Choi','Kim']), 'Age': pd.Series([29, 26, 25, 25, 27]), 'Rating': pd.Series([2.56, 3.20, 4.6, 3.2, 4.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([29, 26, 25, 25, 27]), 'Rating': pd.Series([2.56, 3.20, 4.6, 3.2, 4.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를 사용하는지에 대해서 알 수 있는 계기가 되지 않을까요? 물론 예시는 몇개 안되었지만, 실제 데이터에서는 몇만개 몇십만개를 바탕으로 사용할 때 그 진가를 발휘합니다.
혹 궁금하신거나 문의 하신 부분이 있으시면 언제든지 댓글 및 방명록에 글 남겨 주시길 바랍니다. 감사합니다.
'Python > Python Pandas' 카테고리의 다른 글
파이썬[Python] Pandas, DataFrame 루프(Iteration) 돌기 (1) | 2020.03.31 |
---|---|
파이썬[Python] Pandas, Reindex - Row/Column Label(Index)구조 및 이름 변경하기 (0) | 2020.03.29 |
파이썬[Python] Pandas, DataFrame 기본 메소드 기능 (0) | 2020.03.25 |
파이썬[Python] Pandas, Series 기본 메소드 기능 (0) | 2020.03.24 |
파이썬[Python] Pandas, Pandas Series생성 및 활용하기 (0) | 2020.03.21 |