1.공변동(covariation)
- 둘 이상의 변숫값이 연관되어 동시에 변하는 경향을 말함
- 공변동을 발견하는 가장 좋은 방법 : "두 개 이상의 변수 사이의 관계를 시각화 하는 것"
2. 범주형 변수와 연속형 변수
- 이전의 빈도 다각형(히스토그램)과 같이 범주형 변수로 구분된 연속형 변수의 분포를 탐색하고자 하는 것이 일반적이다.
-geom_freqploy()의 기본 모양은 뫂이가 빈도수를 나타내기 때문에 그러한 종류의 비교는 유용X
--> 즉, 그룹 중 하나가 다른 값들보다 월등히 작으면 형태의 차이를 파악하기 어려움
ex) 다이아몬드의 가격이 품질에 따라 어떻게 달라지는지 확인해보자.
ggplot(data = diamonds, mapping = aes(x = price)) +
geom_freqpoly(mapping = aes(color = cut), binwidth = 500)
- 전체적인 빈도수가 많이 다르므로 분포의 차이를 파악하기 어렵다.
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut))
- 비교를 쉽게하기 위해 y축에 표시된 빈도수를 빈도수를 표준화한 밀도로 나타내보자.
ggplot(
data = diamonds,
mapping = aes(x = price , y = ..density..)
) +
geom_freqpoly(mapping = aes(color = cut), binwidth = 500)
- 해당 플롯에는 놀라운 점을 확인할 수 있다.
- fair인 다이아몬드가 가장 높은 평균 가격을 가진다는 것이다.
- 이 이유는 이 빈도 다각형에는 작업해야 하는 부분이 남아있기 때문에 당장 해석하기 어렵기 때문이다.
2.1 BOX PLOT
- 범주형 변수로 구분된 연속형 변수의 분포를 나타내는 또 다른 방법은 boxplot이다.
- 박스 플롯은 값의 분포를 시각적으로 간편하게 보여줄 수 있는 형태 ==> 많은 통계학자가 사용하는 방법이다.
- BOXPLOT은 다음의 것들로 구성됨
i) IQR(사분위수범위) : Q3(75번째 백분위수) , Q2(50번째 백분위수), Q1(25번째 백분위수)
--> IQR = Q3-Q1
ii) 상자의 가장자리에서 1.5*IQR 이상 떨어진 관측값을 나타내는 점
iii) 상자의 양끝에서 뻗어 나와 가장 멀리 떨어진 이상값이 아닌 점까지 이어진 선
iv) 이상값
- geom_boxplot()을 사용하여 컷팅에 따른 가격의 분포를 살펴보자
ggplot(data = diamonds, mapping = aes(x=cut,y = price)) +
geom_boxplot()
- 박스 플롯은 분포에 대해 더 적은 정보를 확인할 수 있지만, 간단하므로 쉽게 비교할 수 있다.
- 해당 플롯을 통해 '더 좋은 품질의 다이아몬드가 평균적으로 더 저렴하다'는 직관에 반하는 사실을 뒷받침한다.
2.2.reorder()
- 대부분의 범주형 변수에는 고유한 순서가 없음
--> 순서를 변경하여 더 유용한 정보를 주도록 표현할 수 있음
---> 이를 위한 한 가지 방법은 reorder()함수를 사용하는 것
ex) mpg dataset의 class변수를 살펴보고싶다.
- 자동차 조율에 따라 고속도로 주행 거리(hwy)가 어떻게 달라지는지 알아보고자 한다.
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot()
- 순서가 일관되어 있지 않기 때문에 한눈에 분석하기 어려움이있다.
- 더 쉽게 파악하기 위해 hwy변수의 중간값을 기준으로 class변수의 순서를 변경할 수 있음
- 즉 reorder()함수를 이용하면 쉽게 해결할수있다.
reorder(factor, x, FUN = median)
- factor : 재정렬할 범주형 변수의 이름
- x : 기준값이 되는 연속형 변수
- FUN : 'x'를 기준으로 'factor'를 재정렬하는 함수를 지정
ex)
ggplot(data = mpg) +
geom_boxplot(
mapping = aes(
x = reorder(class,hwy, FUN = median),
y = hwy
)
)
2.3. 연습문제
Q1) 취소된 항공편과 취소되지 않은 항공편의 출발 시각을 시각화했던 플롯을 개선하기 위해 배운 내용을 사용해보자.
flights %>%
mutate(
cancelled = is.na(dep_time),
sched_hour = sched_dep_time %/% 100,
sched_min = sched_dep_time %% 100,
sched_dep_time = sched_hour + sched_min /60
) %>%
ggplot(mapping = aes(sched_dep_time)) +
geom_freqpoly(
mapping = aes(color = cancelled),
binwidth = 1/4
)
- 취소한 그룹의 빈도수가 상대적으로 적기 때문에 분포를 비교하기 적합하지 않다.
- boxplot을 이용해 비교해주면 된다.
flights %>%
mutate(
cancelled = is.na(dep_time),
sched_hour = sched_dep_time %/% 100,
sched_min = sched_dep_time %% 100,
sched_dep_time = sched_hour + sched_min /60
) %>%
ggplot(mapping = aes(sched_dep_time)) +
geom_boxplot(
mapping = aes(color = cancelled),
)
Q2) 다이아몬드 데이터셋의 어떤 변수가 다이아몬드의 가격을 예측하는데 가장 중요한가? 그 변수가 color 변수와 상관관계가 있는가?
ggplot(data = diamonds) +
geom_smooth(mapping = aes(x = price , y = carat,color = color))
- 다음과 같이 price는 carat과 우상향관계에 있음을 알수있고,
- color에 따라서 같은 price 대비 carat이 달라진다는 것을 알수 있다.
Q3) 상자 플롯은 데이터셋의 크기가 매우 작았던 시대에 개발되었기 때문에, '이상값'들을 너무 많이 표시하게 된다는 단점이 있다. 이 문제를 해결하기 위한 한 가지 방법은 문자 값 플롯이다. lvplot 패키지를 설치하고 geom_lv()를 사용하여 컷팅에 따른 가격의 분포를 나타내보자. 무엇을 배울수 있는가? 이 플롯을 어떻게 해석하겠는가?
ggplot(data = diamonds, aes(x=cut,y= price)) +
geom_lv()
- 대형 dataset을 4분위수를 넘어 분석하게 해줄수 있게한다.
3. 두 개의 범주형 변수
- 범주형 변수들의 공변동을 시각화하려면 각 조합에 대한 관측값의 수를 세어야한다.
- 이를 위한 한 가지 방법은 내장된 함수인 geom_count()를 이용하는 것이다.
ggplot(data = diamonds) +
geom_count(mapping = aes(x=cut,y = color))
- 플롯에서 원의 크기는 각 값의 조합에서 발생한 관측값의 수를 나타냄
- 공변동은 특정 x값과 y값 사이에 강한 상관관계로 나타날 것이다.
- 또 다른 방법은 dplyr로 빈도수를 계산하는 것이다.
diamonds %>%
count(color, cut)
# A tibble: 35 × 3
color cut n
<ord> <ord> <int>
1 D Fair 163
2 D Good 662
3 D Very Good 1513
4 D Premium 1603
5 D Ideal 2834
6 E Fair 224
7 E Good 933
8 E Very Good 2400
9 E Premium 2337
10 E Ideal 3903
# ℹ 25 more rows
# ℹ Use `print(n = ...)` to see more rows
- 그후 geom_tile() 함수와 Fill 심미성으로 시각화한다.
diamonds %>%
count(color,cut) %>%
ggplot(mapping = aes(x=color , y = cut)) +
geom_tile(mapping = aes(fill = n))
3.1 연습문제
Q1) 색상 내에서의 컷팅의 분포 또는 컷팅 내에서 색상의 분포를 좀 더 명확하게 보여주기 위해서 데이터셋의 count값을 어떻게 조정할 수 있는가?
diamonds %>%
count(color,cut) %>%
group_by(color) %>%
mutate(prop = n / sum(n)) %>%
ggplot(mapping = aes(x=color , y = cut)) +
geom_tile(mapping = aes(fill = prop))
- group_by(color) 를 통해 color 그룹내의 cut그룹의 데이터를 바탕으로 prop을 계산해준다.
4. 두 개의 연속형 변수
- 두 개의 연속형 변수 사이의 공변동을 시각화하는
- geom_point()
- 연속형 변수중 하나를 그룹화 하여 범주형 변수처럼 만드는 것
'DS Study > R4DS(R언어)' 카테고리의 다른 글
[R4DS] [5] readr로 하는 데이터 불러오기 (1) | 2024.04.05 |
---|---|
[R4DS] [4] tibble로 하는 티블 (0) | 2024.04.04 |
[R4DS] [3-2] 결측값 (0) | 2024.04.03 |
[R4DS] [3-1] 탐색적 데이터 분석(EDA) (0) | 2024.04.01 |
[R4DS] [2-6] summarize() (0) | 2024.04.01 |