[R] R을 이용한 통계 분석 및 데이터 시각화 : 히스토그램

 정보

  • 업무명     : R을 이용한 통계 분석 및 데이터 시각화 : 히스토그램

  • 작성자     : 박진만

  • 작성일     : 2020-04-01

  • 설   명      :

  • 수정이력 :

 

 내용

[개요]

  • R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계 분석 환경입니다. 

  • 통계 분석 기능으로 통계 검정, 선형 회귀 분석, 시계열 데이터 분석, 클러스터링 등을 지원하고 있습니다.

  • 또한 최신 논문에서 발표된 같은 새로운 기술도 R로 구현되는 경우가 많습니다.

  • 특히 시각화 기능으로 히스토그램, 막대 그래프, 선 그래프, 산포도, 나무 모양 그림이나 히트맵 등 기본적인 그래프가 기본으로 지원하고 있습니다.

  • 또한 ggplot2 등의 패키지를 사용하여 더 높은 수준의 그림을 가시화할 수 있습니다.

 

 

[특징]

  • 데이터를 이해하기 위해서 통계 분석 및 데이터 시각화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

     

[기능]

  • 데이터형 소개

 

[활용 자료]

  • 없음

 

[자료 처리 방안 및 활용 분석 기법]

  • 없음

 

[사용법]

  • 소스 코드 예시 참조

 

[사용 OS]

  • Windows 10

 

[사용 언어]

  • R v3.6.2

  • R Studio v1.2.5033

 

 소스 코드

[히스토그램]

  • 히스토그램은 양적 데이터의 분포를 시각화하기 위해 자주 이용되고 있다.

  • 즉 데이터 분석 및 통계 검정 등, 그 분포의 특징을 확인하고 데이터 전체의 경향을 파악하는 경우에 사용한다.

  • 이 때 히스토그램의 가로축은 계급, 세로축은 도수로 나타낸다. 

    • 계급이란 데이터를 일정한 폭을 구분하여 만들어진다. 예를 들어, 데이터를 구분 폭을 "5cm"로 설정했을 때, 계급은 "0-5cm", "5-10cm", "10-15cm"... '의 간격으로 만들 수 있다.

    • 도수는 각 계급에 포함 된 데이터의 수를 가리킨다. 예를 들어, 식물의 씨앗이 발아 후 10 일 이후에 개체의 길이를 재어 보니 2cm, 5cm, 6cm, 4cm, 9cm, 3cm, 12cm, 1cm였다고 하자. 이 때, 폭 5cm로서 계급과 도수 표를 만들면 아래와 같다.

  • 이렇게 만들어진 계급과 도수를 각각 가로축과 세로축하여 그래프를 그리면 히스토그램이 그려진다.

계급 0≤x <5 5≤x <10 10≤x <15 15≤x <20
도수 4 3 1 0

 

  • 계급의 폭은 스터지스의 공식을 기반으로 결정하거나 스콧의 공식을 기반으로 결정하는 방법이 있다.

  • 그러나 이러한 방법은 각각의 특징을 가지는 데이터를 다룰 때 사용한다. 즉 모든 데이터에 이를 적용 할 수 있는 방법은 없다.

  • 따라서 계급의 폭은 딱히 공식에 따라 정해진 것이 아닌 데이터의 특징에 따라서, 혹은 분석 목적에 따라 결정하는 것이 좋다.

 

[hist 함수의 사용법] 기본적인 사용법

  • hist함수에 숫자 벡터를 주는 히스토그램이 그려진다. 히스토그램의 폭은 기본적으로 스터지스의 공식에 의해 계산 된 폭을 이용한다.

x <- rnorm(1000)

hist(x)
hist(x, col = "orange", main = "rnorm")

 

[hist 함수의 사용법] 너비를 조정하는 방법

  • 기본적으로 hist함수에 의해 그려지는 히스토그램의 폭은 스터지스의 공식을 이용하여 계산된다. 

  • 그러나 폭의 계산식을 변경하고자 하는 경우는 breaks의 인수에 인자를 추가해주면 된다.

  • 또한 스터지스의 공식 (Sturges) 이외에 Scott, FD또는 Freedman-Diacoins을 줄 수있다. 또한 breaks폭을 직접 지정하거나 분할하는 값을 지정 할 수 있다.

x <- rnorm(1000)

hist(x, breaks = 10)
hist(x, breaks = c(-5,0, 1, 2, 3, 4, 5))
hist(x, breaks = "Scott")

 

[hist 함수의 사용법] 세로축을 조정하는 방법

  • 히스토그램의 세로축은 도수 (빈도)이지만,이 빈도를 확률로 변경할 수 있다. 

  • 세로축을 확률로 변경했을 때, 히스토그램의 면적을 모두 더하면 1이된다.

  • 세로축을 도수(빈도)로 설정 하거나 확률로 설정 하고자 하는 경우에는 인수 freq를 이용하여 지정한다.

x <- rnorm(1000)

hist(x, freq = FALSE)
hist(x, freq = TRUE)

 

[hist 함수의 사용법] 밀도를 표시하는 방법

  • hist함수에서 히스토그램을 그린 후 density함수로부터 추측한 밀도 line함수를 겹쳐서 그릴 수 있다. 

  • 또한 ug함수에서 히스토그램 아래 rug 플롯을 그려 넣을 수도 있다.

x <- c(rnorm(1000), rnorm(1000, 3, 2))

hist(x, freq = FALSE)
lines(density(x), col = "orange", lwd = 2)

hist(x, freq = FALSE)
lines(density(x), col = "orange", lwd = 2)
rug(x)

 

[hist 함수의 사용법] 여러 히스토그램을 그리는 방법

  • 여러 히스토그램 겹쳐 그리는 경우, 히스토그램의 색을 조금 투명화시키는 것으로 겹치는 부분도 보이게 만들 수 있다.

  • 히스토그램의 색상을 정할 때 RGB에서는 빨간색은 #ff0000, 파랑은 #0000ff 등과 같이 나타낼 수있다.

  • 투명도의 경우 RGB 숫자 뒤에 투명도를 지정하면 된다. 예를 들어, #ff000030과 #0000ff50 등과 같이 지정한다.

x <- rnorm(1000, 10, 5)
y <- rnorm(1000, 15, 5)

hist(x, col = "#ff00ff40", border = "#ff00ff", breaks = 20)
hist(y, col = "#0000ff40", border = "#0000ff", breaks = 20, add = TRUE)

 

[hist 함수의 사용법] truehist

  • truehist은 MASS 패키지에 포함되어있는 막대 그래프를 그리는 함수이다.

  • 사용법은 hist함수와 비슷하지만 옵션이 많은 더 세분화 할 수 있다.

library(MASS)

x <- rnorm(1000)

truehist(x, h = 0.1, prob = TRUE, col = "black")
truehist(x, breaks = c(-4, 0, 1, 2, 3, 4), prob = FALSE, col = "white")

 

[hist 함수의 사용법] 서로 다른 이중축을 사용한 히스토그램 그리기

  • truehist함수 또는 hist함수를 사용할 때 axes = FALSE지정하는 것으로, 축 좌표를 일시적으로 그리지 않도록 할 수 있다.

  • 이것을 이용하면 서로 다른 축의 좌표를 여러개 붙일 수 있다. 

  • 아래의 예에서는 x 축을 고정하고, 2 개의 히스토그램 그래프를 그렸다.

library(MASS)

par(mar = c(4.5, 4.5, 4.5, 5.5))

x <- rnorm(1000, 300, 100)
y <- rnorm(1000, 500, 200)

truehist(x, xlim = c(0, 1000), h = 10, col = "#ff990080", border = "#ff990080",
         axes = FALSE, xlab = "", ylab = "")
axis(side = 1)                                          # x
axis(side = 2, col.axis = "#ff9900", col = "#ff9900")   # left y
mtext("Orange", side = 2, line = 3)                     # left(side = 2), margin(line = 3)

par(new = TRUE)

truehist(y, xlim = c(0, 1000), h = 10, col = "#66990080", border = "#66990080",
         axes = FALSE, xlab = "", ylab = "")
axis(side = 4, col.axis = "#669900", col = "#669900")   # right y
mtext("Green", side = 4, line = 3)                      # right(side=4)

 

[다음글]

 

[R] R을 이용한 통계 분석 및 데이터 시각화 : 막대그래프

정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : 막대그래프 작성자 : 박진만 작성일 : 2020-04-01 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계..

shlee1990.tistory.com

 

[이전글]

 

[R] R을 이용한 통계 분석 및 데이터 시각화 : 수학 함수 그래프

정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : 수학 함수 그래프 ㄹ작성자 : 박진만 작성일 : 2020-04-01 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어..

shlee1990.tistory.com

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

[기상학/프로그래밍 언어]

  • sangho.lee.1990@gmail.com

[해양학/천문학/빅데이터]

  • saimang0804@gmail.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음