ALL NIGHT STUDY

Tidy 데이터

with_AI 2021. 9. 16. 02:20

"밑바닥 부터 시작할 필요 없는 데이터"

tidy 데이터의 특징

  1. 각 변수는 개별의 열(column)으로 존재한다.
  2. 각 관측치는 행(row)를 구성한다.
  3. 각 표는 단 하나의 관측기준에 의해서 조직된 데이터를 저장한다.
  4. 만약 여러개의 표가 존재한다면, 적어도 하나이상의 열(column)이 공유되어야 한다.

지저분한 데이터 예시

 

깔끔한 데이터 예시 (tidy화)

Tidy 데이터가 왜 필요할까?

데이터 처리에 가장 많은 시간이 소요되는 전처리 과정을 줄여 보자, 그러기 위해 처음부터 데이터를 표준화해서 만들자는 것입니다. 처음부터 기본적인 규칙을 가지고 데이터를 만들면, 모두의 시간을 아낄 수 있으니까.

→ 그래서 나온 것이 Tidy 데이터 형태이다.

"각 변수가 열이고 각 관측치가 행이 되도록 배열된 데이터이다."

그러면 Tidy 데이터를 어떻게 만들까?

다른사람들과 공유하거나 보고하는데는 왼쪽의 데이터 형태가 좋지만, 데이터의 문제를 해결하거나 분석하기에는 오른쪽의 형태가 더 좋습니다. 그렇다면 어떻게 데이터의 형태를 바꿀수있을까요? 이때 Pandas의 melt 함수를 사용합니다.

Melt( )

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)

melt ( ) 예시

### 각 행에 대해서 (unique identifier)를 확인합니다.
### 한개의 "tidy" 한 열에 대해서 포함되어야 할 (기준이 되는) 데이터를 선택합니다.
tidy1 = tidy1.melt(id_vars = 'index', value_vars = ['A', 'B'])
tidy1

그러면 Tidy 데이터를 다시 원래대로는?

pivot_table( ) 함수를 이용한다!

# 파라미터에 대한 설명
# index: unique identifier
# columns: "wide" 데이터에서 column별로 다르게 하고자 하는 값.
# values: 결과값이 들어가는 곳 (wide 데이터프레임의 내용에 들어갈 값)
wide = tidy1.pivot_table(index = 'row', columns = 'column', values = 'value')
wide

Tidy 데이터의 목적?

tidy 데이터는 Seaborn과 같은 시각화 라이브러리에서 유용하게 쓰일수 있습니다.

### Seaborn의 기능 중 한가지 예시입니다.
import seaborn as sns
sns.catplot(x = 'row', y = 'value', col = 'column', kind = 'bar', data = tidy1, height = 2);

'ALL NIGHT STUDY' 카테고리의 다른 글

가설 검정  (0) 2021.09.16
미분  (0) 2021.09.16
Concat/Merge  (0) 2021.09.16
Pandas(Python Data Analysis Library)  (0) 2021.09.16
Feature Engineering  (0) 2021.09.16