일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 이기적 유전자
- 통계 오류
- 큰수의 법칙
- 인터스텔라
- 찬물샤워
- 아인슈타인
- 최저시급 개정안
- R4DS
- 산입 범위
- 수학적 사고
- 비율
- 통계오류
- R 기초
- 비행기 추락
- t-test
- 유닛테스트
- t검정
- 멘탈관리
- 성악설
- R 프로그래밍
- 핵개발
- 핵 개발
- 티모시페리스
- 자기관리
- 산입범위
- 조던피더슨
- 최저 시급
- 비선형성
- 동전 던지기
- 선형성
- Today
- Total
public bigdata
R4DS (R for DataScience) 5장(4장 별 내용 없어 3장에 간단히 기록) 본문
R4DS (R for DataScience) 5장(4장 별 내용 없어 3장에 간단히 기록)
public bigdata 2019. 12. 10. 22:085.2 질문하기
- EDA는 근본적으로 창의적인 과정
- 좋은 질문을 하는 핵심은 많은 양의 질문을 생성하는 것
- 데이터셋에 어떤 통찰력이 포함되어 있는지 알 수 없기 때문에 흥미로운 질문을 하기 어렵다
- 스스로 발견한 것을 따라 새로운 질문들을 만들다 보면 시사하는 바가 큰 질문을 발견할 수 있다.
- 데이블 형식의 데이터는 각 변수들과 관측값의 조합인 값들의 집합이다 테이블 형식의 데이터는 각 값은 '셀'에, 변수들은 열에, 관측값은 행에 있을 때 타이디(tidy)하다고 한다.
5.3.1 분포 시각화
- dplyr::count와 ggplot2::cut_width를 결합하면 값을 직접 나누어 플롯할 수 있다.
> diamonds %>%
+ count(cut_width(carat, 0.5))
# A tibble: 11 x 2
`cut_width(carat, 0.5)` n
<fct> <int>
1 [-0.25,0.25] 785
2 (0.25,0.75] 29498
3 (0.75,1.25] 15977
4 (1.25,1.75] 5313
5 (1.75,2.25] 2002
6 (2.25,2.75] 322
7 (2.75,3.25] 32
8 (3.25,3.75] 5
9 (3.75,4.25] 4
10 (4.25,4.75] 1
11 (4.75,5.25] 1
- geom_histogram 사용 시 binwidth 인자를 통해 너비를 결정할 수도 있다.
- 여러 개의 히스토그램을 겹쳐서 그리고 싶다면 geom_frepoly를 사용하는 것이 좋다.
5.3.2 일반적인 값
- 어떤 값이 가장 일반적인가? 그 이유는 무엇인가
- 드물게 나타나는 값은 무엇인가? 그 이유는 무엇인가? 여러분의 예상과 일치 하는가?
- 비정상적인 패턴을 볼 수 있는가? 그 패턴을 설명할 수 있는가?
- 일반적으로 유사한 값들의 군집은 데이터 내에 하위집단이 있다는 것을 의미한다. 하위집단을 이해하기 위해 질문을하자
- 각 군집 내의 관측값은 서로 유사한가?
- 각 군집은 서로 다른 클러스터의 관측갑소가 다른가?
- 군집은 어떻게 설명하거나 묘사할 수 있는가?
- 군집의 모양이 오해의 소지가 있는 이유는 무엇인가?
5.3.3 이상값
- 이상치들은 대부분 눈으로 확인하기 어렵다.
- 이상값들을 쉽게 확인하기 위해서는 coor_cartesian을 사용하여 y축의 작은 값들을 확대해야 한다.
ggplot(diamonds) +
geom_histogram(aes(x = y), binwidth = 0.5)+
coord_cartesian(ylim = c(0, 50))
x 축을 확대할 때는 coord_cartesian(xlim = ***)을 사용한다. coord_cartesian은 xlim, ylim처럼 범위 밖의 데이터를 제외하지 않고 플롯을 확대하는 역할만 수행한다.
- 이상값을 포함, 제외하여 분석을 반복하는 것은 좋은 연습이다.
- 이상값이 이 결과에 최소한의 영향을 미치고 왜 이상값이 발생했는지 그 이유를 알 수 없다면 결측값으로 대체한 후 계속 진행하는 것이 합리적
- 그러나 이상값이 겨로가에 상당한 영향을 미치는 경우, 타당한 이유 없이 제외해서는 안 된다. 문제의 원인을 파악하고 이상값을 제거한 사실을 밝혀야 한다.
5.4 결측값
- 이상값이 포함된 행 전체를 삭제한다(비 추천)
- 이상값을 결측값으로 변경하는 방법을 권장한다.(추천)
R과 동일하게 ggplot2는 결측값이 묵시적으로 사라져서는 안 된다는 방침에 동의한다. ggplot2는 결측값을 플롯에 포함하지는 않지만 결측값이 제거되었음을 경고한다.
경고 표시를 숨기려면 geom 함수내에 na.rm=T 인자를 추가하면 된다.
5.5.1 범주형 변수와 연속형 변수
geom_frepoly의 기본 모양은 높이가 빈도수를 나타내기 때문에 그룹 중 하나가 다른 값들보다 월등히 작으면 형태의 차이를 파악하기 어렵다.
따라서 아래와 같이 ..density..를 사용해 빈도 다각형 아래의 영역이 1이 되도록 빈도수를 표준화하여 나타낼 수 있다.
ggplot(
data = diamonds,
aes(x = price, y = ..density..)
)+
geom_freqpoly(aes(color = cut), binwidth = 500)
- reorder, coord_flip(90도 회전)을 이용해 박스플롯을 그릴 때 유용하게 시각화 할 수 있다.
5.5.2 연습문제
pass 복습 시 2번만 책 참고
5.5.3 두 개의 범주형 변수
범주형 변수들의 공변동을 시각화하는 한 가지 방법은 내장된 함수인 geom_count()를 이용하는 것이다.
ggplot(data = diamonds)+
geom_count(mapping = aes(x = cut, y = color))
count 함수를 이용하여 빈도수를 계산한 뒤에 geom_tile 함수를 통해 시각화할 수도 있다.
diamonds %>%
count(color, cut) %>%
ggplot(aes(x = color, y = cut))+
geom_tile(aes(fill = n))
위 코드에서 aes(x = cut, y = color) 대신 aes(x = color, y = cut)을 사용한 이유는 일반적으로 범주가 더 많거나 라벨이 긴 경우에 y축 방향으로 배치하는게 가독성이 더 좋기 때문이다.
5.5.5 두 개의 연속형 변수
- 기본적으로 박스플롯은 얼마나 많은 관측값이 있는지 관계없이 동일하게 보이기 때문에 varwidth =TRUE를 통해 박스 플롯의 너비를 개수와 비례하도록 설정할 수 있다.
- 또 다른 방법은 각 빈에 대략적으로 같은 수의 점을 표시하는 것이다. 이는 cut_number를 사용하면 된다.
ggplot(data = diamonds, aes(x = carat, y = price))+
geom_boxplot(mapping = aes(group = cut_number(carat, 20)))
5.5.6 연습문제
pass
5.6 패턴과 모델
모델을 활용하여 가격과 캐럿 간의 매우 강력한 상관관계를 제거하면 남아있는 중요한 세부 요소들을 탐색할 수 있다.
carat으로 price를 예측하는 모델을 적합시킨 다음, 잔차를 게산한다. 캐럿의 효과를 제거 시킨 후 다이아몬드 가격에 대한 관점을 제공한다.
두 이미지의 결과를 종합해 보면 carat이 3 이상인 부분에서는 잔차가 작아지는데 이는 선형 모델의 예측과 실제값이 차이가 적다는 것을 말한다. 즉, 우상향의 직선의 선형 모델이 3 이상인 지점에서는 잘 맞아 떨어진다는 것이고 그 말은 3이상인 부분에서는 carat이 클수록 가격이 높다는 것을 말한다.(3 아래 부분에서 그렇지 않은 것은 작은 크기의 다이아몬드는 cut을 잘해서 비싸게 파는 경우도 있어서 cut이 작으면서도 비싸거나 저렴할 수 있기 때문에 잔차의 편차가 큰 편이다)
아래 그림에서는 cut이 즉. 다이아몬드 등급이 높을 수록 잔차의 중앙값이 높이 위치한다.
좋은 등급의 다이아몬드인 경우에 잔차가 양의 방향으로 더 높아지는데 이는 좋은 다이아몬드 일수록 선형모델의 예측보다 실제값이 더 크다는 것으로 좋은 다이아몬드 일수록 더 많이 비싸다는 것을 말한다. 아래 그림처럼
두 가지 사실을 정리하면 1) 큰 다이아몬드 일수록 비싸다(3이상에서는 특히 명확) 2) 좋은 등급의 다이아몬드 일수록 더 많이 비싸다
두 가지 사실을 종합하면 다이아몬드 크기에 비례하면서, 좋은 품질의 다이아몬드가 더 비싸다 라고 책에 나와 있는데 잘모르겠다. 1), 2) 결론 각각은 이해가 되지만....
플롯을 하나 더 그려본다면 이해가 될지도 모르겠다.
더 그려봐도 이해가 안된다. 책의 번역이 잘못된 건지, 내가 이해를 못하는 건지...
추가적으로 위에서 carat, price에 로그를 취해준 것은 log를 취함으로서 carat, price 각각의 편차를 줄여 carat과 price를 플롯했을 때 선형의 관계를 보이므로 모델을 더 잘 적합할 수 있다. 로그를 취해서 정규분포를 만들면 왜 더 잘 적합이 되는지는 모르겠다. 단지 플롯했을 때 선형의 관계를 잘 보이니 해주는 것으로만 이해한다. 더 자세한 내용은 회귀분석 관련 자료를 공부해야 할 것 같다.
5.8 더 배우기
- ggplot2의 메커니즘에 대해 더 알고 싶다면 ggplot2를 추천한다. dplyr과 tidyr코드가 포함되어 있다.
'R programming > R4DS (R for DataScience) ' 카테고리의 다른 글
R4DS (R FOR DATASCIENCE) 7장 tibble로 하는 티블 (0) | 2019.12.23 |
---|---|
R4DS (R FOR DATASCIENCE) 6장 (0) | 2019.12.23 |
R4DS (R for DataScience) 3장 (0) | 2019.12.02 |
R4DS (R for DataScience) 2장 (0) | 2019.11.27 |
R4DS (R for DataScience) 1장 (0) | 2019.11.03 |