[R] 데이터 시각화 함수

[ggplot2 패키지]

AI gina 2022. 4. 16. 14:26

그래프 그리기 

- ggplot() 함수로 그래프 틀 만들고, 그 안에 다양한 이미지 객체 레이어를 계속 포개는 방식으로 표현.

 

1. 그래프 기본 틀 만들기 : ggplot() 함수

 - ggplot() 함수 : 그래프 좌표 그리기 위한 판 짜는 함수이며, 함수 안에 aes() 함수를 이용해 X축과 Y축에 변수 매핑.

str(airquality) #데이터 세트 속성 파악
ggplot(airquality, aes(x=Day, y=Temp)) #"날짜별 온도" 시각화 위해 X축에 날짜, Y축에 온도 매핑

 

2. 산점도 그리기 : geom_point() 함수

 - ggplot() 함수 뒤에 +geom_point() 만 추가

ggplot(airqualiry, aes(x=Day, y=Temp)) +
   geom_point()

#색상, 사이즈 추가 설정
ggplot(airqualiry, aes(x=Day, y=Temp)) +
   geom_point(size=3, color="red")

3. 선 그래프 그리기 : geom_line() 함수

 - 선그래프는 변화를 관찰하기 쉬우며, +geom_line() 추가.

ggplot(airquality, aes(x=Day, y=Temp)) +
  geom_line()

4. 막대 그래프 그리기 : geom_bar() 함수

- 막대 그래프는 하나의 변수에서 각 값의 빈도를 파악. -> X 축만 지정.

ggplot(mtcars, aes(x=cyl)) + geom_bar(width=0.5) #width 옵션으로 막대 두께 설정.

ggplot(mtcars, aes(x=factor(cyl))) + geom_bar(width=0.5) #factor() 함수로 수치형 데이터 범주화

빈 범주가 있음
수치형 데이터 범주화하여 빈 범주가 없어짐

*참고 : Bar charts (Source: R/geom-bar.r, R/geom-col.r, R/stat-count.r)
 There are two types of bar charts: geom_bar() and geom_col(). 

  - geom_bar() makes the height of the bar proportional to the number of cases in each group 

    (or if the weight aesthetic is supplied, the sum of the weights). 

  - If you want the heights of the bars to represent values in the data, use geom_col() instead. 

  - geom_bar() uses stat_count() by default: it counts the number of cases at each x position. 

  - geom_col() uses stat_identity(): it leaves the data as is.

- 누적 막대 그래프 그리기

 : 하나의 변수에 대한 빈도값 안에서, 다른 변수의 빈도까지 표시함.

ggplot(mtcars, aes(x=factor(cyl))) + 
  geom_bar(aes(fill=factor(gear))) #gear변수의 빈도가 막대안에 색상으로 채워진다

- 누적 막대 그래프로 그리는 선버스트 차트

 : 누적 막대 그래프 코드에 +coord_polar() 추가

   *coord_polar() 함수에 theta="y" 옵션 추가하면, 가운데가 도넛처럼 비어있는 선버스트 차트 그려짐.

 

5. 상자 그림 그리기 : geom_boxplot() 함수

 - aes() 함수 안에 상자로 그룹 지을 열을 설정해야 함. 

 - 그룹 옵션으로 x축 변수별 데이터 분포를 확인 할 수 있음.

 - 분포에서 심하게 벗어난 극단의 이상치 확인 가능.

ggplot(airquality, aes(x=Day, y=Temp, group=Day)) +
  geom_boxplot()

날짜별 온도 분포 확인 (이상치도 확인)

6. 히스토그램 그리기 : geom_histogram() 함수

 - 도수 분포를 기둥 모양의 그래프로 표현한 히스토그램으로, 연속되는 구간을 가짐.

 - binwidth 옵션으로 막대 너비 조정 가능.

ggplot(airquality, aes(Temp)) +
  geom_histogram(binwidth=1)

 

그래프에 객체 추가

 

1. 사선 그리기 : geom_abline() 함수

 - 그래프에 사선을 추가하여, 그래프의 추세 확인할 수 있음. 

 - 사선은 절편기울기 이용하여 geom_abline() 함수로 그림.

ggplot(economics, aes(x=data, y=psavert)) +
  geom_line() +
  geom_abline(intercept = 12.18671, slope = -0.0005444) #intercept 절편, slope 기울기

2. 평행선 그리기 : geom_hline() 함수

 - 주로 평균값에 평행선을 그려, 그래프 변동 추이를 확인.

ggplot(economics, aes(x=date, y=psavert)) +
  geom_line() +
  geom_hline(yintercept = mean(ecom=nomics$psavert)) #yintercept=y절편값 입력

3. 수직선 그리기 : geom_vline() 함수

 - 특정 위치를 표시할 때 사용.

library(dplyr)
x_inter <- filter(economics, psavert ==
                  min(economics$psavert))$date
ggplot(economics, aes(x=date, y=psavert)) +
  geom_line() +
  geom_vline(xintercept = x_inter)
  
  geom_vline(xintercept = as.Date("2005-07-01"))

4. 레이블 입력하기 : geom_text() 함수

 - 그래프 위에 텍스트가 직접 표현되며, 레이블 이라고 한다.  그래프 안에서 각 수치의 이름이나 값 등 표시할 때 사용.

ggplot(airquality, aes(x=Day, y=Temp)) +
  geom_point() +
  geom_text(aes(label = Temp, vjust = 0, hjust = 0)) #label=레이블, vjust=세로위치, hjust=가로위치

5. 도형 및 화살표 넣기 : annotate() 함수

 - 그래프 위에 사각형이나 화살표 등으로 특정 영역을 강조할 때 사용. 

ggplot(mtcars, aes(x= wt, y= mpg)) +
  geom_point() +
  annotate("rect", xmin=3, xmax=4, ymin=12, ymax=21,
           alpha = 0.5, fill = "skyblue") +         
  annotate("segment", x=2.5, xend=3.7, y=10, yend=17,
           color='red', arrow=arrow()) +
  annotate("text", x=2.5, y=10, label="point")
#모양옵션:rect(직사각형),segment(선) / alpha옵션:투명도 
#화살표는 arrow=arrow() 옵션 추가
#화살표 같은 선스타일 도형은 x축, y축의 시작위치와 끝위치를 x, x.end와 y,y.end로 표현
#text 입력하고, 표시될 x와 y위치 값과 표시할 내용 입력

블록 설정, 화살표, 텍스트(point) 삽입

6. 그래프와 축에 제목 추가하고 디자인 테마 적용하기

 - 그래프 제목 및 축 제목 추가하기 : labs() 함수

ggplot(mtcars, aes(x= gear)) + geom_bar() +
  labs(x= "기어수", y= "자동차수", title= "변속기 기어별 자동차수")

 - 디자인 테마 적용하기 : theme() 함수

   theme_gray(), theme_bw(), theme_linedraw(), theme_light(), theme_dark(), theme_minimal(),

   theme_classic(), theme_void()

 

7. 절편과 기울기 구하기 : 회귀분석 

 - 회귀분석 : 독립변수와 종속변수 간의 인과관계를 구하는 분석 기법

 - 단순회귀분석(독립변수 1개), 다중회귀분석(독립변수 2개이상)

 - 단순회귀분석은 두 변수 간의 관계식을 도출하는 분석 기법이며,

   두 변수간의 선형성, 독립성, 정규분포, 등분산성가정하는 분석으로, lm() 함수를 이용해

   두변수간의 p-value, 절편, 기울기를 구할 수 있다. 

 

 1) 두 변수 간 상관관계 파악하기 : cor.test() 함수

  - 상관관계 있으면 cor 값이 1(양의 상관관계) 또는 -1(음의 상관관계)로 나타남.

    0에 가까울수록 두 변수 간의 상관관계가 없음을 의미. 

  - p-value(significance probability, 유의확률) : 두 변수간 상관관계가 통계적으로 의미 있는지 판단하는 검정통계량.

    p-value값이 기준값보다 작으면 귀무가설 확률이 매우 낮다는 의미로, 귀무가설을 기각하고 대립가설을 채택함.

   (일반적으로 p-value값이 0.05보다 작으면 통계적으로 유의하다고 해석함.)

> library(readxl) #라이브러리 불러오기
> exdata1 <- read_excel("../0414/data/Sample1.xlsx") #엑셀 데이터 불러오기
> cor.test(exdata1$Y20_CNT, exdata1$Y21_CNT) #두 변수간 상관분석

	Pearson's product-moment correlation

data:  exdata1$Y20_CNT and exdata1$Y21_CNT
t = 4.9343, df = 18, p-value = 0.000107
alternative hypothesis: true correlation is not equal to 0  #대립가설
95 percent confidence interval: #신뢰구간
 0.4751688 0.8990895
sample estimates: #표본추정치
      cor  #상관성
0.7582507

 - cor값은 1에 가까우므로 두 변수가 양의 상관관계에 있으며, p-value값이 0.000107이므로 통계적으로 유의하다.

 

 

2) 절편과 기울기 구하기 : lm() 함수

 - 두 변수 간 상관관계가 있는 것이 확인되었으니 lm() 함수절편기울기를 구함.

> reg_result <- lm(Y20_CNT ~ Y21_CNT, data = exdata1)
> reg_result

Call:
lm(formula = Y20_CNT ~ Y21_CNT, data = exdata1)

Coefficients:
(Intercept)      Y21_CNT  
     7.9605       0.7311  

> ggplot(exdata1, aes(x = Y20_CNT, y= Y21_CNT)) +
    geom_line() +
    geom_abline(intercept = 7.9605, slope = 0.7311)  #y절편, 기울기 넣어서 사선 그리기