Pandas의 기능 중 하나인 Sidetable은 데이터 프레임의 요약을 더 쉽게 만들 수 있는 추가 기능 중 하나이다.
Sidetable은 group by 와 같이 작동 할 수 있으며 group by 함수와 결합하여 더 많은 정보를 정제하는데 도움이 될 수 으며, 특히 Daily Analysis작업을 하는 Data Scientist에게 매우 유용한 기능이 될 수 있다.
sidetable은 library를 따로 설치하면 됩니다. 본 예제에서 사용하는 데이타는 Direct Marketing의 데이타를 사용합니다.
1. Freq Function
Freq function은 아래 3가지 정보를 받게 됩니다.
- 각 카테고리에 대한 value_counts()
- 전체 열에서 각 범주의 백분율 (value_counts (normalize=True))
- 상기 두가지 누적 분포
freq함수는 정해진 컬럼을 기준으로 3가지 값을 계산, value 매개 변수에 열 이름을 넣으면 해당 열을 기준으로 3가지 값이 계산된다. 또 다른 예로 각 state에서 투표의 40%를 구성하는 주에서의 총 투표수를 확인하기 위해서는 thresh 파라미터를 사용한다.
import pandas as pd
import sidetable as stb
import io
import requests
pandas_DF = pd.read_csv(r'C:\Users\HANA\PycharmProjects\HANATOUR\Pandas\doit_pandas-master\data\DirectMarketing.csv', sep=',')
print(pandas_DF.head())
# Age Gender OwnHome Married ... Children History Catalogs AmountSpent
# 0 Old Female Own Single ... 0 High 6 755
# 1 Middle Male Rent Single ... 0 High 6 1318
# 2 Young Female Rent Single ... 0 Low 18 296
# 3 Middle Male Own Married ... 1 High 18 2436
# 4 Middle Female Own Single ... 0 High 12 1304
print(pandas_DF.stb.freq(['Age']))
# Age count percent cumulative_count cumulative_percent
# 0 Middle 508 50.8 508 50.8
# 1 Young 287 28.7 795 79.5
# 2 Old 205 20.5 1000 100.0
print(pandas_DF.stb.freq(['Age'], value='AmountSpent'))
# Age AmountSpent percent cumulative_AmountSpent cumulative_percent
# 0 Middle 762859 62.695415 762859 62.695415
# 1 Old 293586 24.128307 1056445 86.823722
# 2 Young 160325 13.176278 1216770 100.000000
pandas_election_DF = pd.read_csv(r'C:\Users\HANA\PycharmProjects\HANATOUR\Pandas\doit_pandas-master\data\governors_county.csv', sep=',')
print(pandas_election_DF.stb.freq(['state'], value='total_votes', thresh=40))
# state total_votes ... cumulative_total_votes cumulative_percent
# 0 North Carolina 5525201 ... 5525201 26.814545
# 1 others 15080038 ... 20605239 100.000000
2. Count Function
매우 유용한 Count Function은 하기 내용을 아주 쉽게 알 수 있다.
- 각 열의 Non-Missing 의 열 수
- Unique한 카테고리 값
- 빈도가 가장 많고 적은 값...
exclude 또는 include 매개 변수를 사용하여 특정 데이터 유형을 선택할 수 있습니다. 예를 들어 다음 구문은 숫자열을 제외한다.
print(DF_marketing.stb.counts())
# count unique ... least_freq least_freq_count
# Gender 1000 2 ... Male 494
# OwnHome 1000 2 ... Rent 484
# Married 1000 2 ... Single 498
# Location 1000 2 ... Far 290
# Age 1000 3 ... Old 205
# History 697 3 ... Medium 212
# Children 1000 4 ... 3 125
# Catalogs 1000 4 ... 24 233
# Salary 1000 636 ... 49000 1
# AmountSpent 1000 852 ... 510 1
print(DF_marketing.stb.counts(exclude='number'))
# count unique most_freq most_freq_count least_freq least_freq_count
# Gender 1000 2 Female 506 Male 494
# OwnHome 1000 2 Own 516 Rent 484
# Married 1000 2 Married 502 Single 498
# Location 1000 2 Close 710 Far 290
# Age 1000 3 Middle 508 Old 205
# History 697 3 High 255 Medium 212
3. Missing Function
각 컬럼에서 Missing값이 있는지 알 수 있는 함수
print(DF_marketing.stb.missing())
# missing total percent
# History 303 1000 30.3
# Age 0 1000 0.0
# Gender 0 1000 0.0
# OwnHome 0 1000 0.0
# Married 0 1000 0.0
# Location 0 1000 0.0
# Salary 0 1000 0.0
# Children 0 1000 0.0
# Catalogs 0 1000 0.0
# AmountSpent 0 1000 0.0
4. SubTotal Function
SubTotal은 말그대로 Sum값에서 각 항목별 SubTotal을 쉽게 구할 수 있는 Funtion이다.
아래 프로그램을 보면 바로 이해가 되는 결과, 눈으로 확인해 봅시다.
print(DF_marketing[['Age','OwnHome','AmountSpent']].groupby(['Age','OwnHome']).sum())
# Age OwnHome AmountSpent
# Middle Own 534259
# Rent 228600
# Old Own 230908
# Rent 62678
# Young Own 31091
# Rent 129234
print(DF_marketing[['Age','OwnHome','AmountSpent']].groupby(['Age','OwnHome']).sum().stb.subtotal())
# Age OwnHome AmountSpent
# Middle Own 534259
# Rent 228600
# Middle - subtotal 762859
# Old Own 230908
# Rent 62678
# Old - subtotal 293586
# Young Own 31091
# Rent 129234
# Young - subtotal 160325
# grand_total 1216770
'Pandas' 카테고리의 다른 글
데이타 결측치(누락값, 결측값) 처리하기 : fillna (ffill, bfill), dropna, isnull (0) | 2020.12.07 |
---|---|
Pandas에서 시간, 날짜 다루기 - to_datetime만 잘 다루면 끝! (0) | 2020.11.28 |
Pandas, read_excel()을 이용한 데이타 읽은 후 K-Means에 적용하기: 실습 (0) | 2020.11.27 |
Pandas 기초 통계를 위한 groupby 응용 - nunique()와 matplot로 그래프 간단하게 그리기 (0) | 2020.11.14 |
[TIP] Pycharm, Run Window에서 결과 값 전체 보이게 하기 (0) | 2020.11.01 |
Pandas 데이터 추출, 활용 하기 : loc, iloc 활용 [슬라이싱] (0) | 2020.10.14 |
Pandas 데이터 추출, 활용 하기 : loc, iloc 활용 [행단위] (0) | 2020.10.09 |
Pandas(판다스)로 데이터 핸들링 : 기본 : info(), describe(), value_counts(), head() (1) | 2020.10.04 |