Various Interactive Plots using Plotly Package (2)
Package
plotly
(Ver. 4.9.3)는 Interactive Graph를 생성할 수 있는 Package이다. 여기서 Interactive Graph란 마우스 움직임에 반응하며 실시간으로 형태가 변하는 그래프를 말한다. Interactive Graph를 생성하면 그래프를 자유롭게 조작하면서 관심 있는 부분을 자세히 살펴볼 수 있으며, HTML 포맷으로 저장하면 일반 사용자들도 웹 브라우저를 이용해 그래프를 조작할 수 있다.
pacman::p_load("plotly")
plotly
를 이용하여 Interactive Graph를 생성하기
위해 주식 데이터를 사용한다.quantmod
에서 제공하는 함수
getSymbols()
를 통해 불러올 수 있다.getSymbols()
의 첫 번째 인자로 주식 데이터를
가져오고자 하는 종목 코드 번호를 지정해야 하는데, 종목 코드 번호는 네이버 금융에서 쉽게 찾을 수 있다.
pacman::p_load("quantmod") # 주식 데이터 불러오는 Package
# 삼성성
samsung <- getSymbols("005930.KS", # 가져오고자 하는 종목 코드 번호, KOSPI는 뒤에 KS, KOSDAQ은 KQ from = "2018-01-01", # 주식 정보를 가져오고자 하는 시작 날짜
to = "2022-11-16", # 주식 정보를 가져오고자 하는 마지막 날짜날짜
auto.assign = FALSE) # 코드 번호("005930.KS") 객체에 데이터 저장할 것인지 여부NAcolnames(samsung) <- c("Open", # 시가가
"High", # 고가가
"Low", # 저가
"Close", # 종가가
"Volume", # 거래량래량
"Adjusted") # 수정율
head(samsung)
Open High Low Close Volume Adjusted
2018-01-02 51380 51400 50780 51020 8474250 44269.27
2018-01-03 52540 52560 51420 51620 10013500 44789.88
2018-01-04 52120 52180 50640 51080 11695450 44321.33
2018-01-05 51300 52120 51200 52120 9481150 45223.71
2018-01-08 52400 52520 51500 52020 8383650 45136.95
2018-01-09 51460 51720 49980 50400 18013600 43731.30
# 카카오
kakao <- getSymbols("035720.KS",
from = "2018-01-01",
to = "2022-11-16",
auto.assign = FALSE)
colnames(kakao) <- c("Open",
"High",
"Low",
"Close",
"Volume",
"Adjusted")
head(kakao)
Open High Low Close Volume Adjusted
2018-01-02 28205.90 29616.20 28105.17 29515.46 6680627 29427.17
2018-01-03 30321.35 30422.08 29313.99 30019.14 5729670 29929.34
2018-01-04 30724.29 32033.85 30119.88 31429.44 11242421 31335.41
2018-01-05 31630.91 31832.38 30623.55 31429.44 5297057 31335.41
2018-01-08 32336.05 32738.99 31832.38 32134.58 7829439 32038.45
2018-01-09 31832.38 32235.32 31127.23 31630.91 5017557 31536.28
# LG
lg <- getSymbols("003550.KS",
from = "2018-01-01",
to = "2022-11-16",
auto.assign = FALSE)
colnames(lg) <- c("Open",
"High",
"Low",
"Close",
"Volume",
"Adjusted")
head(lg)
Open High Low Close Volume Adjusted
2018-01-02 99716.21 100374.40 97851.33 99606.51 160040 88163.59
2018-01-03 98728.92 99825.91 98290.12 98728.92 217377 87386.82
2018-01-04 98948.32 99606.51 97083.44 97741.63 238149 86512.95
2018-01-05 97851.33 97851.33 96315.55 97412.53 237488 86221.65
2018-01-08 97851.33 99277.41 97412.53 98290.12 211137 86998.44
2018-01-09 98509.52 103994.46 98290.12 102678.08 382637 90882.29
getSymbols()
를 통해 불러온 주식 데이터의 데이터
유형은 “xts”로 시계열 구조이다.plotly
를 이용하여 주식 데이터를 시각화하기
위해서는 데이터 유형을 “data.frame”으로 변환해야 한다.# Data Frame 변환환
samsung <- samsung %>%
data.frame() %>% # Data Frame 변환환
mutate(Date = rownames(.)) %>% # Date 변수 생성생성
select(Date, everything()) # Date 변수 1열로 이동이동
head(samsung)
Date Open High Low Close Volume Adjusted
2018-01-02 2018-01-02 51380 51400 50780 51020 8474250 44269.27
2018-01-03 2018-01-03 52540 52560 51420 51620 10013500 44789.88
2018-01-04 2018-01-04 52120 52180 50640 51080 11695450 44321.33
2018-01-05 2018-01-05 51300 52120 51200 52120 9481150 45223.71
2018-01-08 2018-01-08 52400 52520 51500 52020 8383650 45136.95
2018-01-09 2018-01-09 51460 51720 49980 50400 18013600 43731.30
kakao <- kakao %>%
data.frame() %>%
mutate(Date = rownames(.)) %>%
select(Date, everything())
lg <- lg %>%
data.frame() %>%
mutate(Date = rownames(.)) %>%
select(Date, everything())
# 데이터 합치기NAdata <- rbind( cbind(samsung, Name = "samsung"),
cbind(kakao, Name = "kakao"),
cbind(lg, Name = "lg"))
head(data)
Date Open High Low Close Volume Adjusted
2018-01-02 2018-01-02 51380 51400 50780 51020 8474250 44269.27
2018-01-03 2018-01-03 52540 52560 51420 51620 10013500 44789.88
2018-01-04 2018-01-04 52120 52180 50640 51080 11695450 44321.33
2018-01-05 2018-01-05 51300 52120 51200 52120 9481150 45223.71
2018-01-08 2018-01-08 52400 52520 51500 52020 8383650 45136.95
2018-01-09 2018-01-09 51460 51720 49980 50400 18013600 43731.30
Name
2018-01-02 samsung
2018-01-03 samsung
2018-01-04 samsung
2018-01-05 samsung
2018-01-08 samsung
2018-01-09 samsung
# Line Plot with Three Stock Data
## Data 변환환
data1 <- data %>%
select(Date, Name, Close)
head(data1)
Date Name Close
2018-01-02 2018-01-02 samsung 51020
2018-01-03 2018-01-03 samsung 51620
2018-01-04 2018-01-04 samsung 51080
2018-01-05 2018-01-05 samsung 52120
2018-01-08 2018-01-08 samsung 52020
2018-01-09 2018-01-09 samsung 50400
data1 <- data1 %>%
tidyr::pivot_wider(names_from = "Name",
values_from = "Close") %>%
data.frame()
head(data1)
Date samsung kakao lg
1 2018-01-02 51020 29515.46 99606.51
2 2018-01-03 51620 30019.14 98728.92
3 2018-01-04 51080 31429.44 97741.63
4 2018-01-05 52120 31429.44 97412.53
5 2018-01-08 52020 32134.58 98290.12
6 2018-01-09 50400 31630.91 102678.08
plot_ly(data1, type = 'scatter', mode = 'lines') %>%
add_trace(x = ~Date, # X축 y = ~samsung, # Y축 name = 'Samsung', # 이름
line = list(color = 'rgb(22, 96, 167)') )%>% # 선 색깔
add_trace(x = ~Date,
y = ~kakao,
name = 'Kakao',
line = list(color = 'rbg(22, 167, 82)') ) %>%
add_trace(x = ~Date,
y = ~lg,
name = 'LG',
line = list(color = 'rgb(153, 22, 167)') ) %>%
layout(yaxis = list(title = "Close")) # Y축 이름
plot_ly(data1, type = 'scatter', mode = 'lines') %>%
add_trace(x = ~Date, # X축 y = ~samsung, # Y축 name = 'Samsung', # 이름
line = list(color = 'rgb(22, 96, 167)') ) %>% # 선 색깔
add_trace(x = ~Date,
y = ~kakao,
name = 'Kakao',
line = list(color = 'rbg(22, 167, 82') ) %>%
add_trace(x = ~Date,
y = ~lg,
name = 'LG',
line = list(color = 'rgb(153, 22, 167)') ) %>%
layout(yaxis = list(title = "Close"), # Y축 이름 xaxis = list(rangeslider = list(type = "date"))) # Add Slider
plot_ly(samsung, type = 'candlestick') %>%
add_trace(x = ~Date,
open = ~Open, close = ~Close,
high = ~High, low = ~Low) %>%
layout(showlegend = FALSE)
plot_ly(samsung, type = 'candlestick') %>%
add_trace(x = ~Date,
open = ~Open, close = ~Close,
high = ~High, low = ~Low,
increasing = list(line = list(color = 'red')), # 증가할 때 색깔
decreasing = list(line = list(color = 'blue'))) %>% # 감소할 때 색깔깔
add_lines(x = ~Date, y = ~Close, # 선 추가가
line = list(color = 'black', width = 0.75)) %>%
layout(showlegend = FALSE)
# Bar Plot with Three Stock Data
## Data 변환환
data2 <- data %>%
select(Date, Name, Volume)
head(data2)
Date Name Volume
2018-01-02 2018-01-02 samsung 8474250
2018-01-03 2018-01-03 samsung 10013500
2018-01-04 2018-01-04 samsung 11695450
2018-01-05 2018-01-05 samsung 9481150
2018-01-08 2018-01-08 samsung 8383650
2018-01-09 2018-01-09 samsung 18013600
data2 <- data2 %>%
tidyr::pivot_wider(names_from = "Name",
values_from = "Volume") %>%
data.frame()
head(data2)
Date samsung kakao lg
1 2018-01-02 8474250 6680627 160040
2 2018-01-03 10013500 5729670 217377
3 2018-01-04 11695450 11242421 238149
4 2018-01-05 9481150 5297057 237488
5 2018-01-08 8383650 7829439 211137
6 2018-01-09 18013600 5017557 382637
plot_ly(data2, type = "bar") %>%
add_trace(x = ~Date,
y = ~samsung,
name = "Samsung",
marker = list(color = 'rgb(22, 96, 167)')) %>%
add_trace(x = ~Date,
y = ~kakao,
name = "Kakao",
marker = list(color = 'rbg(22, 167, 82)')) %>%
add_trace(x = ~Date,
y = ~lg,
name = "LG",
marker = list(color = 'rgb(153, 22, 167)')) %>%
layout(xaxis = list(rangeslider = list(type = "date")),
yaxis = list(title = "Volume")) # Y축 이름
Name Volume
2022-11-16 samsung 12909260
2022-11-161 kakao 2451864
2022-11-162 lg 237822
plot_ly(data3, labels = ~Name, values = ~Volume, type = 'pie') %>%
layout(showlegend = FALSE,
title = "Volume at 2022-11-16") # Title
plot_ly(data3, labels = ~Name, values = ~Volume, type = 'pie',
textposition = 'inside', # 글자 위치 textinfo = 'label+percent', # 글자 타입NA= list(color = '#FFFFFF'), # 글자 색깔 marker = list(colors = c('rgb(211,94,96)', 'rgb(128,133,133)', 'rgb(144,103,167)')) # 파이 색깔NA) %>%
layout(showlegend = FALSE,
title = "Volume at 2022-11-16")
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".