rvestを使って、東証時価総額上位銘柄を可視化
Japan.Rで「Rでスクレイピングするなら、rvestがいいよ」ということを聞いて、やってみた記録になります。
時価総額上位:株式ランキング - Yahoo!ファイナンスからrvestで情報を取得して、良い感じに可視化してみます。
一度に上位100銘柄を表示するようなGETパラメータを見つけられなかったので、50銘柄づつスクレイプします。
library(rvest) ranking.HTML <- list() ranking.tables <- list() for (i in 1:2) { ranking.URL <- paste0("http://info.finance.yahoo.co.jp/ranking/?kd=4&tm=d&vl=a&mk=1&p=", i) ranking.HTML[[i]] <- html(ranking.URL) ranking.tables[[i]] <- ranking.HTML[[i]] %>% html_table() }
分析中に何度もスクレイプすると良くないので、ranking.HTMLに一旦ページの情報をとっておきます。
ページの情報からhtml_nodes("td.txtright.bgyellow01") %>% html_text()のようにしても時価総額は取れますが、ここでは、html_tableを使って、表部分をデータフレームとして取ってきます。
ここから、証券コードと時価総額の値を取り出します。データフレームの51行目と時価総額の値の「,」が不要なので、取り除いておきます。
stock.code <- NULL market.value <- NULL for (i in 1:2) { stock.code <- c(stock.code, as.vector(ranking.tables[[i]][[1]][-51, "コード"])) market.value <- c(market.value, as.vector(ranking.tables[[i]][[1]][-51, "時価総額(百万円)"])) %>% gsub(",", "", .) %>% as.numeric() }
そして、ggplot2で可視化します。
library(ggplot2) library(ggthemes) qplot(stock.code, market.value / 1e+06, geom = "bar", stat = "identity") + theme_economist() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + ggtitle("Market Cap Top 100 (Tokyo Stock Exchange)") + ylab("market cap (trillion)") + scale_y_continuous(breaks = seq(0, 25, by = 5))
2014年12月29日の市場終了時点での実行例
トヨタが約26兆円で圧倒的に時価総額が大きく、次にメガバンクやソフトバンク等の通信会社が続きます。証券コードがちょっと見にくいですが、良い感じに可視化できました。