SQL같은 쿼리문은 그룹 연산에 제약이 있다.
아주 복잡한 그룹연산도 pandas객체나, Numpy배열을 받는 함수의 조합으로 해결 가능
▶ 하나 이상의 키( 함수, 배열, DataFrame의 컬럼이름)을 이용해서 pandas객채를 여러조각으로 나누는 방법
▶ 합계, 평균, 표준편차, 사용자 정의 함수 같은 그룹 요약 통계를 계산하는 방법
▶ 정규화, 선형회귀, 등급 또는 부분집합 선택 같은 집단 내 변형이나 다른 조작을 적용하는 방법
▶ 피벗테이블과 교차일람표를 구하는 방법
▶ 변위치 분석과 다른 통계 집단 분석을 수행하는 방법
- Groupby 매카니즘
분리 → 적용 → 결합 (기존에 sql에 table에서는 할수 없는 개념이다.)
1) 분리 : 데이타를 하나 이상의 key를 기준으로 분리한다.
DataFrame의 경우 로우(axis=0), 컬럼(axis=1)의 사항으로 분리 가능
각 그룹의 색인의 형태는 다양하며, 모두 같은 타입일 필요가 없다.
- 그룹으로 묶을 축과 동일한 길이의 리스트나 배열
- DataFrame의 컬럼 이름을 지칭하는 값
- 그룹으로 묶을 값과 그룹 이름에 대응하는 사전이나 Series객체
- 축 색인 혹은 색인 내의 개별 이름에 대해 실행되는 함수
2) 적용 : sum, count같은 함수로 분리된 그룹에 각각 적용
3) 결합 : 함수를 적용한 결과를 하나의 객체로 결합한다.
- Groupby객체 (객체이다. print로 찍히는 값이 아니다.)
- df['data1'].groupby(df['key1']) # 원하는 대로 groupby 가능
- df['data1'].groupby([df['key1'], df['key2']]).mean() # sql에서 groupby 여러개 하는 기능
- np.array로 생성한 Series객체에 대해서도 groupby를 사용 할 수 있다.
- df.groupby(['key1', 'key2']).size()
- 그룹의 크기를 담고 있는 Series를 반환하는 size메소드
- 그룹 색인에서 누락된 값은 결과에서 제외
- df['data1'].groupby(df['key1']) # 원하는 대로 groupby 가능
- Group정보의 반복 순회하기
- 그룹 이름과, 그에 해당하는 데이타 묶음을 튜플로 반환
- for name, group in df.groupby('key1'):
- for (k1, k2), group in df.groupby(['key1', 'key2']):
- Group에 있는 사항 중에 원하는 데이타 추출하기
- dict(list(df.groupby('key1')) # Dictionary로 변경해서 조회한다.
Dictionary 형태로 바꾸어서 조회를 할수 있다.
- 컬럼이나 컬럼의 일부만 선택하기
- df.groupby(['key1', 'key2'])[['data2']].mean()
- df.groupby(['key1', 'key2'])['data2']
- people.groupby(mapping, axis=1)
- axis=0, axis=1의 값의 기준으로 행/열 기준 groupby가 진행된다.
- 함수로 그룹핑
- len함수 이용 (이름의 길이별로 그룹을 묶고 싶은 경우)
- people.groupby(len).sum()
- people.groupby([len, key_list]).min()
- dict(list(df.groupby('key1')) # Dictionary로 변경해서 조회한다.
- Groupby객체 (객체이다. print로 찍히는 값이 아니다.)
- 데이터 집계
- count, sum, mean등 최적화된 groupby 메소드 (P.396)
- Series에서 제공하는 quantile() 메소드를 이용할 수 있다.
- aggregate , agg 메소드 : 자신만의 데이타 집계함수를 사용하려는 경우
- Apply : 일반적인 분리-적용-병합
가장 일반적인 GroupBy메소드의 목적을 수행함
객체을 여러조각으로 나누고 → 전달된 함수를 각 조각에 일괄 적용 후 → 다시 합친다.
전달되는 함수는 각자 개발하는 부분이다 (수행 로직에 맞추어 개발되어진다.) - 피벗테이블과 교차일람표
- DataFrame에는 pivot_table메소드가 있다. (pandas의 최상위 함수로 존재)
- pivot_table은 마진 (부분합을 추가할수 있는 기능)을 제공한다.
- margins=True : 부분합을 포함하도록 확장가능
- pivit_table옵션 (P. 420)
- 교차일람표(교차표)
- 그룹 빈도를 계산하기 위한 피벗테이블의 특수한 경우
- DataFrame에는 pivot_table메소드가 있다. (pandas의 최상위 함수로 존재)
'파이선' 카테고리의 다른 글
시계열 (chap11) (0) | 2021.09.15 |
---|---|
데이터 준비하기:조인,병합,변형 (chap8) (0) | 2021.09.05 |
데이터 정제 및 준비 (chap7) (0) | 2021.09.02 |
데이터 로딩과 저장, 파일형식 (chap6) (0) | 2021.09.02 |
pandas 시작하기 (chap5) (0) | 2021.09.01 |