R/강의복습

[22.08.22] 10일차 (인터랙티브 그래프 / 시계열 그래프 / 산포도 / 빈도수그래프)

peach_h 2022. 9. 3. 15:36
인터랙티브 그래프

브라우저로 볼 수 있는 움직이는 그래프

 

인터랙티브 그래프 그리기
# 11장 인터랙티브 그래프 : 브라우저로 볼 수 있는 그래프
install.packages("plotly")
library(plotly)
mpg <- ggplot2::mpg
p<- ggplot(data=mpg, aes(x=displ, y=hwy, col=drv)) +geom_point()

# plot(p)
ggplotly(p)

이렇게 브라우저로 그래프를 볼 수 있다.

 

다이아몬드 그래프 그리기
# plot(p)
ggplotly(p)

diamonds

p <- ggplot(data=diamonds, aes(x=cut, fill=clarity)) + geom_bar()
ggplotly(p)

바로 그리지 않고 p에 넣고 그리는 이유?

- ggplotly에 안넣고 바로 그리면, 브라우저가 안생긴다 !

 

 

p <- ggplot(data=diamonds, aes(x=cut, fill=clarity)) + geom_bar(position="dodge")
ggplotly(p)

position = "dodge" 를 추가하면 지정한 fill의 종류별로 그래프가 나눠져서 나온다!

 

 

 

산포도

데이터의 분산 상태를 나타내는 그래프

 

산포도 그리기
# 산포도(ScatterPlot)
# 정수로 숫자 나오게 하기
options(scipen=999)

# midwest 데이터 불러오기
midwest<-ggplot2::midwest

#테마 바꾸기 - 배경색
theme_set( theme_gray()) 

gg <- ggplot(midwest, aes(x=area, y=poptotal)) + 
    geom_point(aes(col=state, size=popdensity)) + 
      geom_smooth(method="loess", se=F) + 
      xlim(0, 0.1) + 
      ylim(0, 500000) +
      labs( subtitle="지역 대 인구", 
            y="인구",
            x="지역",
            title='산포도(ScatterPlot)',
            caption='Source:midwest')

ggplotly( gg )

ggplot2에 들어있는 midwest자료를 이용해 산포도를 그렸다.

지역에 인구수가 어떻게 분포해있는지 눈으로 확인할 수 있다.

 

 

 

  mpg 제조사 빈도수 차트 만들기
# 제조사 목록 가져오기
freqtable <- table(mpg$manufacturer)
freqtable

# 제조사 목록 데이터프레임으로 바꾸기
df <- as.data.frame.table(freqtable )
df

g <- ggplot(df, aes(x= Var1)) + 
  geom_bar(width=0.5, fill="magenta") +
  labs(title = "Bar Chart", subtitle="제조사") + 
  theme(axis.text.x=element_text(angle=65, vjust=0.6))

ggplotly(g)

6일차 수업 : https://peach-hzz.tistory.com/16

 

[22.08.16] 6일차 (ggplot, 산포도, 막대그래프, 선그래프, 데이터분석하기, 전처리)

☆ 오늘 강의 요악 ☆  ggplot 관련 함수 geom_col( ) : 막대그래프 / x축과 y축 지정 필수 geom_bar( ) : 빈도수 그래프 / y축 지정안해도 자동으로 빈도수로 지정됨. geom_line( ) : 선그래프 / 시간에 따른 데.

peach-hzz.tistory.com

6일차 수업을 떠올려보면 빈도수를 나타내는 그래프를 만들 때,

geom_bar()를 사용하고 y축을 지정하지 않으면 된다.

하지만 그렇게 했더니 빈도수가 모두 같은 그래프가 나와버렸다...

 

 

빈도수 그래프에서 y축 지정하기
g <- ggplot(df, aes(Var1, Freq)) + 
     geom_bar(stat="identity", width=0.5, fill="magenta") +
     labs(title = "Bar Chart", subtitle="제조사") + 
     theme(axis.text.x=element_text(angle=65, vjust=0.6))

ggplotly(g)

 

원하던대로 그래프가 나온 모습 !

geom_bar()에서 y축을 지정하고 싶을 때?

geom_bar(stat = "identity")를 써주고 y값을 지정해주면 된다!!

-> 막대 높이가  값이 지정한 y열의 값이 된다

참고한 블로그 : https://blog.naver.com/hiddenjgrace/222783751916

 

R ggplot 패키지를 활용한 시각화 소개 ①

안녕하세요? 히든그레이스 데이터분석팀입니다. 😊 오늘은 R의 ggplot 패키지를 활용한 시각화를 소개하...

blog.naver.com

 

 

 

 

 

penguins 자료 활용하기
pen<-palmerpenguins::penguins
head(pen)

펭귄은 내가 좋아하는 자료다 ! (내가 펭귄을 좋아하기 때문)

pen에 펭귄자료를 가져온다

 

 

qplot으로 간단한 산점도 그리기
gg <- qplot(bill_length_mm, body_mass_g, 
            data=pen, color=species)

ggplotly(gg)

펭귄의 몸 크기와 부리 길이에 대한 산포도

qplot은 ggplot에 비해 간단한 그래프를 그릴 수 있다.

data, x, y, color 값만 넣고 산점도를 그려보았다.

 

 

ggplot으로 산점도 그리기
gg <- ggplot(data=pen, aes(x=bill_length_mm, y=body_mass_g, 
            col=species)) + 
  geom_point()

ggplotly(gg)

같은 값을 넣고 그려 qplot과 ggplot의 결과가 똑같이 나왔다.

하지만 더 세세한 설정을 넣고 싶을 때 ggplot을 사용하면 된다 !

 

 

 

 

 

 

세계 지도 그리기
library(maps)
map('world')

이렇게 세계 지도를 가져올 수 있다.

 

 

par(mfrow=c(1,2))
map('usa')
map('state')

map에 나라를 지정하면, 그나라의 지도가 나온다.

state를 지정하면, 그 나라의 지역이 나눠진다.

 

 

par(mfrow=c(2,2))

map(region='canada')
map(region='japan')
map(region='south korea')
map(region='north korea')

이렇게 다양한 나라의 지도를 볼 수 있다 !

(왜이렇게 작게나오는지는 모르겠음)

 

 

 

캐나다 인구 분포도 그리기
head(canada.cities)

캐나다의 지역별 인구수와 지역의 위치를 알 수 있다.

이걸 활용해서 인구 분포도를 그려보자

 

 

gg <- ggplot(canada.cities, aes(long, lat)) + 
      borders(regions="canada") + 
      coord_equal() + 
      geom_point(aes(text=name, size=pop,
            colour='red', alpha=0.2)) 

ggplotly(gg)

* geom_point(alpha = 점의 투명도)

캐나다는 사람들이 아래쪽에 몰려사는 것 같다

 

 

 

 

mpg자료 활용하기
class와 hwy boxplot 그리기
g<-ggplot(mpg, aes(class, hwy)) + geom_boxplot(notch=T)
plot(g)
ggplotly(g)

 

비교적 간단하게 나오는 plot과 달리, ggplotly는 boxplot의 값까지 그래프로 알 수 있다.

 

 

g<-ggplot(mpg, aes(class, hwy)) + 
  geom_boxplot(notch=T, fill="blue")
  
  ggplotly(g)

geom_box(fill= "색") :  boxplot을 채울 색을 지정 할 수 있다 !

 

 

 

 

대륙별 인구 그래프 그리기
install.packages("gapminder")
remotes::install_github("thomasp85/gganimate@v0.1.1")

library(gapminder)  #대륙별 인구
library(gganimate)
library(dplyr)

head(gapminder::gapminder)

gapminder 자료를 사용했다.

대륙 별 인구와 년도별 기대수명을 알 수 있다.

 

 

대륙별 기대수명 분포도 그리기
# 가장 최근년도 가져오기
df1 <- gapminder %>% filter( year == max(year))
df1 

# 그래프 그리기
g<-ggplot(df1, aes(x=gdpPercap, y=lifeExp, 
          color=continent)) +
  geom_point() 

ggplotly(g)

확실히 아프리카 쪽의 기대수명이 낮은 것을 확인할 수 있다.

 

 

 

년도별 기대수명 분포도
g <- ggplot(gapminder, aes(gdpPercap, lifeExp, size=pop, frame=year)) +
     geom_point() +
     geom_smooth(aes(group=year), method="lm", show.legend=F) +
     facet_wrap(~continent, scale="free")

ggplotly(g)

face_wrap( ) : 하나의 데이터에서 그룹별로 쪼개서 그래프를 그릴 때 사용.

참고 블로그 : https://blog.naver.com/regenesis90/222203859357

 

[R] ggplot(), facet_wrap() (1) : 그래프 플롯 면분할, 하위 플롯에 데이터 각 서브셋 나누기, 그래프를

ggplot()을 사용하여 그래프를 그릴 때, 하나의 플롯을 여러개의 플롯으로 쪼개어 그룹별 그래프를 그려야 ...

blog.naver.com

여태 R하면서 한거중에 이게 제일 신기했다

play 누르면 년도별로 그래프가 샤라라라락 지나간다 !!

ggplot의 한계는 어디인가..

 

 

 

 

 

시계열 인터랙티브 그래프 그리기
economics 시계열 그래프 그리기
# 필요한 라이브러리 설치
install.packages("dygraphs")
library(dygraphs)
library(xts)

# economics 데이터 가져오기
economics <- ggplot2::economics
head(economics)
str(economics)

eco <- xts(economics$unemploy, order.by=economics$date)
head(eco)

시계열 그래프를 그리기 위해 xts로 데이터에서 날짜순으로 unemploy를 정렬해온다.

 

dygraph(eco) %>% dyRangeSelector()

시계열에 따라 데이터 값을 확인할 수 있다 !

아래 막대를 움직여 원하는 시기의 데이터를 확인 가능하다

 

 

저축율, 실업율 그래프 그리기
# 저축율 가져오기
eco_a <- xts(economics$psavert, order.by=economics$date)

# 실업율 가져오기
eco_b <-xts(economics$unemploy/1000, order.by=economics$date

# 두 데이터 합치기
eco2 <- cbind(eco_a, eco_b)

# 열 이름 바꾸기
colnames(eco2)<-c("저축율", "실업율")
head(eco2, 20)

# 그래프 그리기
dygraph(eco2) %>% dyRangeSelector()

그래프가 잘나왔다 !

 

시계열 그래프 참고 블로그 : https://blog.naver.com/regenesis90/222238348059

 

[R] dygraphs:: dygraph(), dyRangeSelector() : 시계열 인터랙티브 그래프,시계열 인디케이터 만들기(time-seri

dygraphs 패키지는 xts 패키지의 xts 객체를 사용하여 시계열 데이터를 인터랙티브 선 그래프로 나타내 주...

blog.naver.com

 

 

 

 

~ 오늘의 공부 후기 ~

인터랙티브 그래프가 그냥 그래프가 뭐가 다른지 몰랐는데 !
play 버튼을 누르거나, 아래 바를 움직이면서 유동적으로 움직이는 그래프를 보니 신기했다.
유용하게 사용할 수 있을 것 같다.
그리고 ggplot은 정~~말 다양한 명령어가 있는거 같다.
미리 공부해두면 그래프를 그릴때 아주 유용하게 사용할 수 있을 것 같다 !

※ 사용한 교재 : 쉽게 배우는 R 데이터 분석 / 저자 : 김영우