R 통계 강의 2번째 시간입니다. 지난시간에는 R의 기초 사용법을 알아보았죠? 이번 강의에서는 R을 사용해서 통계에서 자주 사용되는 그래프들(파이차트, 줄기-잎 그래프, 히스토그램, 산점도, 상자그림 등)을 어떻게 그리는지 알아보겠습니다.

학습목표

아래는 이번 강의 목표입니다. 다음을 머리속에 생각하면서 따라와주세요!

  • 통계에서 자주 사용되는 그래프들의 종류를 말할 수 있다.
  • 각 그래프를 보고, 결과 해석을 할 수 있다.

자주 사용되는 기초 통계 그래프 종류와 특징

일상 생활에서 자주 사용되는 통계 그래프들에는 여러 종류가 있습니다. 각각의 그래프는 데이터의 정보를 시각화하는 데 특화된 목적과 특징을 가지고 있습니다. 주요 통계 그래프들과 특성을 살펴보면 다음과 같습니다.

일상에서 자주 쓰이는 통계 그래프 종류와 해석방법
  1. 막대 그래프(Bar Graph) & 히스토그램(Histogram):
    • 데이터의 크기를 막대의 높이로 나타냄.
    • 범주형 데이터(막대그래프)와 연속적인 데이터(히스토그램) 분포를 나타내는데 유용함.
  2. 선 그래프(Line Graph):
    • 시간의 흐름에 따른 데이터의 추세를 보여줌.
    • 연속적인 데이터, 특히 시계열 데이터에 사용.
  3. 원 그래프(Pie Chart):
    • 데이터를 부분과 전체의 관계로 나타내는 데 사용.
    • 각 범주가 전체에서 차지하는 비율을 보여줌.
  4. 산점도(Scatter Plot):
    • 두 변수 간의 관계를 점으로 표시.
    • 변수들 사이의 상관관계를 파악하는 데 유용.
  5. 상자 그림(Box Plot):
    • 데이터의 분포, 중앙값, 이상치 등을 보여줌.
    • 데이터의 범위와 중앙값을 비교하는 데 좋음.
  6. 줄기-잎 그래프(Stem-and-leaf Plot)
    • 데이터의 크기가 작은 경우 유용함.
    • 데이터 분포와 각 수치들을 동시에 나타낼 수 있음.

오늘은 이 중에서 선 그래프를 제외한 원 그래프(파이차트), 줄기-잎 그래프, 히스토그램, 산점도, 상자그림을 R을 사용해서 그려보고, 해석하는 연습을 해봅시다. 본 포스트에서는 기초적인 방법을 사용하지만, 실제 논문에서 사용되는 통계 그래프를 그리는 방법은 다음 포스트를 참고해주세요!

데이터 준비하기

지난시간에 불러왔던 중간고사 데이터를 다시 불러오도록 하겠습니다.

mydata <- read.csv("examscore.csv", header = TRUE)
head(mydata)
>>   student_id gender midterm final
>> 1          1      F      38    46
>> 2          2      M      42    67
>> 3          3      F      53    56
>> 4          4      M      48    54
>> 5          5      M      46    39
>> 6          6      M      51    74

데이터 열에 접근하기

</code> 명령어는 불러온 데이터의 행에 접근 할 수 있도록 해줍니다. 다음은 불러온 <code>mydata</code>의 midterm1 열을 선택하는 코드입니다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>mydatamidterm

>>  [1] 38 42 53 48 46 51 48 43 28 38 50 29 27 36 29 34 35 46
>> [19] 39  9 76 15 63 28 49 42 24 52 65 52

이전에 배웠던 대괄호 명령어 [] 를 사용해도 됩니다. 행과 열에 동시에 접근 할 수 있는 대신에 숫자를 사용해야 합니다.

mydata[,3]
>>  [1] 38 42 53 48 46 51 48 43 28 38 50 29 27 36 29 34 35 46
>> [19] 39  9 76 15 63 28 49 42 24 52 65 52
mydata[1,] # the data related to the first student in the list
>>   student_id gender midterm final
>> 1          1      F      38    46

파이차트 (원 그래프, Pie chart)

파이 차트를 그리기 위해서는, 데이터 안에 몇 개의 데이터 포인트 들이 있는지 세어봐야 합니다. 이 경우 다음과 같이 table 함수를 사용하여 쉽게 데이터 구조를 파악 할 수 있습니다.

mytable <- table(mydatagender) mytable</code></pre> <!-- /wp:code -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code><strong>>></strong>  <strong>>></strong>  F  M  <strong>>></strong> 10 20</code></pre> <!-- /wp:code -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>names(mytable)</code></pre> <!-- /wp:code -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code><strong>>></strong> [1] "F" "M"</code></pre> <!-- /wp:code -->  <!-- wp:paragraph --> 위에서와 같이 <code>table</code> 함수의 결과값은 숫자와 그에 대응하는 열 이름이 나오는 것을 확인 할 수 있는데, 이것을 이용하여 파이 차트의 변수명을 설정할 수 있습니다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>pie(mytable,      labels = names(mytable),     main="Pie Chart of the gender variable")</code></pre> <!-- /wp:code -->  <!-- wp:kadence/image {"align":"center","id":4225,"sizeSlug":"medium_large","link":"https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-basic.webp","linkDestination":"media","uniqueID":"4222_30dac4-4c"} --> <div class="wp-block-kadence-image kb-image4222_30dac4-4c"><figure class="aligncenter size-medium_large"><a href="https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-basic.webp" class="kb-advanced-image-link"><img src="https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-basic-768x548.webp" alt="원 그래프(파이차트) 기본 형태" class="kb-img wp-image-4225"/></a></figure></div> <!-- /wp:kadence/image -->  <!-- wp:paragraph --> 아니면, 다음과 같이 우리가 정하고 싶은 이름으로 설정할 수도 있습니다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>pie(mytable,      labels = c("여자", "남자"),     main="데이터 안의 성별 분포")</code></pre> <!-- /wp:code -->  <!-- wp:kadence/image {"align":"center","id":4227,"sizeSlug":"medium_large","link":"https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-label.webp","linkDestination":"media","uniqueID":"4222_5b88b5-83"} --> <div class="wp-block-kadence-image kb-image4222_5b88b5-83"><figure class="aligncenter size-medium_large"><a href="https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-label.webp" class="kb-advanced-image-link"><img src="https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-label-768x548.webp" alt="R pie() 함수 label 옵션" class="kb-img wp-image-4227"/></a></figure></div> <!-- /wp:kadence/image -->  <!-- wp:paragraph --> 또한, 위의 <code>labels</code>의 옵션 안에 글자를 쓰면 파이차트 변수별로 이름이 정해지는 것을 이용하면, 다음과 같이 <code>mytable</code>의 정보를 추가 할 수도 있습니다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>pie(mytable,      labels = c("여자", "남자"),     main="데이터 안의 성별 분포") text(0.3, 0.3, "33.33 %") text(-0.3, -0.3, "66.67 %")</code></pre> <!-- /wp:code -->  <!-- wp:kadence/image {"align":"center","id":4243,"sizeSlug":"medium_large","link":"https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-with-text.webp","linkDestination":"media","uniqueID":"4222_4749a8-3a"} --> <div class="wp-block-kadence-image kb-image4222_4749a8-3a"><figure class="aligncenter size-medium_large"><a href="https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-with-text.webp" class="kb-advanced-image-link"><img src="https://statisticsplaybook.com/wp-content/uploads/2024/01/piechart-with-text-768x548.webp" alt="R 원 그래프(파이차트) 안에 글씨 넣는법" class="kb-img wp-image-4243"/></a></figure></div> <!-- /wp:kadence/image -->  <!-- wp:heading {"level":3} --> <h3 class="wp-block-heading">줄기-잎 그래프 (Stem and leaf plot)</h3> <!-- /wp:heading -->  <!-- wp:paragraph --> <code>R</code>에서 제공하는 <code>stem</code>이라는 함수를 이용하여 줄기-잎 그래프를 그릴 수 있다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>stem(mydatamidterm)
>> 
>>   The decimal point is 1 digit(s) to the right of the |
>> 
>>   0 | 9
>>   1 | 5
>>   2 | 478899
>>   3 | 456889
>>   4 | 22366889
>>   5 | 01223
>>   6 | 35
>>   7 | 6

위의 그래프는 줄기 단위가 10인 그래프인데, scale 옵션을 통하여 주어진 그래프의 줄기 단위를 바꿀 수 있다.

stem(mydatamidterm, scale = 0.5)</code></pre> <!-- /wp:code -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code><strong>>></strong>  <strong>>></strong>   The decimal point is 1 digit(s) to the right of the | >>  >>   0 | 95 <strong>>></strong>   2 | 478899456889 >>   4 | 2236688901223 <strong>>></strong>   6 | 356</code></pre> <!-- /wp:code -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>stem(mydatamidterm, scale = 2)
>> 
>>   The decimal point is 1 digit(s) to the right of the |
>> 
>>   0 | 9
>>   1 | 
>>   1 | 5
>>   2 | 4
>>   2 | 78899
>>   3 | 4
>>   3 | 56889
>>   4 | 223
>>   4 | 66889
>>   5 | 01223
>>   5 | 
>>   6 | 3
>>   6 | 5
>>   7 | 
>>   7 | 6

히스토그램 (Histogram)

hist(mydatamidterm)</code></pre> <!-- /wp:code -->  <!-- wp:kadence/image {"align":"center","id":4245,"sizeSlug":"medium_large","link":"https://statisticsplaybook.com/wp-content/uploads/2024/01/image_histogram.webp","linkDestination":"media","uniqueID":"4222_76c93f-32"} --> <div class="wp-block-kadence-image kb-image4222_76c93f-32"><figure class="aligncenter size-medium_large"><a href="https://statisticsplaybook.com/wp-content/uploads/2024/01/image_histogram.webp" class="kb-advanced-image-link"><img src="https://statisticsplaybook.com/wp-content/uploads/2024/01/image_histogram-768x548.webp" alt="R hist() 함수를 사용한 히스토그램 그리기" class="kb-img wp-image-4245"/></a></figure></div> <!-- /wp:kadence/image -->  <!-- wp:paragraph --> 위의 그래프는 기본적으로 주어진 기본 단위 (기둥의 너비)가 10을 기준으로 하고 있습니다. 기본 단위를 <code>breaks</code> 옵션을 이용하여 우리가 원하는 방식으로 조정 할 수 있습니다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>hist(mydatamidterm, breaks= c(0:4)*20) # or
R 히스토그램 상자너비 조정하기 - breaks 옵션 사용
hist(mydatamidterm, breaks= c(0:20)*4)</code></pre> <!-- /wp:code -->  <!-- wp:kadence/image {"align":"center","id":4253,"sizeSlug":"medium_large","link":"https://statisticsplaybook.com/wp-content/uploads/2024/01/histogram-narrow-bin.webp","linkDestination":"media","uniqueID":"4222_da046c-02"} --> <div class="wp-block-kadence-image kb-image4222_da046c-02"><figure class="aligncenter size-medium_large"><a href="https://statisticsplaybook.com/wp-content/uploads/2024/01/histogram-narrow-bin.webp" class="kb-advanced-image-link"><img src="https://statisticsplaybook.com/wp-content/uploads/2024/01/histogram-narrow-bin-768x548.webp" alt="R 히스토그램 상자너비 조정하기 2 - breaks 옵션 사용" class="kb-img wp-image-4253"/></a></figure></div> <!-- /wp:kadence/image -->  <!-- wp:paragraph --> 제목과 축 제목을 다음과 같이 설정할 수 있습니다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>hist(mydatamidterm, breaks= c(0:8)*10,
     xlab = "중간고사 성적",
     ylab = "빈도",
     main = "중간고사 성적 분포")
R 히스토그램 축제목 및 제목 설정하기 - plot() main 옵션

산점도 (Scatter plot)

산점도는두 개의 변수의 분포를 잘 살펴볼 수 있는 유용한 도구입니다. X축에 중간고사 점수 정보를, Y축에 기말고사 점수 정보를 연결하여 산점도를 그리는 R 코드는 다음과 같습니다.

plot(mydatamidterm, mydatafinal,
     xlab = "중간고사", 
     ylab = "기말고사",
     main = "시험점수 산점도")
scatterplot basic

그래프 실제 비율로 조정하기

그래프를 그릴 때에는 항상 X축과 Y축의 비율이 똑같은지를 확인해야 합니다. 비율이 맞지 않을 경우 해석에 오류가 날 수 있습니다. 그래프의 비율을 다음과 같이 asp 옵션을 사용하여 맞출 수 있습니다.

plot(mydatamidterm, mydatafinal, asp = 1,
     xlab = "중간고사", 
     ylab = "기말고사",
     main = "시험점수 산점도")
R plot() 함수의 asp 옵션 뜻

X축과 Y축 비율이 같아져 점들의 분포가 좀 더 세로로 길어 보입니다.

상자 그림 (Box plot)

박스 플롯은, 한글로는 상자 그림이라고 번역이 되어 있습니다, 주어진 변수의 분포를 잘 보여주는 직관적인 그래프입니다. R에서는 boxplot이라는 함수를 통하여 그려낼 수 있습니다.

boxplot(mydatamidterm,         main="중간고사 점수 분포",         xlab="점수",         horizontal = TRUE)</code></pre> <!-- /wp:code -->  <!-- wp:kadence/image {"align":"center","id":4262,"sizeSlug":"medium_large","link":"https://statisticsplaybook.com/wp-content/uploads/2024/01/boxplot-basic.webp","linkDestination":"media","uniqueID":"4222_e61bb9-13"} --> <div class="wp-block-kadence-image kb-image4222_e61bb9-13"><figure class="aligncenter size-medium_large"><a href="https://statisticsplaybook.com/wp-content/uploads/2024/01/boxplot-basic.webp" class="kb-advanced-image-link"><img src="https://statisticsplaybook.com/wp-content/uploads/2024/01/boxplot-basic-768x548.webp" alt="R 상자그림 그리는 방법" class="kb-img wp-image-4262"/></a></figure></div> <!-- /wp:kadence/image -->  <!-- wp:paragraph --> 중간고사 점수 중 하나는 바꾸어 아웃라이어(outlier)를 만들어보도록 하겠습니다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>mydatamidterm[1] <- 100 # what does this mean?

boxplot(mydatamidterm,         main="중간고사 점수 분포",         xlab="점수",         horizontal = TRUE)</code></pre> <!-- /wp:code -->  <!-- wp:kadence/image {"align":"center","id":4264,"sizeSlug":"medium_large","link":"https://statisticsplaybook.com/wp-content/uploads/2024/01/boxplot-with-outlier.webp","linkDestination":"media","uniqueID":"4222_cc29bb-5a"} --> <div class="wp-block-kadence-image kb-image4222_cc29bb-5a"><figure class="aligncenter size-medium_large"><a href="https://statisticsplaybook.com/wp-content/uploads/2024/01/boxplot-with-outlier.webp" class="kb-advanced-image-link"><img src="https://statisticsplaybook.com/wp-content/uploads/2024/01/boxplot-with-outlier-768x548.webp" alt="R 이상치가 존재하는 상자그림" class="kb-img wp-image-4264"/></a></figure></div> <!-- /wp:kadence/image -->  <!-- wp:paragraph --> 여러개의 상자그림을 한번에 그릴수도 있습니다. 다음은 중간고사 점수와 기말고사 점수에 대한 상자그림을 한번에 그리는 R 코드 입니다. <!-- /wp:paragraph -->  <!-- wp:code {"className":"language-r"} --> <pre class="wp-block-code language-r"><code>boxplot(mydatamidterm, mydata$final,
        main="시험 점수 분포도",
        names = c("중간고사", "기말고사"),
        xlab="점수",
        ylab="시험", 
        horizontal = TRUE)
boxplot double

Similar Posts