데이터분석 기초 | 데이터 재형성 / 재배치(피벗) | 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

댓글