brunch

You can make anything
by writing

C.S.Lewis

by 박재열 Aug 11. 2020

Tidy Data

Hardley wickham-Tidy Data

 데이터 분석을 위해서는 데이터를 수집하고 정제하여 분석하기 쉽도록 해야 한다. 이 과정에서 중요하게 다루는 것이 Tidy Data이다.개인적으로 데이터를 공부하면서 어려웠던 부분이다.  도대체 어떤 데이터가 Tidy Data인가? 이 글은 이에 답하기 위하여 Hardley Wickham이 Tidy Data라는 글을 공부하고 정리한 내용이다. 특별한 설명이 없으면, 모든 인용은 https://vita.had.co.nz/papers/tidy-data.pdf, 하들리 위컴의 Tidy Data로 부터 발췌했다.


 그렇다면 Tyding이라는 것은 무엇일까? 이를 Wickham은 다음과 같이 정의한다.

 

    'tyding : Structuring data to facilitate analysis' 


 이러한 과정이 필요한 것은 실제로 수집된 데이터들이 정제 과정을 거치지 않고서는 분석이 어렵기 때문이다. 우리가 책에서 보게 되는 자료들과 달리(혹은 이조차도), 실재하는 자료들은 그대로 활용하기도 어렵고, 설사 그대로 활용이 가능하더라도 그 과정에서 실수를 하기가 쉽다. 그리하여, 데이터를  정제하는 과정을 거치게 되는데 그 목표는 Tidy Data가 된다. 

 

 이러한 Tidy Data가 무엇인지에 대답하기에 앞서 우리는 다음과 같은 질문을 맞이하게 된다. 그렇다면 데이터는 어떤 식으로 구성이 되는가? 그리고 그 구성원들은 어떠한 특징들을 가지고 있는가?

 

    'Data Structure : Usually tables made up of rows and columns'

 

 우리가 가장 흔하게 접하는 데이터의 형태이다. 테이블들이 있고, 각각의 테이블은 열과 행으로 이루어져 있다. 그렇다면 열과 행은 무엇으로 구성되는가? 무엇을 열로 놓을 것이고, 무엇을 행에 놓을 것인가?  


    'Every value(numeric or character string) is either variable or observation

    Variable contains all values that measure the same underlying attribute across units.

        ex)height, temperature, duration

    Observation contains all values measured on the same unit across attributes

        ex)a person, a day, a race'

 

 모든 수치나 문자열로 구성된 모든 값은 variable과 observation 둘 중에 하나다. 이 때, variable은 행을 observation은 열을 구성하게 된다. Variable에는 다양한 개체들 속에 동일한 속성을 가지는 모든 값들이다. observation은 하나의 개체가 다양한 속성들 속에서 가지게 되는 값들이다. 말이 어렵지만, 아래의 표를 보면 쉽게 이해를 할 수가 있다. 


https://garrettgman.github.io/tidying/

 위의 테이블의 첫 번째 행에는 country, iso2, iso3, ... sp가 있다. 이들 각각은 variable로써, 어떠한 속성을 나타낸다. 각 행에 해당하는 수치들은 해당하는 속성에 대하여 개체가 가지게 되는 값이다. 마찬가지로 각 열에 해당하는 값들을 보면 각 속성별로 해당하는 값들이 년도별로 정리되어 있음을 볼 수 있다. 이 때 하나의 열은 observation이 되는 것이다.

 

' How to determine variables and observations?

 General rule 

  1)It is easier to describe functional relationship between variables than between rows

  2)it is easier to make comparisons between group of observations than between columns '


 물론 실재하는 데이터들은 더 복잡하고 난잡한 경우가 많다. 그리하여, 무엇을 variable로 무엇을 observation으로 두어야 할지 알기가 어려울 수가 있다. 이는 특히 데이터가 수집된 목적에 따라 하나의 값이 variable이 될 수도, observation이 될 수도 있기 때문이다. 그렇기 때문에 많은 주의를 기울여야 하는 부분이고 대부분의 경우에는 위와 같은 규칙을 따른다. Variable간의 관계를 찾기가 observation간의 관계를 찾는 것보다 쉽고, Variable들끼리 비교하는 것보다 observation끼리 비교하는 것이 훨씬 쉽다.

 

 이렇게 Variable을 행에, Observation을 열에 둔다는 것을 알고, 어떠한 기준으로 이들이 구성되는지를 알면, 다음과 같이 Tidy Data를 정의할 수 있게 된다. 


 'Tidy data is a STANDARD way of mapping the meaning of a dataset to it's structure

 (i.e.) how rows, columns, and tables are matched up with observations variables and types.


 We say that the data is tidy if,


 1) Each variable forms a column

 2) Each observation forms a row 

 3) Each type of observational units forms a table 

 

 else, data is messy.'

    

 Wichham의 Tidy Data의 나머지 부분은 messy datasets을 어떻게 Tidying 할 것인지를 다룬다. 그에 따르면, 대부분의 messy datasets은 다음과 같은 문제들을 가지고 있다. 


 'Column headers are values, not variable names

 Multiple variables are stored in one column

 Variables are stored in both rows and columns 

 Multiple types of observational units are stored in the same table 

 A single observational unit is stored in multiple tables'


 위 다섯가지 문제들을 포함하여, 대부분의 문제들을 R을 이용하여 해결하는 과정들에 대해 다루게 되는데, 이 때 그는 melting, stirng spliting, casting을 이용하여 이들을 해결할 수 있다고 주장한다. 실제로 이를 적용해가는 예시들을 보면서 tidy data에 대해 좀 더 구체적으로 이해 할 수 있다. 다만 이 글의 범위를 벗어나므로, 이 글은 여기에서 마친다. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari