[Data] R 빠른 복습

업데이트:

R로 EDA하기

머신러닝이나 딥러닝 라이브러리가 파이썬으로 하는 것이 많지만, EDA 파트에서 R은 상당히 강점이 크다고 생각합니다. R로 EDA 할 때 필요한 정리본입니다.

Data Manipulation

1. pipe

파이프는 함수는 아니고, %>% 를 사용하여 manipulation을 간편하게 해주는 기법입니다. %>% ‘전’ 을 데이터로 두고, ‘후’ 에서 필터링하면 됩니다.

str(iris)
iris %>% str()

2. select

원하는 ‘column’ 을 선택해주는 함수입니다.

select(data, AirTime)
select(data, 2:5)

column 명을 선택할 때, 도움이 되는 함수들 입니다.

starts_with("X")
ends_with("X")
contains("X")
matches("X")  # regular expression 넣어서 추출
num_range("x", 1:5)
one_of(x)

3. mutate

새로운 column을 만들어줍니다. 한꺼번에 여러 column 추가도 가능합니다. ‘df$new <- expression’ 와 동일합니다.

# mutate(data, new column = expression)
mutate(data, loss = AirTime - DelayTime)

4. filter

원하는 조건에 해당하는 행을 추출합니다. 한 번에 여러 조건을 줄 수 있습니다.

# filter(data, condition)
filter(data, Distance >= 30)

5. arrange

특정한 column을 기준으로 정렬을 해줍니다. 여러 column을 주면, 앞에 나온 column이 우선순위가 높습니다.

# arrange(data, column)
arrange(data, desc(AirTime))

6. summrise

데이터 프레임을 요약해서 요약된 데이터 프레임을 반환합니다.

summrise(data, total=sum(A),
                avg=mean(A))

7. group_by

보통 summrise와 같이 많이 사용되는 함수는 group_by입니다. SQL에서의 GROUP BY와 동일합니다.

data %>%
  group_by(country) %>%
  summarise(pure_profit = sum(sales)-sum(cost)) %>%
  head()
# distinct(data, column) : 중복 제거 후 데이터 프레임
# n_distinct(data, column) : 중복 제거 후 갯수

Data visualization (ggplot2)

layer가 여러개 있고, 각각의 요소를 블럭 쌓듯이 추가해가면서 시각화할 수 있습니다.

Layer

  • data (필수)
  • aesthetics (필수)
  • geometries (필수)
  • facets
  • statistics
  • coordinates
  • theme

image

대표적인 scatter, bar, line 플롯을 정리합니다. 더 정교한 시각화 자료가 아니더라도 인사이트를 받기에는 충분하다고 생각합니다.

0. ggplot

ggplot(data, aes(x=[column명], y=[column명], col=[색깔 or column명], fill=[barplot의 경우 블록 색깔], size=[lineplot의 경우 라인 굵기], group=[lineplot의 경우]))

1. Scatter

+ geom_point(data, shape=[아래그림의 숫자],size=[크기])
+ geom_jitter(alpha=[투명도(0~1)], shape=[숫자])

image

2. Bar

+ geom_bar(position=[(1)], stat=[(2)])
+ coord_polar('y') # pie차트 그리기

(1) : 기본은 position*stack(), position_dodge()하면, 옆에 붙게 됩니다. (2) : identity를 하면, 데이터의 값을 가지고 y축의 높이를 결정합니다. ***(이를 넣지 않으면, y축 설정을 한 경우, 에러가 나는 경우가 있습니다. 또는 원하는 시각화 결과물이 나오지 않을 수도 있습니다.)_**

cf) 보통 coord_flip()으로 옆으로 눞여서도 많이 확인하게 됩니다. cf) geom_text(aes(label=[블록 옆에 값]), nudge_y=[숫자로 블록 옆에 얼마나 떨어져 있는지])

3. Line

시간에 따른 변화량/추세를 표현하기에 좋습니다.

+ geom_line()

4. 전체에 해당

+ ggtitle('표 제목')
+ labs(x='x축 이름', y='y축 이름', col='col이름')
+ theme_bw()  # 이것 말고도 다양한 테마가 있다. theme_gray(), theme_economist(), theme_excel(), theme_solarized()
+ facet_wrap(~column명, scales='free') # (column명~.)과 동일 / 해당 column명마다 그림이 그려짐 / scales는 축과 관련되어있다. free면 각 그림이 각자의 축의 최대 최솟값을 가진다.
+ scale_fill_brewer(palette='(1)')
+ scale_y_continuous(trans = 'log10')

(1)

image

카테고리:

업데이트: