前言:
前两期的R爬虫&可视化专题中,与大家分别分享了关于电视台收视率以及诗词的爬取和可视化的内容,得到了大家许多的反馈,希望在今后的内容中能够不断提高。
第三期的专题中,会与大家聊聊非常火的股市,关于本期内容,引用一句非常经典的话“我们不生产数据,我们只是数据的搬运工”。影响股市大盘涨跌的因素非常多,到了个股走势就更加扑朔迷离,所谓“股市有风险,投资需谨慎”,本文只是与大家分享一些爬虫&可视化的内容,不能作为大家选股的依据。
相关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`)
因为本人并不炒股,对股市没有仔细的研究,所以本文只是做一些爬取&可视化的内容,希望对股票有深入研究的朋友能够与我交流,共同学习。
---------------------------------
如果大家周围有对数据分析&数据挖掘感兴趣的朋友,麻烦在朋友圈帮忙转发一下,让更多的朋友加入我们。有好的文章也可以联系我与大家分享,如果有问题或者建议,可以直接在公众号留言,我会及时回复大家的问题。
R爬虫&可视化专题往期文章: