R 통계 강의 2번째 시간입니다. 지난시간에는 R의 기초 사용법을 알아보았죠? 이번 강의에서는 R을 사용해서 통계에서 자주 사용되는 그래프들(파이차트, 줄기-잎 그래프, 히스토그램, 산점도, 상자그림 등)을 어떻게 그리는지 알아보겠습니다.
학습목표
아래는 이번 강의 목표입니다. 다음을 머리속에 생각하면서 따라와주세요!
- 통계에서 자주 사용되는 그래프들의 종류를 말할 수 있다.
- 각 그래프를 보고, 결과 해석을 할 수 있다.
자주 사용되는 기초 통계 그래프 종류와 특징
일상 생활에서 자주 사용되는 통계 그래프들에는 여러 종류가 있습니다. 각각의 그래프는 데이터의 정보를 시각화하는 데 특화된 목적과 특징을 가지고 있습니다. 주요 통계 그래프들과 특성을 살펴보면 다음과 같습니다.
- 막대 그래프(Bar Graph) & 히스토그램(Histogram):
- 데이터의 크기를 막대의 높이로 나타냄.
- 범주형 데이터(막대그래프)와 연속적인 데이터(히스토그램) 분포를 나타내는데 유용함.
- 선 그래프(Line Graph):
- 시간의 흐름에 따른 데이터의 추세를 보여줌.
- 연속적인 데이터, 특히 시계열 데이터에 사용.
- 원 그래프(Pie Chart):
- 데이터를 부분과 전체의 관계로 나타내는 데 사용.
- 각 범주가 전체에서 차지하는 비율을 보여줌.
- 산점도(Scatter Plot):
- 두 변수 간의 관계를 점으로 표시.
- 변수들 사이의 상관관계를 파악하는 데 유용.
- 상자 그림(Box Plot):
- 데이터의 분포, 중앙값, 이상치 등을 보여줌.
- 데이터의 범위와 중앙값을 비교하는 데 좋음.
- 줄기-잎 그래프(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
데이터 열에 접근하기
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(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 = 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, breaks= c(0:4)*20) # or
hist(mydatamidterm, breaks= c(0:8)*10,
xlab = "중간고사 성적",
ylab = "빈도",
main = "중간고사 성적 분포")
산점도 (Scatter plot)
산점도는두 개의 변수의 분포를 잘 살펴볼 수 있는 유용한 도구입니다. X축에 중간고사 점수 정보를, Y축에 기말고사 점수 정보를 연결하여 산점도를 그리는 R 코드는 다음과 같습니다.
plot(mydatafinal,
xlab = "중간고사",
ylab = "기말고사",
main = "시험점수 산점도")
그래프 실제 비율로 조정하기
그래프를 그릴 때에는 항상 X축과 Y축의 비율이 똑같은지를 확인해야 합니다. 비율이 맞지 않을 경우 해석에 오류가 날 수 있습니다. 그래프의 비율을 다음과 같이 asp
옵션을 사용하여 맞출 수 있습니다.
plot(mydatafinal, asp = 1,
xlab = "중간고사",
ylab = "기말고사",
main = "시험점수 산점도")
X축과 Y축 비율이 같아져 점들의 분포가 좀 더 세로로 길어 보입니다.
상자 그림 (Box plot)
박스 플롯은, 한글로는 상자 그림이라고 번역이 되어 있습니다, 주어진 변수의 분포를 잘 보여주는 직관적인 그래프입니다. R에서는 boxplot
이라는 함수를 통하여 그려낼 수 있습니다.
boxplot(mydatamidterm[1] <- 100 # what does this mean?
boxplot(mydatamidterm, mydata$final,
main="시험 점수 분포도",
names = c("중간고사", "기말고사"),
xlab="점수",
ylab="시험",
horizontal = TRUE)