[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
대표적인 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=[숫자])
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)