R爬蟲&可視化第3季-同花順股票分數可視化
來自專欄數據森麟7 人贊了文章
前言:
前兩期的R爬蟲&可視化專題中,與大家分別分享了關於電視台收視率以及詩詞的爬取和可視化的內容,得到了大家許多的反饋,希望在今後的內容中能夠不斷提高。
第三期的專題中,會與大家聊聊非常火的股市,關於本期內容,引用一句非常經典的話「我們不生產數據,我們只是數據的搬運工」。影響股市大盤漲跌的因素非常多,到了個股走勢就更加撲朔迷離,所謂「股市有風險,投資需謹慎」,本文只是與大家分享一些爬蟲&可視化的內容,不能作為大家選股的依據。
部分篇章代碼量較多,可能無法在正文中全部給出,之後會在公眾號中給出代碼的下載地址,感興趣的朋友歡迎關注我的個人公眾號:數據森麟(id:shujusenlin)
相關Package:
## 字元串處理、匯總數據library(plyr)library(stringr)library(sqldf)## 爬蟲相關library(RCurl)library(XML)## 讀取數據library(data.table)## 數據可視化library(ggplot2)library(ggthemes)library(ggradar)## markdown 文件生成library(knitr)library(rmarkdown)
爬取數據:
我們爬取了同花順當天對股票的打分,同花順作為一個專業機構,每天對於個股都會有技術面、資金面、消息面、行業面、基本面等五個方面的打分。我們會分別爬取這五部分的分數,並計算其總分。
爬取代碼如下:
url <- paste(http://doctor.10jqka.com.cn/,substr(point$rcode[i],1,6),/,sep=)temp <- getURL(url,.encoding=utf-8)doc <-htmlParse(temp)points <- getNodeSet(doc,//div[@class="chart_base"]/ div[@class="column_3d"]/div[@class="label"])points <- sapply(points,xmlValue)point$technical[i] <- as.numeric(substr(points[1],1,3))point$funds[i] <- as.numeric(substr(points[2],1,3))point$message[i] <- as.numeric(substr(points[3],1,3))point$trade[i] <- as.numeric(substr(points[4],1,3))point$basic[i] <- as.numeric(substr(points[5],1,3))point$level[i] <-sapply(getNodeSet(doc,//span[@class="cur"]),xmlValue)
數據展示:
首先看一下各主要行業分數的盒型圖:
ggplot(data=point_total,aes(x=area,y=total_num))+geom_boxplot()+ theme_economist()+ggtitle("主要行業得分分布圖")+ theme(axis.text.x = element_text(size=7.85), plot.title = element_text(hjust=0.5,size=25))
針對某一行業,我們選擇其中一部分對比其雷達圖:
p <- ggradar(plot.data = subset(point_total,select=c(name,技術面,資金面,消息面,行業面,基本面))[1:5,],grid.max=10,grid.mid=5, legend.text.size=7,background.circle.transparency = 0)+ theme_wsj()+theme(panel.grid = element_blank(), axis.line = element_blank(), axis.text = element_blank())print(p)
MARKDOWN輸出:
下面我們用RMarkdown實現將多隻股票的分數變化面積圖批量輸出的功能:
```{r pressure, echo=FALSE,fig.width_=15,fig.height=5}library(reshape2)library(ggplot2)library(ggthemes)library(stringr)point_total <- read.csv(D:/index/point_total.csv, header = TRUE)point_total$name <- gsub(" ","",point_total$name)point_total <- subset(point_total,name %in% c( ****,****,****,****,****,****,****))point_total$dt <- substr(point_total$dt,1,5)index_name <- unique(point_total$name)for(i in 1:length(index_name)){ point = subset(point_total,name == index_name[i]) print(gsub(" ","",as.character(index_name[i]))) names(point)[2:6] <- c(技術面,資金面,消息面,行業面,基本面) point$sum_point <- apply(point[,2:6],1,sum) point$com1 <- paste(point$sum_point,sep=) point$com2 <- paste(point$paiming,sep=) point_view <- melt(point[,c(2:6,9)],id.vars = dt,variable.name = 分面) p <- ggplot()+geom_area(aes(x=dt,y=value,fill=分面,group=分面), data=point_view)+ geom_text(aes(x=dt,y=sum_point+2,label=com2),data=point,size=4)+ geom_text(aes(x=dt,y=sum_point+4,label=com1),data=point,size=4)+ theme_wsj()+theme( panel.grid.major = element_blank() ) print(p)}```
輸出效果如下:
R針對股票可以做更加細緻的分析,如quantmod包可以直接獲得股票的每日收盤價等重要信息。比如如下兩行代碼就可以畫出讓人望塵莫及,買1手都要斥巨資的貴州茅台的K線圖(需要注意的是R中使用的是美股K線圖,紅綠表示與A股相反)
getSymbols("600519.ss",src="yahoo",from="2017-01-01", to=2017-10-30) chartSeries(`600519.SS`)
因為本人並不炒股,對股市沒有仔細的研究,所以本文只是做一些爬取&可視化的內容,希望對股票有深入研究的朋友能夠與我交流,共同學習。
推薦閱讀:
※錯誤反思
※MACD頂底背離戰法 ,學會一次收穫一次
※什麼樣的股票能漲
※通信行業個股分析-天孚通信300394:「吃大戶」過舒服日子的時代過去了
※瀚藍環境分析