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

[Rstudio] histogram 히스토그램 with ggplot

by Vitaminymc 2023. 10. 10.
반응형

histogram (히스토그램)

히스토그램(histogram)은 표로 되어 있는 도수 분포표를 그래프로 나타낸 것이다.

계급 구간별 빈도수를 시각화하여 전체 데이트 분포를 파악하는데 유용하다.

R이 값의 분포를 고려하여 계급 구간을 설정하고 계급 구간별 빈도를 기반하여 히스트그램을 생성한다.

계급 구간을 조정할 수도 있다.


R 내장 데이터 : Faithful data

올드페이스풀 간헐천(Old Faithful Geyser in Yellowstone National Park in Wyoming, United States.)

every 44 minutes to two hours since 2000 https://en.wikipedia.org/wiki/Old_Faithful

  • eruptions : Eruption time in mins
  • waiting : Waiting time to next eruption

옐로 스톤 국립공원 간헐천

Pixabay로부터 입수된 Siegfried Poepperl님의 이미지입니다.

 

R 내장 데이터 : chickwts data

닭 사료유형(feed) 별 중량(weight)

summary(chickwts)
> summary(chickwts)
     weight                        feed   
 Min.   :108.0        casein   :12  
 1st Qu.:204.5      horsebean:10  
 Median :258.0     linseed  :12  
 Mean   :261.3     meatmeal :11  
 3rd Qu.:323.5     soybean  :14  
 Max.   :423.0      sunflower:12  

R 기본함수 : hist 사용한 히스토그램

hist (faithful$waiting,col = "darkblue",
      main = "Faithful waiting time(대기 시간) 히스토그램",
      xlab = "대기 시간",
      ylab = "빈도")

histogram

breaks : 계급 구간의 수 또는 값을 지정

hist (faithful$waiting,col = "darkblue", breaks = 30,
      main = "Faithful waiting time(대기 시간) 히스토그램",
      xlab = "대기 시간",
      ylab = "빈도")

histogram

hist (faithful$waiting,col = "darkblue", breaks=seq(0, 100,by=5),
      main = "Faithful waiting time(대기 시간) 히스토그램",
      xlab = "대기 시간")

histogram


300x250

ggplot + geom_histogram

bins 옵션 : 히스토그램에서 사용할 빈(bin)의 개수를 지정

  • 빈의 개수를 적절하게 선택하는 것은 히스토그램의 해석에 매우 중요하다.
  • 빈의 개수가 너무 적으면 데이터 분포의 세부 정보를 놓칠 수 있고, 너무 많으면 히스토그램이 과대적합되어 노이즈가 많은 모습을 보일 수 있다.
  • 데이터의 특성과 분석 목적에 따라 bins 값을 조정해야 한다.
  • 일반적으로는 몇 개의 빈을 시도하고 시각적으로 확인한 후 적절한 값을 선택하는 것이 좋다. 

binwidth 옵션 :  빈(bin)의 너비를 직접 지정하는 옵션

  • binwidth 값을 설정하여 원하는 빈의 너비를 지정한다.
  • 이 값은 양의 실수로 설정하며, 예를 들어 binwidth = 1로 설정하면 빈의 너비가 1 단위가 됩니다.
  • 너비를 늘리면 빈의 개수가 감소하며, 너비를 줄이면 빈의 개수가 증가합니다.

breaks 옵션: breaks 옵션은 특정한 빈(bin) 경계를 사용자가 직접 지정

  • breaks에 벡터를 지정하여 히스토그램의 빈 경계를 수동으로 정의할 수 있다.
  • 예를 들어, breaks = c(0, 10, 20, 30)과 같이 설정하면 데이터를 0-10, 10-20, 20-30의 세 개의 빈으로 나누게 된다.
ggplot(data = faithful, aes(x = waiting)) +
  geom_histogram(col = "grey", fill = "darkblue")
> ggplot(data = faithful, aes(x = waiting)) +
+   geom_histogram(col = "grey", fill = "darkblue")
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

geom_histogram

 

막대 폭 설정 : binwidth

ggplot(data = faithful, aes(x = waiting)) +
  geom_histogram(col = "grey", fill = "darkblue", binwidth = 0.5)

geom_histogram

막대 개수 조정 : bins

ggplot(data = faithful, aes(x = waiting)) +
  geom_histogram(col = "grey", fill = "darkblue", bins = 10) +
  labs(title = "Faithful waiting time(대기 시간) 히스토그램", x = "대기 시간", y = "빈도")

geom_histogram

 

 

 

 

투명도 조정

ggplot(data = faithful, aes(x = waiting))  +
  geom_histogram(col = "grey", fill = "darkblue", alpha = 0.5) +
  labs(title = "Faithful waiting time(대기 시간) 히스토그램", x = "대기 시간")

geom_histogram

 

 


복수의 변수 히스토그램 : 사료 유형별 비교 1

ggplot(chickwts, aes(x = weight, fill = feed)) +
  geom_histogram(binwidth = 50, color = "black") +
  labs(title = "Distribution of Chicken Weights by Feed Type", x = "Weight", y = "Count") +
  scale_fill_discrete(name = "Feed")

geom_histogram

복수의 변수 히스토그램 : 사료 유형별 비교 2

chickwts %>%
  filter (feed %in% c("sunflower", "casein")) %>%
  ggplot(aes(x = weight, fill = feed)) +
  geom_histogram(binwidth = 50, color = "black", alpha = 0.3) +
  labs(title = "Distribution of Chicken Weights by Feed Type", x = "Weight", y = "Count") +
  scale_fill_discrete(name = "Feed")

geom_histogram

복수의 변수 히스토그램 : 사료유형별 비교 3 (w/ facet_wrap)

ggplot(chickwts, aes(x = weight, fill = feed)) +
  geom_histogram(binwidth = 50, color = "black") +
  labs(title = "Distribution of Chicken Weights by Feed Type", x = "Weight", y = "Count") +
  scale_fill_discrete(name = "Feed") +
  facet_wrap(~ feed, nrow = 2)

geom_histogram

facet_wrap()은 여러 개의 작은 그래프로 분할하여 표시하는 데 사용된다.

데이터를 특정 기준에 따라 나누고, 나눈 각 부분에 대한 서로 다른 그래프를 생성한다.

주로 다양한 범주 또는 요인(factor)에 따라 그래프를 나누는 데 유용하다.

나누고자 하는 요인(factor) 변수를 지정하는 인자를 지정하고,  그래프를 나눌 열(ncol)이나 행(nrow)을 지정한다.: 그래프를 여러 행 또는 열로 나눌 때 각 행 또는 열에 몇 개의 그래프를 표시할지를 지정하는 인자입니다

위 예제는 facet_wrap(~ feed, nrow = 2)를 통해서  facet 변수(feed)에 따라 그래프를 2개의 열로 분할하여 표시하였다.

 

728x90