본문 바로가기

데이터 분석

R 데이터 분석 - 데이터 시각화 (2)

 






 


 
 
 
ggplot2 는 그래프를 만들 때 가장 많이 사용하는 패키지이다.
 
 
시각화 패키지 1순위
그래프를 그릴떄 기본적으로 배경의 틀을 만들고 
그 위에 점, 선, 막대같은 그래프를 추가
또 그 위에 축 범위, cex 표시같은 설정을 추가 
 

install.packages("ggplot2")
library(ggplot2)

 
 
 
 
 
 
 
그래프 기본 틀 만들기 
 
ggplot(데이터 세트, aes(데이터 속성))
 
 
mpg 데이터로 그래프를 그려보자
x축은 dispal, y축은 hwy로 지정해 기본 틀 설정

ggplot(mpg, aes(x = dispal, y = hwy))

aes(x축에 들어갈 데이터, y축에 들어갈 데이터)

 
 
 
 
 
 
 
 
산점도 만들기 
geom_point : 산점도 그래프 
 
 
배경에 산점도 추가 
+ 를 이용해 계속 함수 추가 
엔터로 밑으로 내릴거면 연산자 쓰고 내려야함 
 

ggplot(mpg, aes(x = displ, y = hwy))  + geom_point()

 
 
 
xlim, ylim 범위 지정
 
x축 범위 3~6 으로 지정 

ggplot(mpg, aes(x = dispal, y = hwy)) + geom_point() + xlim(3,6)

 
x축 범위 3~6 으로 지정 , y축 범위 10 ~ 30 으로 지정 

ggplot(mpg, aes(x = displ, y = hwy)) + 
geom_point() + xlim(3, 6) + ylim(10, 30)

 
 
 
 
 
 
 
 
 
airquality 데이터로 그래프를 그려보자 
 
airquality 데이터에서 날짜별 온도를 시각화해보자
 
 
x축은 날짜 (Day), y축은 온도(Temp))
 

str(airquality)
153개의 행과 6개의 열을 가진 데이터 

ggplot(airquality, aes(x = Day, y = Temp))

 
 
 
산점도 만들기

ggplot(airquality, aes(x = Day, y = Temp)) + geon_point()

 
 
 
크기를 3, 색상을 빨강으로 적용하여 산점도 만들기

ggplot(airquality, aes(x = Day, y = Temp)) + geom_point(size = 3, color = "red")

 
 
 
산점도 차트에 텍스트 추가하기 

ggplot(airquality, aes(x = Day, y = Temp)) + geom_point() + 
geom_text(aes(label = Temp, vjust = 0, hjust = 0))

라벨 = 라벨명
vjust = 0 글자의 세로에서의 위치
hjust = 0 글자의 가로에서의 위치 
가로값과 세로값을 0으로 입력하면 label은 각 점의 오른쪽 위에 나오게 됨

 
 
 
 
 
 
 
 
막대 그래프 - 집단 간 차이 표현하기 
 

install.packages("dplyr")
library(dplyr)

 
 
 
 
 
 
 
 
 
 
집단별 평균표 만들기 
 

df_mpg <- mpg %>% group_by(drv) %>% summarise(mean_hwy = mean(hwy))
df_mpg

 
summarise() 함수는 dplyr 패키지에서 제공되는 함수로 데이터에 대한 '요약 통계량' 을 계산하는데 사용됩니다.
주로 group_by 함수와 함께 사용하여 데이터의 그룹별 요약 통계량을 계산하는데 활용됩니다.
 
 
위의 코드에서 summarise() 함수는 drv(구동방식별) 열을 기준으로 데이터를 그룹화한 후
각 그룹에서 hwy(고속도로 연비)의 평균을 계산하고
새로운 열을 갖는 데이터 프레임이 생성됩니다.
 
= 통계량 (평균, 합계, 중앙값 등) 을 계산하고 데이터를 요약하는 작업 
 
 
 
 
 
 
 
 
 
 
 
 
막대 그래프 생성하기 
 
 
geom_col : 막대그래프 만들기 

ggplot(df_mpg, aes(x = drv, y = mean_hwy)) + geom_col()

 
 
 
 
크기 순으로 정렬하기 

ggplot(df_mpg, aes(x = reorder(drv, -mean_hwy), y = mean_hwy)) + geom_col()

 
reorder(해당 변수, 정렬 기준) : 크기 순으로 정렬하기 
x축의 변수가 drv이긴한데, 막대기의 길이로 조정할거니까 mean_hwy (정렬 기준)도 써줌
 
-mean_hwy : 앞에 - (마이너스) 가 붙으면 점점 빼짐, 내림차순
앞에 마이너스가 없으면 오름차
 
 
 
 
 
 
 
 
 
 
 
빈도 막대 그래프 만들기
geom_bar()
 
 
값의 개수를 막대 길이로 표현한 것
y축없이 x축만 지정해주면 됨 (빈도가 들어간 것이므로 y축은 필요없음 - count로 나옴)
 

ggplot(mpg, aes(x = drv)) + geom_bar()

ggplot(mpg, aes(x = hwy)) + geom_bar

 
 
 
 
 
mtcars 데이터에서 실린더별 빈도수를 빈도 막대 그래프 만들기 
 

ggplot(mtcars, aes(x = cyl)) + geom_bar()
ggplot(mtcars, aes(x = vyl)) + geom_bar(width = 0.5)

width : 굵기 조절

 
 
 
만약 차트를 그릴 때
값이 없는 데이터는 빼고 그리려면, 지금 데이터는 숫자 데이터이기 떄문에 
이거를 문자형 factor 로 지정하면, 문자로 바뀌어서 실제 데이터에 있는 값만 그릴 수 있다.
 

ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(width = 0.5)

 
 
 
 
 
gear에 따른 빈도 막대 그래프를 그리고 그래프의 제목, 축 제목 입력해보기
 
labs : 제목 추가하기 

ggplot(mtcars, aes(x = cyl)) + geom_bar() + 
labs(x = "기어수", y = "자동차 수", title = "변속기 기어별 자동차수")

 
 
 
 
 
테마 설정해보기 
 
theme_bw() : 뒤에 배경, 테마 변경

ggplot(mtcars, aes(x = cyl)) + geom_bar() + 
labs(x = "기어수", y = "자동차 수", title = "변속기 기어별 자동차 수") +
theme_bw()

 
 
종류 : theme_gray(), theme_linedraw
 
 
 
 
 
 
 
 
 
 
 
누적 막대 그래프 만들기 
 
geom_bar(aes(fill=factor(gear)
실린더 종류별 gear 빈도까지 파악해보자 
 

ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(aes(fill = factor(gear)))

 
채워질 내용은 gear이다. 
이 막대기 안에서 기어에 대한 데이터가 색깔로 누적되어 표시
 
 
 
 
 
 
 
 
 
 
 
누적 막대 그래프를 선버스트 차트로 변환하기 

(뭔가 원형 버섯같이 생김)

 
coord_polar()
 
 
여러 열로 구성된 범주를 계층 구조로 쌓고 싶을 때
선버스트 차트를 이용해서 데이터를 효과적으로 표현
 

ggplot(mtcars, aes(x = factor(cyl))) +
geom_bar(aes(fill = factor(gear)) +
coord_polar()

 
 
 
 
선버스트 차트를 다시 원형으로 변환
 
coord_polar(theta="y")

ggplot(mtcars, aes(x = factor(cyl))) + 
geom_bar(aes(fill = factor(gear))) +
coord_polar(theta = "y")

 
 
 
 
 
 
 
 
선 그래프
 
시계열 그래프 만들기 
시간에 따라 달라진 데이터를 표현할 때 적합한 데이터 
 
economics : 미국의 경제지표를 월별로 나타낸 데이터 
geom_line() : 꺾은 선 그래프 
 
 

ggplot(economics, aes(x = date, y = unemploy)) + geom_line()

ggplot(airquality, aes(x = Day, y = Temp)) + geom_line()

ggplot(airquality, aes(x = Day, y = Temp)) +
geom_line(color = "red") + geom_point(size = 3, color = "green")

 
 
 
 
 
 
 
 
 
 
상자 그림 - 집단 간 분포 차이 표현하기 
데이터의 분포 설명 (ex - 이상치)
 
drv : 구동방식
hwy : 고속도로 연비 
 
 
 
 
상자 그림 만들기 

ggplot(mpg, aes(x = drv, y = hwy)) + geom_boxplot()

ggplot(mpg, aes(x = cyl, y = hwy)) + geom_boxplot()

 
 
 
숫자 데이터는 뭉쳐서 나오는데 그룹으로 묶으면 
떨어진 그래프로 나옴
 

ggplot(airquality, aes(x = Day, y = Temp, group = Day)) +
geom_boxplot()

 
 
 
 
 
 
 
 
히스토그램 그리기 
x축의 데이터가 연속성을 가진 데이터 
 
ggplot(airquality, aes(Temp)) + geom_histogram()