2024. 10. 7. 00:59ㆍR분석
데이터 시각화
데이터시각화란 숫자로 구성된 수치 데이터를 이미지화 하여 그 내용을 시각적으로 전달하는것을 의미한다.
ggplot2패키지 설치
#ggplot2패키지
#패키지 설치
install.packages('ggplot2')
library(ggplot2)
#R의 내장 데이터셋 불러오기
airquality #1973년 뉴욕의 대기 측정 데이터
ggplot2 패키지
#그래프 기본틀 생성
str(airquality) #str()데이터프레임 요약함수
ggplot(airquality,aes(x=Day,y=Temp))#아직 값이 안들어가고 틀만 만들어진 상태
데이터 시각화 시 사용하는 패키지로, 각종 그래프 함수가 포함되어있다. 기본적인 대부분의 시각화는 ggplot2패키지로 표현능하며, 실무에서도 r에서 데이터 시각화할때 가장많이 사용되는 패키지이다. ggplot2()함수의 기본형식으로는 ggplot(데이터 셋, aes(x=값, y=값))을 사용하는데, 이렇게 그래프의 틀을 공통적으로 사용하며, 여기서 사용할 그래프에 따라 그래프에 맞는 함수를 다시 연결시켜주는 방식으로 사용한다.
geom_point() : 산점도 그래프
#산점도 그래프 : geom_point()
ggplot(airquality,aes(x=Day,y=Temp))+
geom_point(size=3,color='orange')+
labs(x='일자',y='온도',title='산점도 그래프')
#산점도 그래프 옵션
#1)size : 관측점 크기
#2)color : 색상
#산점도 그래프 월별로 관측점 색상 다르게하기
#산점도는 값이 누적되는 그래프가 아니기때문에 사실 그룹와는 안해주어도 상관은 없음
ggplot(airquality,aes(x=Day,y=Temp,group=Month,colour=factor(Month)))+
geom_point(size=2)+
labs(color='Month',title='월별 산점도그래프')
#범례의 제목 지정부분이기때문에 따옴표를 사용해야함
#color는 점,선 등의 색상에 대한 범례를 의미
산점도 그래프는 데이터의 분포도와 상관관계를 알기위해 사용하는 그래프이다. geom_point()로 사용하며, 기존에 만들어둔 공통 ggplot패키지에 +를 사용하여 붙여사용하면되는데, 이때 +는 반드시 아래가 아닌 옆에 작성하여 연결해주어야한다.(밑에줄에 사용하면 에러 발생) 또한 산점도의 그래프의 경우 size(관측점 크기), color(관측점 색상)의 옵션을 사용하여 그래프를 원하는대로 디자인 할 수도 있다. labs은 그래프의 축제목, 전체 제목을 붙일 수 있는 옵션인데, x='x축 라벨', y='y축라벨'의 형태로 사용하며, 전체 그래프의 제목은 title을 이용하여야 한다.
또한 산점도 그래프의 관측점마다 그룹으로 묶어 색상을 다르게 할 수도 있는데, 이때는 group과 colour라는 옵션을 geom_point가 아닌, ggplot틀에 같이 적어주어야한다.aes안에 group='그룹화 활 데이터값', colour=factor('그룹화할 데이터값')의 형식으로 넣어주어야하는데, group은 말그대로 데이터를 그룹화 시켜주는 옵션이고 colour의 경우에는 산점도 그래프에서 점,선등의 색상을 지정해주는 함수이다. 이렇게 지정한 후에, 알아서 색상이 들어가므로 따로 색상을 지정할 필요는 없으며, 필요에따라 geom_point에서 관측점의 크기를, labs에서 라벨의 이름들을 지정해줄 수있다. 만약, 색상에 대한 범례를 나타내고자 한다면, color='범례이름'을 지정해주면 된다.
paris
#변수들간의 상관관계 대략적으로 확인하기
#pairs(데이터 셋)
pairs(airquality)
산점도 그래프는 앞서 말했듯이, 데이터간의 상관관계가 있는지 없는지를 파악하기위한 용도로 주로 사용된다. 이때 그래프까지 만들필요는 없지만 그래도 데이터간의 상관관계를 확인하고싶다면 paris()함수에 전체 데이터를 인수로 주면 그 안에서 가능한 모든 관계에 대한 상관관계를 대략적으로 알 수 있다.
geom_line() : 꺾은선 그래프
#꺾은선 그래프 : geom_line()
ggplot(airquality,aes(x=Day,y=Temp))+
geom_line()
#기본적인 형태는이게 맞지만, 데이터 결과적으로는
#x값을 일별로 전부 계산한것이기때문에 무의미 한 상태
#월별로 꺾은선 그래프 그리기
ggplot(airquality,aes(x=Day,y=Temp,group=Month,colour=factor(Month)))+
geom_line()+
labs(color='Month')
꺾은선 그래프는 추이의 변화를 살펴볼때 주로 사용하는 그래프로 geom_line을 이용하여 그래프를 만든다. 똑같이 ggplot으로 x,y값을 주어 기본 틀을 만든 후 , +를 이용하여 geom_line을 연결해주면되는데, geom에서 주로 사용할 수 있는 옵션은 동일하게 color를 이용하여 선의색상을 변경할 수 있다. (현재 그래프는 데이터 결과적으로는 무의미한 상태)
꺾은선그래프도 그룹으로 묶어 만들 수 있는데, 위 쿼리에서는 월별로 꺾은선 그래프를 만들어 준것이다. 산점도 그래프와 동일하게 group과 colour를 사용하면 된다.(방법동일!)
geom_bar() : 막대그래프 / 누적막대 그래프
#막대그래프 : geom_bar()
#mtcars데이터 사용
#cyl종류별 빈도수 확인
mtcars
ggplot(mtcars,aes(x=(cyl)))+
geom_bar(width=0.2,fill='red')+
labs(x='cyl',y='빈도 수', title='실린더 별 빈도수')
#y값을 ggplot에서 정의하진 않았으나, 라벨명 적기 가능
#그래프에서 쓸모없는 값인 5,7이 같이 출력되는 이유는
#실린더의 개수를 범주형으로 변형하지 않았기 때문
#x축 값들을 범주형 변수로 처리하지 않을경우, 기본적으로 연속형 변수로 간주하기때문
#width : 막대 두께
#fill : 막대 색상
#쓸모없는값 빼기
ggplot(mtcars,aes(x=factor(cyl)))+
geom_bar(width=0.2,fill=c('skyblue','blue','purple'))+
labs(x='cyl',y='빈도수',title='실린더 별 빈도수')
#막대그래프마다 색상을 다르게 하고싶다면 fill에 벡터형태로 색상 전달
#이 경우, 막대그래프 개수와 색상개수를 맞춰주어야함
#막대별 색상구별 및 범례
ggplot(mtcars,aes(x=factor(cyl), fill=factor(cyl)))+
geom_bar(width=0.2)+
labs(fill='cyl')
막대그래프는 하나의 변수에 대해 빈도를 사용할때 주로 사용하는 그래프이다. 그렇기때문에 ggplot으로 그래프의 틀을 만들때 막대그래프를 사용할 예정이라면 x값만 기입해도 된다. 막대그래프는 geom_bar()를 사용하며, 이때 사용할 수 있는 옵션은 wdith(막대 두께)와 색상인데, 다른 그래프들과 다르게 막대그래프는 막대의 면적을 '채우다'에 초점이 맞춰져있어 color가 아닌 fill='색싱명'을 사용한다. 위의 쿼리문의 경우 mtcars데이터에서 실린더별 빈도수를 확인한것인데, 그래프에도 존재하지않는 값인, 5와7이 함께 출력됐다. 이 이유는 ggplot은 그래프를 만들때 값을 factor로 사용하여 값을 주지않으면 연속형 데이터로 자동으로 인지하는 경우가 있기때문에 이런 현상이 발생하는 것이다.
쓸모없는 값을 뺴고 원하는 값만 보고싶다면 ggplot에서 x값을 전달할때 factor의 형태로 값을 전달하면 이처럼 원하는 값만 범주형이 되어 출력된다. 또 역기서 모든 막대색상을 다르게 하고싶다면 fill에서 벡터형태로 색상을 전달해주면 되는데, 이때 전달하는 색상의 개수와 막대의 개수가 반드시 일치해야한다.
막대그래프도 마찬가지로 색상을 구별한 후 그 색상을 나타내는 범례를 사용할 수있는데, 이때 ggplot에서 fill=factor(x값과 동일한데이터)를 정의해주고, labs에서 fill='범례명'을 적어주면 된다.
누적막대 그래프
#누적 막대 그래프
#실린더 종류별 빈도파악하면서 실린더별로 gear의 개수(빈도)확인
ggplot(mtcars,aes(x=factor(cyl)))+
geom_bar(aes(fill=factor(gear)),width=0.5)+
labs(fill='실린더별 기어개수')
#geom_bar()안에 aes함수를 이요아여 누적할 열 지정
#누적 막대 그래프로 선버스트 차트 만들기
#선버스트 차트 : 계층구조의 데이터를 수준별로 비율을 표시하는 그래프
#coord_polar()추가
ggplot(mtcars,aes(x=factor(cyl)))+
geom_bar(aes(fill=factor(gear)))+
labs(fill='실린더별 기어개수')+
coord_polar()
#도넛형태 선버스트 차트
#coord_polar(theta='y')
ggplot(mtcars,aes(x=factor(cyl)))+
geom_bar(aes(fill=factor(gear)))+
labs(fill='실린더별 기어개수')+
coord_polar(theta='y')
일반 누적막대 그래프를 그리는 방법은 ggplot에 똑같이 데이터를 정의해주고 누적할 데이터를 geom_bar에서 aes를 사용하여 정의해주면 된다. 이때 x값이 아니라 fill의 형태로 정의해야하며, 똑같이 factor의 형태로 전달해야한다.
선버스트 차트는 계층구조의 데이터를 수준별로 비율을 표시해주는 그래프로, 동일하게 그래프를 만든 후에, 맨 마지막에 +를 사용하여 coord_polar()를 붙여 사용한다.
선버스트 차트에서 가운에 구멍이난, 도넛형태의 선버스트 차트로 만들고싶다면 똑같이 coor_polar()함수를 사용하는데, 그 안에 theta='y'옵션을 함께 사용하면 된다.
geom_boxplot() : 박스그래프
#box그래프 : geom_boxplot
#airquality데이터셋에서 월별로 기온보기
ggplot(airquality,aes(x=Month, y=Temp, group=Month))+
geom_boxplot()
박스그래프는 r에서 데이터분석을 할때 가장많이 사용되는 그래프로, 주로 이상치를 탐색할때 사용된다. 박스그래프에서 박스안의 굵은 선은 중앙값을 나타내고(2사분위수) 박스의 첫번째 줄은 1사분위(25%)를, 마지막줄은 3사분위수(75%)를 나타낸다. 또한 박스 위아래의 검은 점들이 이상치인데, 이상치는 데이터 분포에서 심하게 벗어난 극단의 데이터를 말한다. 이런 이상치들이 평균값과같은 데이터들에 극단적인 영향을 주기때문에 이렇게 박스그래프로 이상치들을 먼저 탐색하여 제거하거나 다른 데이터로 교체한 후 데이터분석을 해야한다.
geom_histogram() : 히스토그램 그래프
#히스토 그램 그래프 : geom_histogram()
#airquality 데이터셋에서 Temp(온도) 히스토그램 그래프그리기
ggplot(airquality,aes(x=Temp))+
geom_histogram(binwidth=0.5,fill='red')
#binwigth : 간격설정, 막대의 너비
히스토그램 그래프는 도수 분표를 기둥모양의 그래프로 표현한 그래프이며, 막대그래프와 사용법이 거의 동일하다. 히스토그램 그래프역시 y축을 따로 추가하지 않고 x축만 기입해도 되며, 막대그래프와 마찬가지로 fill로 색상을 조절할 수 있다. 다만 히스토그램에서 막대의 두께를 설정할때는 그냥 width가 아닌 binwidth를 사용해야한다.
두개의 그래프 동시에 사용하기(그래프에 그래프 더하기)
#그래프에 그래프 더하기(같은 영역에 그래프 여러개 작성)
ggplot(airquality,aes(x=Day,y=Temp))+
geom_line(color='red')+
geom_point(size=2,color='blue')
#한 그래프위에 꺾은선 그래프와 산점고 그래프 같이표시
#같이 사용하고싶은 그래프 +로 연결
여러개의 그래프를 하나의 그래프캔버스에 누적하여 한번에 출력하고싶을때 사용하는 방법이다. 똑같이 ggplot에 데이터의 틀을 만들어주고 사용하고싶은 데이터를 +로 결만 해주면된다. 위 그래프에서는 꺾은선 그래프와 산점도 그래프를 한꺼번에 같이 사용한 그래프의 형태이다.(데이터적으로는 큰 이미는 없는 그래프다)
gridExtra패키지 : 그래프 여러개 같이한번에 확인
#그래프 여러개 같이 한번에 확인
#gridExtra 패키지 사용
install.packages('gridExtar')
library(gridExtra)
g1 <- ggplot(airquality,aes(x=Day,y=Temp))+
geom_point()
g1 #산점도 그래프 변수안에 저장
g2 <- ggplot(airquality,aes(x=Day,y=Temp))+
geom_line()
g2#꺾은선 그래프 변수안에 저장
grid.arrange(g1,g2,ncol=2)
grid.arrange(g1,g2,nrow=2)
#arrange() : 그래프 출력시 배치에 사용
이번에는 두개의 그래프를 동시에 따로 출력하는 방법이다. 이때는 gridExtra패키지를 설치한 후 grid.arrange()함수를 사용하여야한다. 먼저 따로따로 그래프 쿼리를 변수에 저장한 후에, grid.arrange(그래프 변수1, 그래프 변수2)의 형태로 적어주어야한다.
이때 ncol=컬럼의 수, nrow=행의수 의 옵션을 함께 주어 원하는 형식으로 두개의 그래프를 배치해주면 된다.
ggplot2그래프 실습
#=========실습=========#
#diamonds데이터 사용
diamonds
#1)cut등급별로 막대그래프 그리기
g_bar <- ggplot(diamonds,aes(x=factor(cut),fill=factor(cut)))+
geom_bar(width=0.3)+
labs(fill='cut등급별 보석 개수',x='cut등급',y='개수',title='cut등급별 보석 개수')
g_bar
#2)carat과 price데이터로 산점도 그래프 그리기
# x: carat, y:price
g_point <- ggplot(diamonds,aes(x=carat, y=price,colour=factor(cut)))+
geom_point(size=2)+
labs(color='cut',title='carat과 price의 산점도',
x='carat',y='price')
g_point
#3)위에서 만든 그래프로 같은 영역에 표현
grid.arrange(g_bar,g_point,ncol=2)
학습일기
오늘은 r에서 데이터시각화를 할때 가장많이 사용되는 첫번째 패키지인 ggplot2와 그에따른 함수들을 학습했다. 확실히 시각화파트라 그런지 그래프가 눈에 바로바로보여서 다른파트들보다 유독 재밌게 느껴지긴한다..ㅎ 그리고 사실상 숫자 데이터 그 자체로는 큰의미가없기 때문에 그걸가지고 해석해서 원하는 정보를 출력해내는 과정이 중요한만큼 데이터 시각화파트는 중요할수밖에없는 파트이다. 아직 데이터시각화파트가 더 남았는데 시각화파트 전부 끝나면 공공데이터가지고 손에 익도록 더 연습해야겠다..!
'R분석' 카테고리의 다른 글
R복습_회귀분석 (1차 단순회귀분석, 다중회귀분석, 로지스틱 회귀분석) (1) | 2024.10.10 |
---|---|
R복습_데이터 시각화2_ (그래프에 회귀선그리기(단순회귀분석), 그래프 객체 추가,도형 및 화살표 추가) (0) | 2024.10.07 |
R복습_reshape2패키지와 함수(melt,cast,데이터구조 가공) (1) | 2024.10.06 |
R복습_stringr패키지와 함수(문자열 가공) (0) | 2024.10.05 |
R복습_dplyr패키지(추출및 정렬함수,통계요약함수,샘플데이터추출함수) (0) | 2024.10.04 |