데이터분석 기초 | 데이터 재형성 / 재배치(피벗) | stack, unstack 함수 | pivot 함수 개념 | melt 함수 개념 | id_vars , value_vars | var_name , value_name | 복합 개체 분리 explode 함수

    728x90

     

    1. 데이터 재형성과 피벗

     

    : 테이블 형식의 데이터는 다양한 방식과 기준으로 데이터를 재배치(피벗)하는 것이 가능
    : 판다스에 이러한 연산이 가능한 함수 있음

     

    ▶ 라이브러리 설치 및 가져오기

    import pandas as pd
    import numpy as np

     


    2. 열을 인덱스로 교환하기

     

    : 열을 인덱스로 교환하여 데이터를 재배치(피벗)할 수 있음
    : stack()unstack() 함수 사용

     

    ▶ coffee_size_data 만들기

    coffee_size_data = pd.DataFrame([[10, 28], [8, 22]],
                                  index = ['스타벅스', '커피빈'],
                                  columns = ['테이블 수', '매장 규모(평)'])
    coffee_size_data

     

    ▶ .stack( ) / .unstack( )

     

    * stack()

    : 데이터의 열을 인덱스로 만듦

    coffee_size_data.stack()

     

    * unstack() 

    : 다시 원래대로 돌리기

    coffee_size_data.stack().unstack()

     


    3. 데이터 재배치(피벗)하기

     

    ▶ 주식 데이터 로드

    data_stock = pd.read_csv('./datasets/stock_data.csv')
    data_stock.head()

     

    ▶ pivot() 

    : 매개변수 index = , columns = , values = 를 각각 지정하여 다양한 관점에서 데이터를 볼 수 있음

     

    * index = 회사명, columns = 날짜, values = 거래량

    data_stock.pivot(index = 'symbol', columns = 'date', values = 'volume')

     

    * index = 날짜, columns = 회사명, values = 종가

    data_stock.pivot(index = 'date', columns = 'symbol', values = 'close')

     

    ▶ pivot_table() 

    : pivot() 함수와 동일한 집계 결과를 생성할 수 있음

    : 매개변수도 pivot() 함수와 대부분 동일함

    pd.pivot_table(data_stock, values = 'close', index = 'date', columns = 'symbol')

     


    4. 넓은 형태의 데이터를 긴 형태로 재형성

     

    ▶ melt()

    : pivot()과 반대 개념 
    : pivot()은 지정한 열을 기준으로 데이터프레임을 생성함(데이터 재형성)
    : 반면 melt()는 사용자가 지정한 하나의 컬럼을 제외하고 나머지 컬럼들을 하나의 [변수]와 [값]으로 병합함

     

    * data_s 만들기

    data_s = pd.DataFrame({'음식명' : ['돈가스', '우동', '냉면'],
                          '평점' : [4.3, 4.2, 4.6],
                          '가격' : [10000, 9000, 12000],
                          '위치' : ['삼성동', '명동', '을지로입구']})
    data_s

     

    ▶ melt('기준key')

    data_s.melt('음식명')

    : '음식명' 열을 기준으로 모든 열을 하나의 변수, 값으로 축소함

    >> '음식명'을 제외한 '평점', '가격', '위치'가 variable(변수) 열에 들어가고, 각 값이 value(값)에 들어가 있음

     

    ▶ 매개변수 id_vars, value_vars /  var_name. value_name

     

     * id_vars  /  value_vars : [전체 열]이 아닌 [부분 열]만 가져올 때 사용

    *  var_name  /  value_name : melt()로 생성되는 열  이름을 바꿀 때 사용

    data_s.melt(id_vars = ['음식명'], value_vars = ['가격', '위치'], var_name = '항목명', value_name = '항목값')

     

    ▶ melt()로 재구성된 데이터프레임 되돌리기 → pivot()

    data_s.melt('음식명').pivot('음식명', 'variable', 'value')

     

    * reset_index()

    : 숫자 인덱스를 새롭게 생성할 때 사용

    data_s.melt('음식명').pivot('음식명', 'variable', 'value').reset_index()

     


    5. 복합 개체를 개별 개체로 분리

     

    ▶ explode()

    : 데이터에 복합적인 값이 들어 있을 때는 복합 개체를 개별 개체로 분리해야 함
    : explode() 함수 사용

    : 기본적으로 1개의 열을 기준으로 데이터 분리

     

    * data_e 만들기

    data_e = pd.DataFrame({'재료' : [['밀가루', '설탕', '계란'], '밀가루', [], ['버터', '생크림']],
                          '시간' : 10,
                          '방식' : [['굽기, 볶기'], np.nan, [], ['볶기', '섞기']]})
    data_e

     

    ▶ 복합 개체 분리하기

     

    * '재료' 데이터 분리하기

    data_e.explode('재료')

     

    * '재료', '방식' 데이터 분리하기

    data_e.explode('재료').explode('방식')

    728x90

    댓글