trelliscope
한국거래소 KRX에서 통계 → 주식 → 종목시세 → [81004] 전체 종목시세에서 81004 전체 종목시세에서 한국거래소에서 거래되고 있는 상장사 목록 및 시가총액 데이터를 구할 수 있다. 1월 3일 다운로드 받은 데이터를 바탕으로 시가총액기준으로 상위 200개 종목을 뽑아내어 별도 데이터프레임으로 저장한다.
library(tidyverse)
library(readxl)
library(quantmod)
kospi50_dat <- read_excel("data/KRX-상장사-20190111.xlsx", sheet="KOSPI") %>%
mutate(`거래소` = "코스피",
`시가총액` = parse_number(`시가총액`)) %>%
mutate(stock_code = paste0(`종목코드`, ".KS")) %>%
top_n(50, wt=`시가총액`)
시가총액 상위 200개 업체를 뽑아낸 후에 종목코드를 기준으로 주식데이터를 quantmod
팩키지를 사용해서 데이터를 가져오는 대신 상위 50개 종목만 추출하여 데이터를 가져온다.
library(quantmod)
## 상위 50 주식 데이터 가져오기 -----
kospi50_df <- kospi50_dat %>%
select(stock_code, `종목코드`, `종목명`, `시가총액`) %>%
mutate(stock_data = map(stock_code, function(x) getSymbols(x, src="yahoo", from="2015-01-01",
auto.assign = FALSE, USE.NAMES = FALSE,
simplify = FALSE)))
## 변수명 통일 -----
for(i in 1:nrow(kospi50_df)) {
names(kospi50_df$stock_data[[i]]) <- c("open", "high", "low", "close", "volume", "adjust")
}
kospi50_df %>% write_rds("data/kospi50_df.rds")
무명함수를 사용해서 기본적인 통계량을 각 종목별로 작업을 수행할 수 있다.
kospi50_df <- read_rds("data/kospi50_df.rds")
kospi50_df %>%
arrange(desc(`시가총액`)) %>%
mutate(close_max_price = map_dbl(stock_data, function(x) max(x$close)),
close_min_price = map_dbl(stock_data, function(x) min(x$close)))
# A tibble: 50 x 7
stock_code 종목코드 종목명 시가총액 stock_data close_max_price
<chr> <chr> <chr> <dbl> <list> <dbl>
1 005930.KS 005930 삼성전자… 2.42e14 <S3: xts> 57220
2 000660.KS 000660 SK하이닉… 4.74e13 <S3: xts> 95300
3 005935.KS 005935 삼성전자우… 2.72e13 <S3: xts> 46700
4 068270.KS 068270 셀트리온… 2.72e13 <S3: xts> 366176
5 005380.KS 005380 현대차 2.63e13 <S3: xts> 184000
6 207940.KS 207940 삼성바이오… 2.62e13 <S3: xts> 584000
7 051910.KS 051910 LG화학 2.46e13 <S3: xts> 441500
8 005490.KS 005490 POSCO 2.23e13 <S3: xts> 395000
9 015760.KS 015760 한국전력… 2.23e13 <S3: xts> 63000
10 035420.KS 035420 NAVER 2.16e13 <S3: xts> 192000
# … with 40 more rows, and 1 more variable: close_min_price <dbl>
무명함수를 사용해서 기본적인 통계량을 각 종목별로 작업을 수행할 수 있다.
xts
→ 데이터프레임plotly
를 사용해서 시각화를 하려면 quantmod
를 통해 다운로드 받은 xts
데이터를 데이터프레임으로 변환시킨다.
kospi50_df <- read_rds("data/kospi50_df.rds")
options(encoding = "utf-8")
library(trelliscopejs)
library(plotly)
kospi50_df <- kospi50_df %>%
mutate(stock_df = map(stock_data, ~ data.frame(date=index(.x), coredata(.x))))
map_plot
시각화 객체 생성plot_ly()
함수를 간결하게 OHLC
를 시각화할 수 있도록 ohlc_plot()
사용자 정의 함수를 생성하고 이를 map_plot()
을 전달한다.
ohlc_plot <- function(df) {
plot_ly(df, x = ~date, type = "ohlc",
open = ~open, close = ~close,
high = ~high, low = ~low)
}
kospi50_plot_df <- kospi50_df %>%
mutate(panel = map_plot(stock_df, ohlc_plot))
trelliscopeJS
시각화마지막으로 trelliscope()
함수로 시각화한다.
trelliscope(kospi50_plot_df,
name = "ohlc", nrow = 2, ncol = 3,
state = list(labels = c("종목명", "종목코드")),
path="finance-trelliscope-advanced_files")