쭈쌤
쭈쌤 Hello World

[R 데이터시각화] 파이, 산점도 그래프

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R 데이터시각화] 파이, 산점도 그래프≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[R 데이터시각화] 파이, 산점도 그래프

선 그래프와 막대 그래프 이외에 자주 사용되는 그래프로는 파이 그래프산점도 그래프가 있습니다.

#01. 그래프 작업 준비하기

1) 패키지 로드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 한국 서버를 통해 라이브러리 로드
REPO_URL = "http://healthstat.snu.ac.kr/CRAN/"

# 그래프 패키지
if (!require(ggplot2)) install.packages("ggplot2", repos=REPO_URL)
library(ggplot2)

# 폰트 설정 패키지
if (!require(extrafont)) install.packages("extrafont", repos=REPO_URL)
library(extrafont)

# `%>%`가 적용되는 기능을 사용하고자 할 경우
if (!require("dplyr"))     install.packages("dplyr", repos=REPO_URL)
library(dplyr)

2) 한글 사용을 위한 폰트 로드

나눔고딕 검색하기

아래 구문 실행시 y/n를 묻는 화면이 표시된다. y를 입력해야 실행된다.

시간이 다소 오래 소요되며 장치별로 1회만 수행하면 된다.

1
font_import(pattern = 'NanumGothic.ttf')
▶ 출력결과
1
2
3
4
5
Scanning ttf files in C:\WINDOWS\Fonts ...
Extracting .afm files from .ttf files...
C:\Windows\Fonts\NanumGothic.ttf : NanumGothic already registered in fonts database. Skipping.
Found FontName for 0 fonts.
Scanning afm files in D:/leekh/R-3.6.1/library/extrafontdb/metrics

설치된 폰트 목록 확인

fonttable() 함수를 통해 반환받는 DataFrame에서 FamilyName 컬럼을 확인하면 R 소스코드에 적용해야 할 폰트 이름을 확인할 수 있다.

출력결과는 시스템에 설치되어 있는 글꼴의 상태에 따라 다를 수 있다.

unique() 함수는 파라미터로 전달된 항목들에 대해서 중복을 제거한 결과를 리턴한다.

1
2
ftable <- fonttable()
unique(ftable$FamilyName)
▶ 출력결과
1
1. 'NanumGothic'

설치된 폰트들 로드하기

1
2
3
# mac의 경우 `device="win"` 생략
loadfonts(device="win")
# loadfonts()
▶ 출력결과
1
2
NanumGothic already registered with windowsFonts().
NanumGothicExtraBold already registered with windowsFonts().

3) 샘플 데이터 가져오기

학생들의 나이와 좋아하는 계절 조사 자료 (임의의 예시 데이터)

1
2
설문 <- read.csv("http://itpaper.co.kr/demo/r/season.csv", stringsAsFactors=F, fileEncoding="euc-kr")
설문
▶ 출력결과

A data.frame: 500 × 3

이름계절나이
<chr><chr><int>
학생1 15
학생2 17
학생3 여름18
학생4 겨울19
학생5 가을15
학생6 16
학생7 여름19
학생8 여름18
학생9 여름17
학생10여름17
학생11가을19
학생12가을19
학생13여름18
학생14가을19
학생15겨울15
학생16겨울16
학생1716
학생18여름18
학생19여름17
학생2018
학생21겨울19
학생22가을15
학생23가을17
학생24여름18
학생2519
학생26여름15
학생27겨울16
학생28겨울19
학생29가을18
학생30가을17
.........
학생471가을19
학생472여름15
학생47315
학생474여름17
학생475겨울18
학생476겨울19
학생477가을15
학생478가을16
학생479가을19
학생48018
학생48117
학생482여름17
학생483겨울19
학생484가을19
학생48518
학생486여름19
학생487여름15
학생488여름17
학생489여름18
학생490가을19
학생491가을15
학생492여름16
학생493가을19
학생494겨울18
학생495겨울17
학생49617
학생497여름19
학생498여름19
학생49918
학생500겨울19

#02. 파이 그래프

데이터프레임의 특정 컬럼 안에서 전체를 100%로 봤을 때 얼만큼의 비중을 차지하는지를 시각화 한 자료.

1) 각 계절별로 빈도수 검사

파이 그래프를 표현하기 위해서는 각 데이터별로 빈도수를 확인하는 분석이 수행되어야 한다.

1
2
df <- data.frame(table(설문$계절))
df
▶ 출력결과

A data.frame: 4 × 2

Var1Freq
<fct><int>
가을134
겨울101
91
여름174

2) 파이 그래프 시각화

1
options(repr.plot.width=10, repr.plot.height=10, warn=-1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ggplot(data=df) +
    # x축은 지정 안함, y축은 값의 종류, fill은 각 종류별 빈도
    geom_col(aes(x="", y=Freq, fill=Var1), width = 1, color = "white") +
    # y축을 기준으로 회전시킴 --> 파이그래프 표현
    coord_polar('y', start = 0) +
    # 배경을 흰색으로 설정
    theme_bw() +
    # 그래프 타이틀 설정
    ggtitle("학생들이 선호하는 계절") +
    # x축 제목 설정 --> 표시안함을 위해 빈 문자열 설정
    xlab("") +
    # y축 제목 설정 --> 표시안함을 위해 빈 문자열 설정
    ylab("") +
    theme(
        # 각 텍스트의 색상, 크기, 각도, 글꼴 설정
        plot.title=element_text(family="NanumGothic", color="#0066ff", size=24, face="bold", hjust=0.5),
        # 범주의 제목 표시 안함
        legend.title = element_blank(),
        # 범주의 각 항목별 텍스트
        legend.text=element_text(family="NanumGothic", face="bold", size=16, color="#330066"),
        # 범주를 구분하는 각 색상 박스에 대한 테두리와 배경
        legend.key=element_rect(color="red", fill="white"),
        # 범주의 배경상자 색상 설정
        legend.box.background = element_rect(fill="skyblue"),
        # 범주의 배경상자 여백
        legend.box.margin = margin(3, 3, 3, 3),
        # 범주를 구분하는 각 색상 박스에 대한 크기
        legend.key.size = unit(1,"cm"))
▶ 출력결과

png

#02. 산점도 그래프

두 변수 간의 영향력을 보여주기 위해 가로 축과 세로 축에 데이터 포인트를 그리는 그래프.

포인터들이 오밀조밀 뭉쳐 있으면 두 변수는 서로 관련성 정도가 높고 흩어져 있으면 관련성이 낮고 분석한다.

예) 여름철 온도와 아이스크림 판매량의 상관관계 분석

1) 산점도 그래프의 의미 -> 상관 관계

  • 산점도에서 사용되는 두 변수 간의 관계
  • 그래프에 표시되는 마커들의 배열이 직선에 가까운 경우 두 변수의 상관 관계가 높다.
  • 마커가 산점도에 균등하게 분산되는 경우 상관 관계가 낮거나 0이다.
  • 상관관계의 유형
    1. 정의관계 : x가 증가할 때 y도 증가
    2. 역의관계 : x가 증가할 때 y는 감소
    3. 선형관계 : 직선에 가까운 배치
    4. 비선형관계 : 곡선에 가까운 배치

2) 샘플 데이터 가져오기

1
2
교통사고 <- read.csv("http://itpaper.co.kr/demo/r/traffic.csv", stringsAsFactors=F, fileEncoding="euc-kr")
교통사고
▶ 출력결과

A data.frame: 168 × 5

년도발생건수사망자수부상자수
<int><int><int><int><int>
2005 11549450425413
2005 21324443121635
2005 31658047725550
2005 41781750728131
2005 51908557129808
2005 61809247628594
2005 71867552829984
2005 81903556231603
2005 91875957729831
2005101975763931597
2005111912957430337
2005121850453029750
2006 11497142024533
2006 21427037322903
2006 31676746526013
2006 41794846928725
2006 51914053130279
2006 61743545527032
2006 71863451629978
2006 81879458530882
2006 91929358030186
2006101910065130715
2006111987770131270
2006121751658127713
2007 11491446823975
2007 21469644623717
2007 31816647628811
2007 41805546028555
2007 51926451630532
2007 61831053828662
...............
2016 71895535828586
2016 81839833628017
2016 91788337526761
2016101991844029635
2016111923441628520
2016121886940828192
2017 11697035326099
2017 21483228022323
2017 31704729525046
2017 41771729326530
2017 51850236627268
2017 61804731526454
2017 71815835727362
2017 81868235328162
2017 91989141929371
2017101886342028698
2017111937737928472
2017121824935527044
2018 11702630425438
2018 21620827524630
2018 31702231025015
2018 41799230326643
2018 51863630927834
2018 61808226626574
2018 71869931528104
2018 81833535727749
2018 91837134827751
2018101973837328836
2018111902929828000
2018121801032326463

3) 교통사고 발생건수와 부상자 수의 상관관계 분석

1
options(repr.plot.width=20, repr.plot.height=12, warn=-1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ggplot(data=교통사고) +
    geom_point(aes(x=발생건수, y=부상자수), size=3, colour='blue') +
    # 배경을 흰색으로 설정
    theme_bw() +
    # 그래프 타이틀 설정
    ggtitle("교통사고 발생건수와 부상자 수의 상관관계") +
    # x축 제목 설정 --> 표시안함을 위해 빈 문자열 설정
    xlab("발생건수") +
    # y축 제목 설정 --> 표시안함을 위해 빈 문자열 설정
    ylab("부상자수") +
    # 각 텍스트의 색상, 크기, 각도, 글꼴 설정
    theme(plot.title=element_text(family="NanumGothic", color="#0066ff", size=25, face="bold"),
          axis.title.x=element_text(family="NanumGothic", color="#999999", size=18, face="bold"),
          axis.title.y=element_text(family="NanumGothic", color="#999999", size=18,face="bold", hjust=1),
          axis.text.x=element_text(family="NanumGothic", color="#000000", size=16, angle=45),
          axis.text.y  = element_text(family="NanumGothic", color="#000000", size=16, angle=45))
▶ 출력결과

png

Rating:

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R 데이터시각화] 파이, 산점도 그래프≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus