R 초보를 위한 데이터 클린징 실습

R 데이터 클린징
소스: www.linkedin.com

R은 엑셀과 달리 데이터를 셀 단위로 확인하면서 변경하기 귀찮은 언어입니다. 초보자의 경우 가급적 분석에 적합한 구조로 데이터를 변경한 다음 R에 Import 하는 것을 추천드리지만, 가끔 애매한 경우가 생깁니다.

그중 하나가 웹에서 데이터를 받는 경우인데요, 오늘은 롤 인벤에서 선수들 경기 전적을 다운로드 받아서 간단하게 클린징 실습을 해 보도록 하겠습니다.

클린징 한 데이터는 ggplot2를 사용해서 팀 별 승패 및 KDA 분포를 확인하는 탐색적 데이터 분석(Exploratory Data Analysis)에 사용할 예정입니다. 목표에 맞게 데이터를 가공해 봅시다.

1. 데이터 다운로드

XML 패키지를 사용해서 웹페이지에 테이블 형식으로 있는 자료를 R로 다운로드 받을 수 있습니다. 인벤 기록실의 LoL선수기록을 아래 df 객체로 다운로드 받았습니다.

롤챔스 전적
소스: 인벤

2. 데이터 확인하기

str, class, summary 함수는 데이터 셋 자체에 대한 정보를 알려줍니다. 데이터를 R에 임포트한 직후 위 함수들을 사용해서 데이터를 확인하는 습관을 들이면 편리합니다.

우선 str 함수를 사용해서 다운로드 받은 내용을 확인해 볼까요?

3. 데이터 프레임 형식으로 변환하기

R에는 다양한 형태의 객체가 있지만 가장 자주 사용하는 것은 데이터 프레임 형식의 데이터 셋입니다. 잘 정리된 엑셀 파일 모양의 데이터라고 생각하시면 됩니다.

위에서 str 명령어로 데이터를 확인해 보니, 글씨가 깨져서 확인하기는 어렵지만 두개의 데이터 프레임을 포함하고 있는 리스트가 생성되었네요. 우리가 확인 하고 싶은 대상은 리스트의 두번째 항목이기 때문에 첫번째 항목을 삭제합니다. 다시 한번 str 함수를 사용해서 데이터 셋을 확인해 볼까요?

음…한글 인코딩이 제대로 되지 않아 지저분 하네요. 일단 깔끔한 형식으로 파일을 확인해 볼까요? View 함수를 사용하면 익숙한 엑셀 형태로 데이터 프레임을 확인할 수 있습니다.

View R 테이블
View 명령어를 이용하면 테이블 형식으로 데이터 프레임을 시각화할 수 있다.

4. 데이터 클린징 – 변수 이름 바꾸기

한글 인코딩이 제대로 되어 있지 않아 변수 이름이 지저분 하네요. UTF-8 인코딩 문제인데, 이건 나중에 별도로 다루어 보겠습니다. 우선 필요 없는 변수들을 삭제하고, 변수 이름을 깔끔하게 정리해 볼까요?

R View table

중복 칼럼들을 잘라내고 팀명, 챔피언명, 전적만 남겼습니다. 훨씬 보기 깔끔하네요.

5. 데이터 클린징 – 변수 유형 바꾸기

데이터 분석을 시작하기 전에 변수의 유형이 내가 원하는 유형인지를 확인해야 합니다. 변수 유형이 적절하지 않으면 결과가 매우 달라질 수 있기 때문이죠. 다시 str을 통해 변수 유형을 확인하니 모두 Factor 유형이네요. 일단 전적 부분은 수치형 변수로 바꾸어 주어야 겠네요.

help(킬관여율)를 제외한 나머지 숫자는 정수이기 때문에 위 코드를 사용해서 각 변수를 numeric으로 변경해 주면 됩니다. help는 %가 붙어 있는 변수이기 때문에 다른 코딩이 필요합니다.

(주의! 숫자처럼 보이는 변수라도 factor로 인식되어 있는 경우에는 반드시 character 형으로 변경한 후 numeric로 변경해야 합니다. )

R에서 % 기호가 붙어 있는 변수를 숫자로 바꾸기 위해서는 % 기호를 제거해야 하는데요, sub 함수를 사용하고 100으로 나누면 쉽게 수치형으로 바꿀 수 있습니다. 이제 다시 한번 변수 클라스를 확인해 볼까요?

킬, 데쓰, 어시스트, KDA, 킬관여율 모두 수치형 변수로 잘 변경이 되었네요.

6. 데이터 클린징 – 변수 분리하기

name 변수를 보면 팀명과 선수명이 하나의 컬럼에 속해 있죠? 팀 별 KDA도 궁금하니까 name 변수를 team과 name으로 쪼개 보도록 하겠습니다.

strsplit으로 간단하게 스페이스 를 기준으로 좌/우로 나누면 될 것 같은데… 어라 SKT T1 Faker 선수 같은 경우는 스페이스가 두개 있네요.  뒤쪽 스페이스를 기준으로 두개의 변수로 쪼개면 되겠네요.

(R에서 문자열을 다루는 여러가지 방법이 있습니다.  자연어 처리에 많이 사용되기도 하고 알아두면 유용한 팁이기 때문에 기회가 될 때 포스팅 하겠습니다. 궁금하신 분은 링크를 따라가시면 됩니다. )

name 변수를 마지막 스페이스를 기준으로 두개로 구분해서 temp에 저장했습니다. SKT T1 선수들의 팀과 이름이 제대로 분리되었네요. 이제 temp의 두 변수 V1(팀명)과 V2(선수명)을 원래 데이터 셋에 부착시켜 보죠.

R View
클린징이 완료된 데이터셋

분석을 위한 모든 변수들이 데이터프레임의 형태로 깔끔하게 정리되어 있네요.

 

지금까지 매우 간단한 데이터 클린징 작업을 실습해 보았습니다. 실제로는 missing value도 많고, 데이터셋의 모양도 바꾸어야 하는 경우도 많지만 기본적인 큰 틀은 위 단계를 벗어나지 않습니다.

다음 포스팅에서는 클린징한 데이터를 ggplot2 패키지로 시각화 하는 실습을 해 보겠습니다.

 

참고 자료

1) Svetlana Eden, Introduction to String Matching and Modification in R Using Regular Expressions

2) WIKIBOOKS, R Programming

2 thoughts on “R 초보를 위한 데이터 클린징 실습”

댓글은 닫혔습니다.