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

데이터 열에 접근하기

$ 명령어는 불러온 데이터의 행에 접근 할 수 있도록 해줍니다. 다음은 불러온 mydata의 midterm1 열을 선택하는 코드입니다.

mydata$midterm
>>  [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(mydata$gender)
mytable
>> 
>>  F  M 
>> 10 20
names(mytable)
>> [1] "F" "M"

위에서와 같이 table 함수의 결과값은 숫자와 그에 대응하는 열 이름이 나오는 것을 확인 할 수 있는데, 이것을 이용하여 파이 차트의 변수명을 설정할 수 있습니다.

pie(mytable, 
    labels = names(mytable),
    main="Pie Chart of the gender variable")
원 그래프(파이차트) 기본 형태

아니면, 다음과 같이 우리가 정하고 싶은 이름으로 설정할 수도 있습니다.

pie(mytable, 
    labels = c("여자", "남자"),
    main="데이터 안의 성별 분포")
R pie() 함수 label 옵션

또한, 위의 labels의 옵션 안에 글자를 쓰면 파이차트 변수별로 이름이 정해지는 것을 이용하면, 다음과 같이 mytable의 정보를 추가 할 수도 있습니다.

pie(mytable, 
    labels = c("여자", "남자"),
    main="데이터 안의 성별 분포")
text(0.3, 0.3, "33.33 %")
text(-0.3, -0.3, "66.67 %")
R 원 그래프(파이차트) 안에 글씨 넣는법

줄기-잎 그래프 (Stem and leaf plot)

R에서 제공하는 stem이라는 함수를 이용하여 줄기-잎 그래프를 그릴 수 있다.

stem(mydata$midterm)
>> 
>>   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(mydata$midterm, scale = 0.5)
>> 
>>   The decimal point is 1 digit(s) to the right of the |
>> 
>>   0 | 95
>>   2 | 478899456889
>>   4 | 2236688901223
>>   6 | 356
stem(mydata$midterm, 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(mydata$midterm)
R hist() 함수를 사용한 히스토그램 그리기

위의 그래프는 기본적으로 주어진 기본 단위 (기둥의 너비)가 10을 기준으로 하고 있습니다. 기본 단위를 breaks 옵션을 이용하여 우리가 원하는 방식으로 조정 할 수 있습니다.

hist(mydata$midterm, breaks= c(0:4)*20) # or
R 히스토그램 상자너비 조정하기 - breaks 옵션 사용
hist(mydata$midterm, breaks= c(0:20)*4)
R 히스토그램 상자너비 조정하기 2 - breaks 옵션 사용

제목과 축 제목을 다음과 같이 설정할 수 있습니다.

hist(mydata$midterm, breaks= c(0:8)*10,
     xlab = "중간고사 성적",
     ylab = "빈도",
     main = "중간고사 성적 분포")
R 히스토그램 축제목 및 제목 설정하기 - plot() main 옵션

산점도 (Scatter plot)

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

plot(mydata$midterm, mydata$final,
     xlab = "중간고사", 
     ylab = "기말고사",
     main = "시험점수 산점도")
scatterplot basic

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

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

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

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

상자 그림 (Box plot)

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

boxplot(mydata$midterm,
        main="중간고사 점수 분포",
        xlab="점수",
        horizontal = TRUE)
R 상자그림 그리는 방법

중간고사 점수 중 하나는 바꾸어 아웃라이어(outlier)를 만들어보도록 하겠습니다.

mydata$midterm[1] <- 100 # what does this mean?

boxplot(mydata$midterm,
        main="중간고사 점수 분포",
        xlab="점수",
        horizontal = TRUE)
R 이상치가 존재하는 상자그림

여러개의 상자그림을 한번에 그릴수도 있습니다. 다음은 중간고사 점수와 기말고사 점수에 대한 상자그림을 한번에 그리는 R 코드 입니다.

boxplot(mydata$midterm, mydata$final,
        main="시험 점수 분포도",
        names = c("중간고사", "기말고사"),
        xlab="점수",
        ylab="시험", 
        horizontal = TRUE)
boxplot double

Similar Posts