데이터 시각화는 데이터를 그래픽으로 표현하는 데 사용되는 기술입니다. 산점도, 차트, 그래프, 히스토그램, 지도 등과 같은 요소를 사용하여 데이터를 더 이해하기 쉽게 만듭니다. 데이터 시각화를 사용하면 데이터에서 패턴, 추세 및 예외를 쉽게 인식할 수 있습니다. 이를 통해 정보와 결과를 빠르고 시각적으로 전달할 수 있습니다.
인간의 뇌는 정보가 그림 형태로 표현될 때 정보를 이해하고 유지하기가 더 쉽습니다. 따라서 데이터 시각화는 데이터를 빠르게 해석하고, 다양한 변수를 검사하여 패턴에 미치는 영향을 확인하고, 데이터에서 인사이트를 도출하는 데 도움이 됩니다.
R 프로그래밍은 데이터 분석을 수행하고, 데이터를 표현하고, 시각화를 빌드하기 위한 내장 함수 및 광범위한 패키지와 같은 포괄적인 도구 세트를 제공합니다.
R의 데이터 시각화는 다음과 같은 방법으로 수행할 수 있습니다.
- 기본 그래픽
- 그리드 그래픽
- 래티스 그래픽스
- ggplot2
1. 기본 R 그래픽
통계 그래픽에는 몇 가지 핵심 요소가 있습니다. 이러한 요소는 그래픽 문법의 기본입니다. R은 R의 데이터 시각화를 위해 그래픽 패키지에 포함된 몇 가지 내장 함수를 제공합니다. 그래픽에 대한 기본 지식을 얻기 위해 각 요소에 대해 하나씩 논의해 보겠습니다.
R에서 데이터 시각화를 위해 기본 mtcars 데이터 세트에 대해 알아보겠습니다.
#To load graphics package
library("graphics")
#To load datasets package
library("datasets")
#To load mtcars dataset
data(mtcars)
#To analyze the structure of the dataset
str(mtcars)
출력:
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
1) plot() 함수
plot()함수는 R 객체를 플롯하는 데 사용됩니다.
plot() 함수의 기본 구문은 다음과 같습니다.
plot(x,y,type,main,sub,xlab,ylab,asp,col,..)
x : 플롯의 x 좌표, 단일 플로팅 구조, 함수 또는 R 객체
y: 플롯의 Y 좌표 점(x 좌표가 단일 구조인 경우 선택 사항)
type : 포인트의 경우 'p', 선의 경우 'l', 둘 다의 경우 'b', 고밀도 수직선의 경우 'h' 등
main: 플롯 메인타이틀
sub: 플롯 서브타이틀
xlab: x축명
ylab: y축명
asp : 종횡비(y/x)
col: 플롯의 색상(점, 선 등)
#To plot mpg(Miles per Gallon) vs Number of cars
plot(mtcars$mpg, xlab = "Number of cars", ylab = "Miles per Gallon", col = "red")
출력:
#To find relation between hp (Horse Power) and mpg (Miles per Gallon)
plot(mtcars$hp,mtcars$mpg, xlab = "HorsePower", ylab = "Miles per Gallon", type = "h", col = "blue")
출력:
2) 막대 플롯
수직 및 수평 방식으로 직사각형 막대 형태로 데이터를 나타내는 데 사용되며 막대의 길이는 변수 값에 비례합니다.
예를 들어:
#To draw a barplot of hp
#Horizontal
barplot(mtcars$hp,xlab = "HorsePower", col = "cyan", horiz = TRUE)
#Vertical
barplot(mtcars$hp, ylab = "HorsePower", col = "cyan", horiz = FALSE)
출력:
3) 히스토그램
변수의 주파수 범위에 대해 측정된 연속 범위 그룹으로 값을 나누는 데 사용됩니다.
예를 들어:
#To find histogram for mpg (Miles per Gallon)
hist(mtcars$mpg,xlab = "Miles Per Gallon", main = "Histogram for MPG", col = "yellow")
출력:
4) 박스 플롯
데이터 세트의 각 변수에 대한 설명 통계를 나타내는 데 사용됩니다. 변수의 최소값, 제1 사분위수, 중앙값, 제3 사분위수 및 최대값을 나타냅니다.
#To draw boxplots for disp (Displacement) and hp (Horse Power)
boxplot(mtcars[,3:4])
출력:
2. ggplot2 패키지를 사용한 R의 데이터 시각화
R의 ggplot2 패키지는 그래프를 설명하고 작성하기 위한 일련의 규칙인 그래픽 문법을 기반으로 합니다. 그래프를 스케일 및 레이어와 같은 의미론적 구성 요소로 분해하여 ggplot2는 그래픽의 문법을 구현합니다.
그래픽의 ggplot2 문법은 다음과 같이 구성됩니다.
- 데이터
- 레이어
- 스케일
- 좌표
- 패싯
- 테마
ggplot2는 데이터 시각화를 위한 R에서 가장 정교한 패키지 중 하나이며 최소한의 조정으로 가장 우아하고 다재다능한 인쇄 품질 플롯을 만드는 데 도움이 됩니다. ggplot2 패키지의 도움으로 단일 변수 및 다중 변수 그래프를 만드는 것은 매우 간단합니다.
ggplot을 빌드하기 위한 세 가지 기본 구성 요소는 다음과 같습니다.
- Data : 그릴 데이터 세트
- Aesthetics : 시각화에 데이터 매핑
- Geometry/Layers : 데이터에 사용되는 시각적 요소
ggplot의 기본 구문은 다음과 같습니다.
ggplot(data = NULL, mapping = aes()) + geom_function()
#To Install and load the ggplot2 package
install.packages(“ggplot2”)
library(ggplot2)
#To load datasets package
library("datasets")
#To load iris dataset
data(mtcars)
#To analyze the structure of the dataset
str(mtcars)
1) 스캐터 플롯
cyl(Number of Cylinders)와 vs(Engine Type(0 = V-shaped, 1 = straight))의 산점도를 그리려면 아래 코드를 실행합니다.
#Since the following columns have discrete(categorical) set of values, So we can
convert them to factors for optimal plotting
mtcars$am <- as.factor(mtcars$am)
mtcars$cyl <- as.factor(mtcars$cyl)
mtcars$vs <- as.factor(mtcars$vs)
mtcars$gear <- as.factor(mtcars$gear)
#To draw scatter plot
ggplot(mtcars, aes(x= cyl , y= vs)) + geom_point()
출력:
이 플롯에는 오버플로팅이라고 하는 겹치는 값이 많기 때문에 이를 피하기 위해 geom_jitter() 함수를 사용하여 일정량의 노이즈를 추가합니다.
#Here width argument is used to set the amount of jitter
ggplot(mtcars, aes(x= cyl , y= vs)) + geom_jitter(width = 0.1)
출력:
여기에서 alpha 인수를 사용하여 점의 투명도를 설정하여 R에서 데이터 시각화에 대한 오버플로팅을 더욱 줄일 수도 있습니다.
#Transparency set to 50%
ggplot(mtcars, aes(x= cyl , y= vs)) + geom_jitter(width = 0.1, alpha = 0.5)
출력:
ggplot2를 사용하면 다변량 플롯을 효과적으로 플롯할 수 있습니다.
예를 들어,
am Transmission(0 = 자동, 1 = 수동)에 따라 cyl(Number of Cylinders) 및 vs(Engine Type(0 = V-shaped, 1 = straight))의 산점도를 그리려면 다음 코드를 실행합니다.
#We use the color aesthetic to introduce third variable with a legend on the right side
ggplot(mtcars, aes(x= cyl,y= vs,color = am)) + geom_jitter(width = 0.1, alpha = 0.5)
출력:
#To add the labels
ggplot(mtcars, aes(x= cyl , y= vs ,color = am)) +
geom_jitter(width = 0.1, alpha = 0.5) +
labs(x = "Cylinders",y = "Engine Type", color = "Transmission(0 = automatic, 1 = manual)")
출력:
#To plot with shape =1 and size = 4
ggplot(mtcars, aes(x = wt, y = mpg, col = cyl)) +
geom_point(size = 4, shape = 1, alpha = 0.6) +
labs(x = "Weight",y = "Miles per Gallon", color = "Cylinders")
출력:
2) 바 플롯
#To draw a bar plot of cyl(Number of Cylinders) according to the Transmission type
using <strong>geom_bar() and fill()</strong>
ggplot(mtcars, aes(x = cyl, fill = am)) +
geom_bar() +
labs(x = "Cylinders", y = "Car count", fill = "Transmission")
출력:
#To find the proprtion, we use position argument,as follows:
ggplot(mtcars, aes(x = cyl, fill = am)) +
geom_bar(position = "fill") +
labs(x = "Cylinders",y = "Proportion",fill = "Transmission")
출력:
테마
텍스트, 선, 배경 등과 같은 플롯의 비데이터 요소의 속성을 변경하는 데 사용됩니다. R에서 데이터 시각화를 위해 이러한 요소를 변경하기 위해 theme_function()를 사용합니다. 일반적으로 사용되는 테마 기능 중 일부는 다음과 같습니다.
- theme_bw() :- 흰색 배경과 회색 그리드 선의 경우
- theme_gray:- 회색 배경과 흰색 격자선의 경우
- theme_linedraw:- 플롯 주변의 검은색 선
- theme_light:- 밝은 회색 선과 축의 경우
- theme_void:- 비표준 좌표가 있는 플롯 또는 도면에 유용한 빈 테마
- theme_dark():- 색상을 돋보이게 하도록 디자인된 어두운 배경
예를 들어:
ggplot(mtcars, aes(x = cyl, fill = am)) +
geom_bar(position = "fill") +
theme_classic()+
labs(x = "Cylinders",y = "Proportion",fill = "Transmission")
출력:
3) 패싯
데이터를 추가로 드릴다운하고 하나 이상의 변수로 데이터를 분할한 다음 R에서 최적의 데이터 시각화를 위해 데이터의 하위 집합을 모두 플롯하는 데 사용됩니다. 예를 들면 다음과 같습니다.
#To facet the following plot according to gear(Number of Gears(3,4,5)), we use
facet_grid() function as follows:
ggplot(mtcars, aes(x = cyl, fill = am)) +
geom_bar() +
facet_grid(.~gear)+
#facet_grid(rows ~ columns) theme_bw() + labs(title = "Cylinder count by transmission and Gears",x = "Cylinders", y = "Count",fill = "Transmission")
출력:
4) 히스토그램
#To plot a histogram for mpg (Miles per Gallon),
according to cyl(Number of Cylinders), we use the geom_histogram() functiong
gplot(mtcars, aes(mpg,fill = cyl)) +
geom_histogram(binwidth = 1)+
theme_bw()+
labs(title = "Miles per Gallon by Cylinders",x = "Miles per Gallon",y =
"Count",fill = "Cylinders")
출력:
#To show overlapping, we set position to identity and alpha to 0.5
ggplot(mtcars, aes(mpg,fill = cyl)) +
geom_histogram(binwidth = 1,position = "identity", alpha = 0.5)+
theme_bw()+
labs(title = "Miles per Gallon by Cylinders",x = "Miles per Gallon",y = "Count",fill = "Cylinders")
출력:
#To overcome overlapping, we can use the frequency polygon, as follows:
ggplot(mtcars, aes(mpg, color = cyl)) + geom_freqpoly(binwidth = 1)+
theme_bw()+
labs(title = "Miles per Gallon by Cylinders",x = "Miles per Gallon",y = "Count",fill = "Cylinders")
출력:
5) 박스 플롯
#To draw a Box plot
ggplot(mtcars, aes(x = cyl,y = mpg)) +
geom_boxplot(fill = "cyan", alpha = 0.5) +
theme_bw() +
labs(title = "Cylinder count vs Miles per Gallon",x = "Cylinders",
y = "Miles per Gallon")
출력:
예를 들면 다음과 같습니다.
#To draw a Box plot
ggplot(mtcars, aes(x = cyl,y = mpg,fill = am)) +
geom_boxplot( alpha = 0.5) +
theme_bw() +
labs(title = "Cylinder vs MPG by Transmission",x = "Cylinders",
y = "Miles per Gallon",fill = "Transmission")
출력:
3. R에서 데이터 시각화의 장/단점
데이터 시각화를 위한 다른 도구에 비해 R의 몇 가지 장점은 다음과 같습니다.
- R은 사용법에 대한 광범위한 온라인 지침 외에도 광범위한 시각화 라이브러리 컬렉션을 제공합니다.
- R은 또한 3D 모델 및 다중 패널 차트 형태의 데이터 시각화를 제공합니다.
- R을 통해 축, 글꼴, 범례, 주석 및 레이블을 변경하여 데이터 시각화를 쉽게 사용자 지정할 수 있습니다.
또한 다음과 같이 데이터 시각화에서 R의 몇 가지 단점이 있습니다.
- R은 개별 독립 실행형 서버에서 수행될 때만 데이터 시각화에 선호됩니다.
- R을 사용한 데이터 시각화는 다른 시각화에 비해 많은 양의 데이터에 대해 느립니다.
'프로그래밍 > C 프로그래밍' 카테고리의 다른 글
R프로그래밍 언어의 주요기능과 응용 (0) | 2024.10.03 |
---|---|
C#과 C++ 차이점 (0) | 2024.09.28 |
HTML 색상코드 정보 (0) | 2024.01.31 |
C언어의 정적함수 (0) | 2023.07.01 |
C언어의 문자열 (0) | 2023.07.01 |