본문 바로가기

파이선

데이타 집계와 그룹연산 (chap10)

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 가능
        결과값이 Groupby객체이다. 값이 출력되지 않는다.
      • df['data1'].groupby([df['key1'], df['key2']]).mean()    # sql에서 groupby 여러개 하는 기능
      • np.array로 생성한 Series객체에 대해서도 groupby를 사용 할 수 있다.
      • df.groupby(['key1', 'key2']).size()   
        • 그룹의 크기를 담고 있는 Series를 반환하는 size메소드
        • 그룹 색인에서 누락된 값은 결과에서 제외
    • 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()
  • 데이터 집계
    • count, sum, mean등 최적화된 groupby 메소드 (P.396)
    • Series에서 제공하는 quantile() 메소드를 이용할 수 있다.
    • aggregate , agg 메소드 : 자신만의 데이타 집계함수를 사용하려는 경우
  • Apply : 일반적인 분리-적용-병합
    가장 일반적인 GroupBy메소드의 목적을 수행함
    객체을 여러조각으로 나누고 → 전달된 함수를 각 조각에 일괄 적용 후 → 다시 합친다.
    전달되는 함수는 각자 개발하는 부분이다 (수행 로직에 맞추어 개발되어진다.)
  • 피벗테이블과 교차일람표
    • DataFrame에는 pivot_table메소드가 있다. (pandas의 최상위 함수로 존재)
      • pivot_table은 마진 (부분합을 추가할수 있는 기능)을 제공한다.
      • margins=True : 부분합을 포함하도록 확장가능
    • pivit_table옵션 (P. 420)
    • 교차일람표(교차표)
      • 그룹 빈도를 계산하기 위한 피벗테이블의 특수한 경우

'파이선' 카테고리의 다른 글

시계열 (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