3 분 소요

1. 개요

  • 이곳에서는 데이터를 자유자재로 다루기 위한 가공 방법을 익힌다. 데이터 가공이란 데이터를 추출, 요약하고 여러 데이터를 합치는 방법 등을 말한다.
  • 실습 코드:
  • 특히 다음 7개의 메서드는 데이터 가공에서 많이 사용되는 유용한 명령어이며, 본 특강의 3강 ~ 5강까지 분석의 중추를 이룬다.
  • 메서드를 다음과 같이 분류하면 기억하기 쉽다.
    • 정리 정돈 정렬
      dropna()   groupby()   sort_values()
      query()   agg()   head()
      assign()        
  • 세부 설명
    • 정리: 데이터를 분석 필요에 맞게 줄이거나 늘리는 과정. 결측치 처리(dropna)와 행 선택(query) 작업은 줄이기, 파생 변수 생성(assign) 작업은 늘리기에 해당
    • 정돈: ‘정리’된 데이터를 종류별로 요약하는 과정. 같은 종류끼리 그룹화(groupby)해서 집계(agg)하는 작업
    • 정렬: ‘정리정돈’한 결과를 알기 쉽게 만드는 과정. 내림/오름차순 정렬(sort_values)하고, 일부만 표시(head, tail)하는 작업.
  • 주의점
    • 분석 목적에 따라 7개의 메서드 중 일부는 생략될 수 있다.
    • 각 메서드는 입력 형식에 차이가 있어서, 각 형식에 맞게 입력해야 한다.

2. 간단한 예제에 의한 이해

3. 교재의 관련 내용

3.1. 추출: query(), df[col_name]

3.1.1. 조건 맞는 데이터(= 행) 추출
  • 조건에 맞는 데이터 추출
    exam.query('english <= 80')
    
  • 여러 조건 동시 충족
    exam.query('nclass == 1 & math >= 50')
    
  • 여러 조건 중 하나 이상 충족
    exam.query('math >= 90 | english >= 90')
    exam.query('nclass in [1, 3, 5]')
    
3.1.2. 필요한 변수(= 열) 추출:
  • 변수 추출
    exam['math']                               # 한 변수 추출
    exam[['nclass', 'math', 'english']]        # 여러 변수 추출
    
  • 변수 제거
    exam.drop(columns = 'math')                # 한 변수 제거
    exam.drop(columns = ['math', 'english'])   # 여러 변수 제거
    
3.1.3. pandas 명령어 조합 (행과 열 추출)
  • exam.query('math >= 50')[['id', 'math']].head()
    

3.2. 정렬: sort_values()

  • 순서대로 정렬
    exam.sort_values('math')                      # 오름차순 정렬
    exam.sort_values('math', ascending = False)   # 내림차순 정렬
    
  • 여러 변수 기준 정렬
    exam.sort_values(['nclass', 'math'], ascending = [True, False])
    

3.3. 파생변수 추가: assign()

  • 한 개의 파생변수 추가
    exam.assign(total = exam['math'] + exam['english'] + exam['science'])
    
  • 여러 파생변수 한꺼번에 추가
    exam.assign(total = exam['math'] + exam['english'] + exam['science'], \
              mean = (exam['math'] + exam['english'] + exam['science']) / 3)
    
  • assign()에 조건을 부여할 수 있는 np.where() 적용
    exam.assign(test = np.where(exam['science'] >= 60, 'pass', 'fall'))
    
  • 추가한 변수를 pandas 코드에 바로 활용하기
    exam.assign(total = lambda x: x['math'] + x['english'] + x['science']) \
      .sort_values('total') \
      .head()
    
    • lambda x: 람다 함수. 데이터 프레임 자리에 x를 입력하겠다는 의미 &larr 코드를 간결화 (교재, 157쪽)

3.4. 집단별 요약: groupby(), agg()

  • 집단별 평균
    exam.groupby(['nclass']) \
      .agg(mean_math = ('math', 'mean'))
    
  • 각 집단별로 다시 집단 나누기
    exam.groupby(['manufacturer', 'drv']) \
      .agg(mean_cty = ('cty', 'mean'))
    

3.5. 데이터 합치기: merge(), concat()

  • 가로로 합치기
    pd.merge(test1, test2, how = 'left', on = 'id')
    
  • 세로로 합치기
    pd.concat([group_a, group_b])
    

4. 실습예제를 통한 유형별 적용(7개 메서드 중심)

  • 구분 메서드 a b c d
      dropna()        
    정리 query()  
      assign()    
    정돈 groupby()      
      agg()    
    정렬 sort_values()  
      head()  

a. 배기량(displ) 4이하 자동차와 5이상인 자동차의 고속도로 연비(hwy) 평균 비교 (→ 교재 144, 150쪽)

car_until4 = mpg.query("displ <= 4") \
                .agg(mean_hwy = ('hwy', 'mean'))
car_until4
car_from5 = mpg.query("displ > 5") \
               .agg(mean_hwy = ('hwy', 'mean'))
car_from5

b. ‘audi’가 생산한 자동차 중에 hwy 상위 1~5위인 자동차의 데이터 출력 (→ 교재 153쪽)

mpg.query("manufacturer == 'audi'") \
   .sort_values(by = 'hwy', ascending = False) \
   .head()

c. 합산 연비 변수(hwy와 cty 포함)의 평균이 가장 높은 자동차 3종의 데이터를 출력하라 (→ 교재 158쪽)

mpg.assign(average = lambda x: (x['hwy'] + x['cty']) / 2) \
   .sort_values(by = 'average', ascending = False) \
   .head(3)

d. 제조 회사별로 ‘suv’ 자동차의 도시 및 고속도로 합산 연비 평균을 구해 내림차순으로 정렬하고, 1~5위까지 출력하기 (→ 교재 166쪽)

mpg.query("category == 'suv'") \
   .assign(total = lambda x: (x['cty'] + x['hwy']) / 2) \
   .groupby('manufacturer') \
   .agg(mean_total = ('total', 'mean')) \
   .sort_values(by = 'mean_total', ascending = False) \
   .head()

업데이트:

댓글남기기