同花顺股票分数可视化 | R爬虫&可视化第3季
作者:徐麟,数据分析师,就职于上海唯品会。热爱数据挖掘和分析,喜欢用R、Python玩点不一样的数据。个人公众号:数据森麟(微信ID:shujusenlin)
往期回顾:
前言
前两期的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 R语言快速入门免费视频
回复 统计 统计方法及其在R中的实现
回复 用户画像 民生银行客户画像搭建与应用
回复 大数据 大数据系列免费视频教程
回复 可视化 利用R语言做数据可视化
回复 数据挖掘 数据挖掘算法原理解释与应用
回复 机器学习 R&Python机器学习入门