본문 바로가기

Pandas

Pandas Sidetable: 판다스 똑똑하게 사용하기 - Freq, Counts, Missing, Subtotal

반응형

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

 

반응형