【数据分析】如何使用R语言处理股票数据并进行可视化?

今天有同学应急找我帮忙用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的数据。

image-20220609185024701

数据基本统计量

以沪深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的最多。

image-20220609191034116

  • 由创业板指的核密度图和正态分布曲线可以看到,创业板指的分布不属于正态分布,且正如峰度值-0.01显示的那样,比较接近正态分布曲线,其尾部更薄。

image-20220609191048728

走势图

从下走势图可以看出,沪深300、中证500、创业板指和万得全A的股票价格走势震荡幅度比较大。

plot(data$沪深300~
as.Date(data$time,"%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(data$time,"%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(data$time,"%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"))

image-20220609191748956

  • 在2011-2012年沪深300走势呈现小幅度上升后急剧下降的状况。
  • 在2015年中期,这四只基金的价格陡然上升,而后又急剧下降,中证500最为明显,从2015年初期的5500上升至10000,增幅高达80%,从2015年中期的10000下降至8000,跌幅达20%,波动幅度很大。
  • 在2016年初期,这四只基金的价格都有不同程度的上涨与下跌。
  • 2019年开始,这四只基金缓慢上升。

从下走势图可以看出,中债的三个基金的总财富指数基本呈稳步上升的趋势。

image-20220609191805667

  • 在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(data$time,"%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(data$time,"%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(data$time,"%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(data$time,"%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(data$time,"%Y/%m/%d %H:%M"),
      col="blue")
lines(data$"中债-10年期国债财富(总值)指数"~
        as.Date(data$time,"%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"))


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇