본문 바로가기

R

데이터 분석 시작기-7 (데이터 전처리 - 행 추출;filter)

안녕하세요!

설날이 다 지나갔습니다! 사실 마지막날~ 3시간 남았습니다!

잘 놀다 왔으니 다시 시작기 시작하겠습니다!

 

우리가 데이터 분석을 하려면 데이터를 자유자재로 다룰 수 있어야 합니다! 여러 가지 상황에 대비하여 일부를 추출하거나, 종류별로 나누거나, 여러 데이터를 합치는 등 연속적으로 작성해보겠습니다!

 

먼저, 데이터 가공에 앞서 지난 분석기에 짧게 언급했던 데이터 전처리 작업에 가장 많이 사용되는 패키지인 dplyr 함수를 설명하겠습니다!

dplyr 함수 기능
filter() 행 추출
select() 열(변수) 추출
arrange() 정렬
mutate() 변수 추가
summarise() 통계치 산출
group_by() 집단별로 나누기
left_join() 데이터 합치기(열)
bind_rows() 데이터 합치기(행)

이렇게 8가지의 함수를 주로 다룰 예정이며, 차근차근 진행해보겠습니다. (저는 아직도 헷갈리는 것 같습니다,,)

 

그리고, dplyr 패키지에 내재된 함수들은 %>%라는 pipe operator(파이프 연산자)를 사용하여 연결하고, pipe처럼 함수들을 연결시켜주는 느낌이라고 하네요 ㅎㅎ (이상해요 아무리 생각해도) 단축키는 (Ctrl + Shift + M)

 

#1 조건에 맞는 데이터만 추출하기(filter)

데이터를 분석할 때는 전체 데이터를 사용하기도 하지만, 일부를 추출해 분석하기도 합니다! filter의 경우 행을 추출하는 함수로서, 행=사람의 정보 한 사람의 정보를 다 추출하게 되겠죠?

제가 했던 것들을 보겠습니다!

exam file

위의 이미지는 이번에 사용하게될 exam data입니다! 20명의 정보가 있고, 각각의 id, 반, 수학/영어/과학 점수가 포함되어있네요!

1반인 학생들

이는 class == 1인 경우의 자료들만 추출하게 하는 코드입니다! 이때 우리가 흔히 하는 등호가 한 번(=)이 아닌 등호가 두 번(==) 입력해야 됩니다! 한 번 입력하는 경우는 파라미터를 지정할 때! 잘 알아둡시다!

 

이와 반대로, 1반이 아닌 경우만 출력하고 싶다면, ==가 아닌 !=를 입력해주면 됩니다.

1반이 아닌 학생들

1반 학생이 4명이었으니, 나머지는 총 16명 제대로 추출된 것을 확인할 수 있습니다! 이를 활용하여, 2반인 학생, 3반이 아닌 학생 등 여러 경우로 활용할 수 있습니다!

 

다음은, 같다는 조건이 아닌 초과, 미만, 이상, 이하 등의 조건을 걸어보도록 하겠습니다!

 

이때 초과(>), 미만(<), 이상(=>), 이하(<=)로 표시하면 됩니다.

수학 점수가 50점을 초과한 학생들

이는 너무 단순해서 한 가지만 보고 넘어가겠습니다!

 

만약, 두 가지 경우를 모두 충족하는 경우도 얻고 싶을 수가 있겠죠? 그럴 때는 또 다른 방법이 존재합니다!

and를 의미하는 & 기호를 사용하거나, or을 의미하는 | 기호를 사용할 수 있습니다. (| 기호의 경우 shift와 ₩를 같이 누르면 됩니다! a.k.a. vertical bar)

1반이면서 수학 점수가 50점 이상인 학생들

이렇게, 1반이면서 수학 점수가 50점 이상인 학생을 추출할 수 있으며, 

수학 점수가 90점 이상이거나 영어 점수가 90점 이상인 학생들

두 조건을 모두 만족하는 것이 아닌, 수학 점수가 90점 이상이거나 영어 점수가 90점 이상인, 한 가지 조건만을 만족해도 추출할 수 있는 코드입니다.

이와 유사하게, 변수의 값이 지정한 목록에 해당될 경우만 추출해야 할 경우가 있습니다. 점수가 아닌 반이 1반 혹은 3반 혹은 5반인 경우에만 추출될 수 있도록 말이죠! 이런 경우에도 똑같이 vertical bar를 사용하여 나열해주면 된답니다!

1반, 3반 혹은 5반인 학생들

하지만, 이러한 경우에 vertical bar를 사용하게 되면 코드도 매우 길어져서 보는데도 불편하고 오류가 날 확률도 증가하게 됩니다. 이를 보완할 수 있는  %in%(Matching Operator, 매치 연산자)를 활용하여 변수의 값이 지정한 조건 목록에 해당하는지 확인하는 기능을 하게 됩니다.

1반, 3반 혹은 5반인 학생들

같은 결과를 얻은 것을 확인할 수 있었습니다! 코드를 해석해보면, exam에서 class가 1, 3, 5가 맞는지 확인하라! 라는 해석을 개인적으로 했습니다! 이렇게 알아가야 실수가 적어지더라구요!

 

이러한 행 추출을 이용하여 1반 혹은 2반의 전체 데이터를 추출하고, 데이터 프레임 내부 데이터를 지정하는 $ 기호를 활용하여 평균, 중간값, 최댓값 등 쉽게 파악할 수 있습니다!

 

이번 시간엔 행 추출을 하는 filter 함수에 대해 알아보았습니다!

다음 시간에는 필요한 변수만을 추출하는 즉, 열을 추출하는 select 함수에 대해 알아보겠습니다!

 

감사합니다!