今天有同学应急找我帮忙用R语言做一个股票价格数据集分析,于是有了本文:如果使用R语言处理股票数据?
题目
了解你的数据。
分析 Data.csv 文档中的数据,包括各个变量的基本统计量,分布情况(直方图)等。报告分成两部分:1. 统计结果分析讨论;2. R 代码。(不超过 3 页)
数据预处理
缺失值检验
首先通过read.csv导入数据集,接着进行缺失值检验及筛选有缺失值的行。
#导入数据集
library(e1071)
data=read.csv("/Users/fubo/Desktop/data.csv",fileEncoding="UTF-8-BOM",check.names=F)
#缺失值检验及筛选有缺失值的行
sum(is.na(data))
data[!complete.cases(data),]
输出结果如下,可以看到该数据集没有缺失值
> sum(is.na(data))
[1] 0
> data[!complete.cases(data),]
[1] time
[2] 沪深300
[3] 中证500
[4] 创业板指
[5] 万得全A
[6] 中债-国债总财富(3-5年)指数
[7] 中债-信用债总财富(1-3年)指数
[8] 中债-10年期国债财富(总值)指数
<0 行> (或0-长度的row.names)
异常值检验
通过箱形图对基金数据进行异常值检验。
#异常值检验
boxplot(data沪深300)
boxplot(data中证500)
boxplot(data创业板指)
boxplot(data万得全A)
boxplot(data`中债-国债总财富(3-5年)指数`)
boxplot(data`中债-信用债总财富(1-3年)指数`)
boxplot(data$`中债-10年期国债财富(总值)指数`)
从结果可以看出,沪深300、中证500和创业板指出现了异常值(其他基金无异常值问题),因此进行进一步分析。
这三只基金均有一个异常值偏离其他的观测值,因为该异常值都为最大值,因此可以认为是合理的数值,故不做处理。
另外,可以观察到创业板指的股票价格最小值为0,查阅资料后得知是因为创业板指于2010年6月1日才正式发布,因而在后续的数据处理中要对创业板指数进行处理,除去值为0的数据。
数据基本统计量
以沪深300为例,计算数据基本统计量的代码如下:
# 沪深300 基本统计量
summary(data沪深300)
var(data沪深300)
sd(data沪深300)
skewness(data沪深300)
kurtosis(data沪深300)
data[data沪深300==max(data沪深300),1:2]
data[data沪深300==min(data$沪深300),1:2]
结果如下表所示:
均值 | 中位数 | 方差 | 标准差 | 偏度 | 峰度 | 最大值 对应时刻 | 最小值 对应时刻 | |
---|---|---|---|---|---|---|---|---|
沪深300 | 3271 | 3279 | 534891.8 | 731.36 | 0.45 | -0.22 | 5479.77 2021/1/31 0:00 | 2147.07 2014/3/31 0:00 |
中证500 | 5149 | 5005 | 1722831 | 1312.57 | 0.75 | 1.14 | 10540.52 2015/6/30 0:00 | 3044.99 2012/11/30 0:00 |
创业板指 | 1535 | 1510 | 477249.1 | 690.83 | 0.19 | -0.01 | 3558.99 2015/6/30 0:00 | 0 2010/5/31前 |
万得全A | 3497 | 3675 | 1106952 | 1052.12 | 0.27 | -0.95 | 6602.02 2015/6/30 0:00 | 2013.55 2012/11/30 0:00 |
中债-国债总财富(3-5年)指数 | 157.1 | 157.6 | 334.17 | 18.28 | 0.24 | -1.19 | 192.72 2020/5/31 0:00 | 130.29 2010/1/31 0:00 |
中债-信用债总财富(1-3年)指数 | 146.7 | 147.5 | 543.43 | 23.31 | 0.15 | -1.26 | 187.47 2021/1/31 0:00 | 112.2 2010/1/31 0:00 |
中债-10年期国债财富(总值)指数 | 143.4 | 143.1 | 330.54 | 18.18 | 0.2 | -1.22 | 178.26 2020/4/30 0:00 | 115.87 2010/1/31 0:00 |
从中,可以看出:
- 万得全A的标准差最大,说明万得全A过去11年股票价格的变动幅度很大,风险最高;中债-10年期国债的标准差最小,说明该基金过去11年股票价格的变动幅度较小,风险最低。
-
只有中证500的峰度大于0,相比于正态分布要更陡峭或尾部更厚;其他的基金相比于正态分布更平缓或尾部更薄。
-
所有基金的偏度都大于0,说明数据均值左侧的离散度比右侧弱,右偏。
-
沪深300、中债-国债总财富(3-5年)指数的最大值都出现在2021/1/31 0:00,因为数据截至2021/1/31 0:00,可能这两个指数还在持续增长。中证500、创业板指、万得全A的最大值都出现在2015/6/30 0:00。
-
中债-国债总财富(3-5年)指数、中债-信用债总财富(1-3年)指数、中债-10年期国债财富(总值)指数的最小值都出现在2010/1/31 0:00,因为数据起始2010/1/31 0:00,可能这三个指数的最小值比这几个值还小。
接着,选择沪深300和创业板指进行直方图的分析。
# 沪深300的频数直方图
hist(data沪深300,
labels=TRUE,col="cornflowerblue")
# 创业板指的核密度图和正态分布曲线
hist(data创业板指,freq=F,col="cornflowerblue")
lines(density(data创业板指),col = "blue")
x = 0:3600
lines(x, dnorm(x, mean(data创业板指), sd(data$创业板指)), col = "red")
legend("topright", inset=0.001,
legend=c("核密度估计","正态分布"),
lty=c(1,1),
col=c("blue","red"))
- 由沪深300的频数直方图可以看到,沪深300指数大多分布在区间2000-4000之间,分布在3000-3500的最多。
- 由创业板指的核密度图和正态分布曲线可以看到,创业板指的分布不属于正态分布,且正如峰度值-0.01显示的那样,比较接近正态分布曲线,其尾部更薄。
走势图
从下走势图可以看出,沪深300、中证500、创业板指和万得全A的股票价格走势震荡幅度比较大。
plot(data沪深300~
as.Date(datatime,"%Y/%m/%d %H:%M"),
type="l",
xlab="Time",ylab="Price",
main="Time trend",
ylim=c(0,11000),
col="green"
)
lines(data中证500~
as.Date(datatime,"%Y/%m/%d %H:%M"),
col="blue")
lines(data[data创业板指>50,"创业板指"]~
as.Date(data[data创业板指>50,"time"],
"%Y/%m/%d %H:%M"),
col="red")
lines(data万得全A~
as.Date(datatime,"%Y/%m/%d %H:%M"),
col="gray")
legend("topleft", inset=0.05,legend=c("沪深300","中证500","创业板指","万得全A"),lty=c(1,1,1,1),
col=c("green","blue","red","gray"))
- 在2011-2012年沪深300走势呈现小幅度上升后急剧下降的状况。
- 在2015年中期,这四只基金的价格陡然上升,而后又急剧下降,中证500最为明显,从2015年初期的5500上升至10000,增幅高达80%,从2015年中期的10000下降至8000,跌幅达20%,波动幅度很大。
- 在2016年初期,这四只基金的价格都有不同程度的上涨与下跌。
- 2019年开始,这四只基金缓慢上升。
从下走势图可以看出,中债的三个基金的总财富指数基本呈稳步上升的趋势。
- 在2013-2014年10年期国债经历了将近8%的跌幅,在2017-2018年10年期国债经历了将近6%的跌幅。
- 国债(3-5年)和信用债(1-3年)的总财富指数在2010-2018年间有几次波动幅度比较小的下跌。
- 这三个基金的总财富指数在2018-2020年持续上升,且幅度较大,在2020年中期都有不同程度的下跌。
全部代码
#导入数据集
library(e1071)
data=read.csv("/Users/fubo/Desktop/data.csv",fileEncoding="UTF-8-BOM",check.names=F)
#缺失值检验及筛选有缺失值的行
sum(is.na(data))
data[!complete.cases(data),]
#异常值检验
boxplot(data沪深300)
boxplot(data中证500)
boxplot(data创业板指)
boxplot(data万得全A)
boxplot(data`中债-国债总财富(3-5年)指数`)
boxplot(data`中债-信用债总财富(1-3年)指数`)
boxplot(data`中债-10年期国债财富(总值)指数`)
# 沪深300 基本统计量
summary(data沪深300)
var(data沪深300)
sd(data沪深300)
skewness(data沪深300)
kurtosis(data沪深300)
data[data沪深300==max(data沪深300),1:2]
data[data沪深300==min(data沪深300),1:2]
library(showtext) #安装此包前需要在mac中安装XQuartz
showtext_auto()
# 沪深300的频数直方图
hist(data沪深300,
labels=TRUE,col="cornflowerblue")
# 创业板指的核密度图和正态分布曲线
hist(data创业板指,freq=F,col="cornflowerblue")
lines(density(data创业板指),col = "blue")
x = 0:3600
lines(x, dnorm(x, mean(data创业板指), sd(data创业板指)), col = "red")
legend("topright", inset=0.001,
legend=c("核密度估计","正态分布"),
lty=c(1,1), col=c("blue","red"))
#沪深300、中证500、创业板指和万得全A股票价格走势
plot(data沪深300~
as.Date(datatime,"%Y/%m/%d %H:%M"),
type="l",
xlab="Time",ylab="Price",
main="Time trend",
ylim=c(0,11000),
col="green"
)
lines(data中证500~
as.Date(datatime,"%Y/%m/%d %H:%M"),
col="blue")
na.omit(data创业板指)
lines(data[data创业板指>50,"创业板指"]~
as.Date(data[data创业板指>50,"time"],
"%Y/%m/%d %H:%M"),
col="red")
lines(data万得全A~
as.Date(datatime,"%Y/%m/%d %H:%M"),
col="gray")
legend("topleft", inset=0.05,legend=c("沪深300","中证500","创业板指","万得全A"),lty=c(1,1,1,1),
col=c("green","blue","red","gray"))
# 中债的三个基金
plot(data"中债-国债总财富(3-5年)指数"~
as.Date(datatime,"%Y/%m/%d %H:%M"),
type="l",
xlab="Time",ylab="Price",
main="Time trend of 中债总财富指数",
ylim=c(100,200),
col="green"
)
lines(data"中债-信用债总财富(1-3年)指数"~
as.Date(datatime,"%Y/%m/%d %H:%M"),
col="blue")
lines(data"中债-10年期国债财富(总值)指数"~
as.Date(datatime,"%Y/%m/%d %H:%M"),
col="red")
legend("topleft", inset=0.05,legend=c("国债(3-5年)","信用债(1-3年)","10年期国债"),lty=c(1,1,1),
col=c("green","blue","red"))