본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[Rstudio] 데이터 유형별 그래프 선택 기준 및 R 그래프 함수

by Vitaminymc 2023. 10. 9.
반응형

데이터 유형과 그래프 (chart, plot) 선택 기준

어떤 유형의 데이터를 표현할 때, 어떤 그래프별가 적합할까에 대한 일반적인 기준은 아래와 같다.

  • 산점도(Scatter plot) : 연속형 변수의 상관관계의 시각화
    예) x축에는 온도, y축에는 판매량을 나타내어 두 변수 간의 관계 확인
  • 막대 그래프(Bar plot): 범주형 변수의 빈도수, 카테고리 간 비교 등을 시각화
    예) 각 지역의 인구수를 막대 그래프로 표현, 지역 간 인구 분포를 비교
  • 선 그래프(Line plot): 연속형 변수의 추세, 변화를 시각화
    예) 시간에 따른 주식 가격의 변동을 선 그래프로 표현, 추세를 파악
  • 히스토그램(Histogram): 연속형 변수의 분포를 시각화
    예) 제품 크기를 히스토그램으로 표현, 제품 크기의 분포를 확인
  • 박스 플롯(Box plot): 연속형 변수의 분포와 이상치를 시각화
    예) 제품의 판매량을 박스 플롯으로 표현, 제품 간 판매량의 분포와 이상치를 확인

 

R 그래프 함수

plot 함수

R의 기본 함수, 복잡한 그래프 작성에는 코드가 상대적으로 길어짐

예제 1 : plot (scatter plot)

library(palmerpenguins)

data("penguins")  #Dataset 불러오기

str(penguins)  #Dataset 구성 확인
plot (penguins$bill_length_mm, penguins$bill_depth_mm,
      col = penguins$species,
      xlab = "부리 길이",
      ylab = "부리 높이",
      main = "팔머 펭귄 부리 사이즈 분포")

 

예제 2 : plot (line plot)

# 데이터프레임 생성
yeon_result <- data.frame (
  no_test = c(1, 2, 3, 4, 5),
  kor_score = c(90, 78, 95, 76, 100)
)
plot (yeon_result$no_test, yeon_result$kor_score,
      xlab = "시험 차수",
      ylab = "국어 점수",
      main = "연민정의 국어 점수",
      type = "o",
      lty=2,
      col = "red")

type type 옵션 내용 lty lty 옵션 내용
p 점 모양 그래프(기본값) 0 투명선 (lty="blank")
l 선 모양 그래프 1 실선 (lty="solid")
b 점과 선 모양 그래프 2 대쉬선 (lty="dashed")
c "b"에서 점을 생략 3 점선 (lty="dotted")
o 점과 선을 중첩한 그래프 4 점선과 대쉬선 (lty="dotdash")
h 각 점에서 x축 까지의 수직선 그래프 5 긴 대쉬선 ( lty="longdash")
s 왼쪽값을 기초로 계단모양 6 두개의 대쉬선 ( lty="twodash")
S 오른쪽 값을 기초로 계단모양    
n 축 만 그리고 그래프는 생략    

예제 3 : boxplot

boxplot(body_mass_g~species, data=penguins, 
        xlab = "종",
        ylab = "몸무게(g)",
        main = "팔머 펭귄 종별 몸무게 분포",
        col="orange",
        border = "red"
        )

 

예제 4 : barplot

# 데이터프레임 생성
result <- data.frame (
  english_name = c("Cho", "Park", "Yeon", "Min"),
  korean_name = c("조아라", "박수철", "연민정", "민국한"),
  kor_score = c(90, 85, 92, 97),
  eng_score = c(90, 78, 95, 76)
barplot(cbind(kor_score, eng_score)~korean_name,result,beside=T,
        main="시험 성적",xlab="이름",ylab="점수", col=rainbow(2))

ggplot 함수

데이터를 계층적으로 구조화하고, 여러 개의 시각적 요소를 조합하여 다양한 그래프를 생성할 수 있음

  • 그래프를 구성하는 각 구성 요소를 독립적으로 조작 가능
  • 이를 통해 다양한 유형의 그래프를 생성하고 개인적인 선호도에 맞게 디자인
  • ggplot은 다양한 데이터 유형과 색상 척도를 지원하여 복잡한 시각화 작업에 유용

 

qplot 함수

ggplot2의 간단한 버전으로서, 빠르고 간편하게 그래프를 생성.
단순한 그래프에는 유용하지만, 복잡한 그래프 작성에는 제한이 있음

geom에 그래프 유형을 지정 (point, histogram, boxplot, jitter 등)

예제 1 : scatter plot

library(tidyverse)
qplot(data=penguins,
      x=bill_length_mm,
      y=bill_depth_mm,
      color=species)

 

 

예제 2 : boxplot

qplot(data=penguins,
      x = species,
      y=flipper_length_mm,
      geom = "boxplot",
      color=species)

 

예제 3 : boxplot + jitter

qplot(data=penguins,
      x = species,
      y=flipper_length_mm,
      geom=c('boxplot', 'jitter'),
      color=species)

 

예제 4 : geom='path'

qplot(data=yeon_result, x=no_test, y=kor_score, geom='path',
      xlab = "시험 차수",
      ylab = "국어 점수",
      main = "연민정의 국어 점수")

300x250

qqplot 함수

Q-Q 플롯(Quantile-Quantile plot)을 그리는 함수

데이터 분포가 정규 분포에 얼마나 가까운지를 시각적으로 확인

예제 : 데이터의 정규성 확인

qqnorm(penguins$body_mass_g)

  • x축은 정규분포를 따르는 확률변수이고, y축은 body_mass_g 값이다.
  • body_mass_g  의 분포가 정규분포에 가깝다면 위 그래프가 직선에 가까워진다.

완벽히 정규분포를 따르는 경우의 직선은 아래와 같은 코드를 입력한다. 

qqline(penguins$body_mass_g, col='red',lwd=2)

  • 직선 주위에 데이터가 밀집되어 있다면 정규 분포라는 가정을 만족한다고 볼 수 있다.

 


Pixabay로부터 입수된 Yvette W님의 이미지 입니다.

728x90