Python으로 빈도표 만들기 (Pandas Crosstab)
파이썬에서 빈도표(Frequency Table)를 만드는 방법은 여러가지가 있지만, 그 중 하나가 pandas의 crosstab 함수를 이용하는 방법이다. 아래처럼 dataframe의 컬럼(Series 데이터타입)을 파라미터로 넘겨주면 빈도표를 만들어준다.
import pandas as pd
raw_data = {'regiment': ['Nighthawks', 'Nighthawks', 'Nighthawks', 'Nighthawks', 'Dragoons', 'Dragoons', 'Dragoons', 'Dragoons', 'Scouts', 'Scouts', 'Scouts', 'Scouts'], 'company': ['infantry', 'infantry', 'cavalry', 'cavalry', 'infantry', 'infantry', 'cavalry', 'cavalry','infantry', 'infantry', 'cavalry', 'cavalry'], 'experience': ['veteran', 'rookie', 'veteran', 'rookie', 'veteran', 'rookie', 'veteran', 'rookie','veteran', 'rookie', 'veteran', 'rookie'], 'name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'], 'preTestScore': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3], 'postTestScore': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]} df = pd.DataFrame(raw_data, columns = ['regiment', 'company', 'experience', 'name', 'preTestScore', 'postTestScore']) df
2x2 테이블
regiment를 기준으로 하여 company의 빈도를 구한다.
pd.crosstab(df.regiment, df.company, margins=True)
company | cavalry | infantry | All |
---|---|---|---|
regiment | |||
Dragoons | 2 | 2 | 4 |
Nighthawks | 2 | 2 | 4 |
Scouts | 2 | 2 | 4 |
All | 6 | 6 | 12 |
변수 3개 테이블
company, experience를 기준으로하여 regiment의 빈도를 구한다.
pd.crosstab([df.company, df.experience], df.regiment, margins=True)
regiment | Dragoons | Nighthawks | Scouts | All | |
---|---|---|---|---|---|
company | experience | ||||
cavalry | rookie | 1 | 1 | 1 | 3 |
veteran | 1 | 1 | 1 | 3 | |
infantry | rookie | 1 | 1 | 1 | 3 |
veteran | 1 | 1 | 1 | 3 | |
All | 4 | 4 | 4 | 12 |
만들어진 crosstab에 접근하는법
crosstab을 통해 생성한 객체는 dataframe 타입이고, regiment를 제외한 company와 experience는 multi index로 지정되어있다. 따라서 인덱스 값으로 해당 인덱스의 원소값을 얻는 loc 함수를 통해 crosstab 원소에 접근할 수 있다.
cross_tab = pd.crosstab([df.company, df.experience], df.regiment, margins=True)
cross_tab.loc[[('cavalry', 'rookie')]]
참고
'Tools > Python' 카테고리의 다른 글
Python - Pandas 변수 정렬하기 (0) | 2017.10.24 |
---|---|
Python - Pandas 그룹별 평균 구하기 (2) | 2017.10.24 |
Python - 강화학습 Q-learning on Non-deterministic World (1) | 2017.09.19 |
Python - 강화학습 Q-Learning 기초 실습 (0) | 2017.09.18 |
Python - MinMaxScaling, StandardScaling (0) | 2017.08.27 |