개요
- 데이터를 체크하기 위한 그래픽. 남들에게 보여주는 목적이 아니다.
- 시각화는 굉장히 중요한 이슈!
- 숫자만 보고서는 제대로 된 판단을 할 수 없기 때문.
- “Debug” ⇒ 그림으로 그려서 판단하기
예시 : 미국의 공기오염
목적 = 표준 미세먼지 수치를 넘는 주가 미국 내에 존재하는가?
- 여기서는
avgpm25.csv를 사용한다. - 우리나라에도 비슷한 자료가 있음 ⇒ airkorea.or.kr/web 접속
데이터 가져오기 (출제가능성 100%)
- 변수 이름 : pollution
- 변수들의 타입 지정하기 (순서대로)
- numeric, character, factor, numeric, numeric
- (참고) R 변수 타입은 다음과 같이 5가지이다.
- (참고) character, numeric, integer, logical, complex
- 데이터의 맨 위와 맨 아래 확인하기
해답
r
# class를 지정하지 않으면 R이 자동으로 만든다.
class = c("numeric", "character", "factor", "numeric", "numeric")
pollution = read.csv("avgpm25.csv", colClasses = class)
head(pollution)
str(pollution)
1차원 그래픽
- 일반적인 데이터라면 산포도만으로도 충분할 수 있지만…
- 빅데이터라면 그것만으로는 부족하다.
- 요약통계량
- Boxplot : 박스플롯
- Barplot : 바플롯
- 히스토그램 : 분포확인
- density plot : 곡선으로 확인하기
요약통계량
summary() 함수를 사용한다.
pollution 중 pm25의 요약 통계량을 보자.
해답
r
summary(pollution$pm25)
결과를 보면 다음과 같다
r
> summary(pollution$pm25)
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.383 8.549 10.047 9.836 11.356 18.441
- 크게 기울지는 않았다.
- 상당수가 12를 넘고 있다.
Boxplot
pollution 중 pm25의 Boxplot을 보자.
이 그래프를 만드는 코드는?
r
# Boxplot of PM2.5 data
boxplot(pollution$pm25, col="blue")
- 여기서 5와 15를 콧수염(whiskers)이라고 한다.
- IQR = 사분위간 범위 = (3사분위수) - (1사분위수) = (전체 자료의 중간값)
- whiskers를 벗어나는 경우를 이상치(outlier)로 볼 수 있나?
- 꼭 그렇지는 않다. 다만 평균에서 먼 자료 정도로 보면 된다.
pm25가 15보다 큰 케이스를 살펴보자.
이 결과를 만드는 코드는?
r
# no.1
with(pollution, head(pm25[pm25 > 15]))
# no.2
subset(pollution, pm25 > 15)
# no.3
head(pollution[pollution$pm25 > 15,], 8)
- 지역은 전부 서부라고 나온다.
- west이면서 fips 코드 앞자리가 06인 곳 : 캘리포니아
Histogram
pm25의 히스토그램을 한번 보자.
breaks=100으로 해서 잘게 짜르고, 밀집도를 볼 수 있게 한다.
이 그래프를 만드는 코드는?
r
# hist of PM2.5
hist(pollution$pm25, col="green", breaks=100)
rug(pollution$pm25)
저수준 그래픽
그래프 위에 무언가를 씌울 때 사용한다.
주로 선을 그려 중위수나 기준을 표기한다.
pm25의 histogram. 기준선1을 10에, 기준선2를 12에 그려준다.
이 그래프를 만드는 코드는?
r
# hist of PM2.5
hist(pollution$pm25, col="green")
abline(v = 12, lwd=2) # 기준치
abline(v = median(pollution$pm25), col="blue", lwd=4) #
pm25의 boxplot. 기준선을 파란색으로, y=12에 그려준다.
이 그래프를 만드는 코드는?
r
# boxplot + abline of pm25
boxplot(pollution$pm25)
abline(h = 12) # 기준치
Barplot
범주형 자료(categorical data)를 정리할 때 좋다.
먼저 table을 써서 정리를 한 다음, barplot을 그려준다.
지역별
이 그래프를 만드는 코드는?
r
barplot(table(pollution$region), col="wheat")
west와 east의 순서를 바꾸고 싶다면?
이 그래프를 만드는 코드는?
factor를 다시 지정해야 한다.
r
pollution$region = factor(pollution$region, levels = c("west", "east"))
barplot(table(pollution$region), col="purple")
2차원 그래픽
- 다차원 plot
- Scatterplot
- Smooth scatterplot
이해를 돕기 위해 다양한 요소를 넣어줄 수 있다. (저수준 함수)
- 조건부 plot : 조건에 따라 플롯을 나눠주기
- 차원 표기를 위한 색깔과 크기, 도형 넣기
- 비추 : 회전, interactive 플롯 (너무 어지럽다)
- 비추 : 진짜 3D 플롯 (역시 너무 어지럽다)
다차원 boxplot
문제 : 지역별 pm2.5
이 그래프를 만드는 코드는?
r
boxplot(pm25~region, data = pollution, col="red")
다차원 histogram
문제 : 지역별 pm2.5
이 그래프를 만드는 코드는?
r
par(mfrow=c(2,1))
hist(pollution[pollution$region == "west",]$pm25,
col="green")
hist(pollution[pollution$region == "west",]$pm25,
col="green")
Scatterplot
그냥 plot() 함수를 쓰면 된다.
문제 : latitude에 따른 pm2.5
이 그래프를 만드는 코드는?
r
plot(pollution$pm25~pollution$latitude,
xlab="latitude", ylab="pm25")
abline(h=12, lty=2)
문제 : latitude에 따른 pm2.5. 색으로 region 구분해주기
이 그래프를 만드는 코드는?
r
plot(pollution$pm25~pollution$latitude,
xlab="latitude", ylab="pm25",
col=pollution$region)
abline(h=12, lty=2)
문제 : 지역에 따른 구분. latitude별 pm25
이 그래프를 만드는 코드는? (1번째 버전)
r
par(mfrow=c(1,2), mar=c(5, 4, 2, 1))
with(subset(pollution, region == "West"),
plot(pollution$pm25~pollution$latitude,
main="West", ylab="pm25",
xlab="latitude"))
with(subset(pollution, region == "East"),
plot(pollution$pm25~pollution$latitude,
main="East", ylab="pm25",
xlab="latitude"))
이 그래프를 만드는 코드는? (2번째 버전)
r
par(mfrow=c(1,2), mar=c(5, 4, 2, 1))
plot(pm25~latitude,data=pollution[pollution$region=="west",],main="West")
plot(pm25~latitude,data=pollution[pollution$region=="east",],main="East")
- 여백을 지정할때 mar()을 사용한다.