Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于R语言股票市场收益的统计可视化分析|附代码数据

基于R语言股票市场收益的统计可视化分析|附代码数据

原创
作者头像
拓端
发布于 2023-07-21 04:11:40
发布于 2023-07-21 04:11:40
33600
代码可运行
举报
文章被收录于专栏:拓端tecdat拓端tecdat
运行总次数:0
代码可运行

全文链接:http://tecdat.cn/?p=16453 

最近我们被客户要求撰写关于股票市场的研究报告,包括一些图形和统计输出。

金融市场上最重要的任务之一就是分析各种投资的历史收益

要执行此分析,我们需要资产的历史数据。数据提供者很多,有些是免费的,大多数是付费的。在本文中,我们将使用Yahoo金融网站上的数据。

在这篇文章中,我们将:

  1. 下载收盘价
  2. 计算收益率
  3. 计算收益的均值和标准差

让我们先加载库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyquant)library(timetk)

我们将获得Netflix价格的收盘价。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
netflix <- tq_get("NFLX",                    

                  from = '2009-01-01',

                  to = "2018-03-01",

                  get = "stock.prices")

接下来,我们将绘制Netflix的调整后收盘价。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
netflix %>%

  ggplot(aes(x = date, y = adjusted)) +

  geom_line() +

  ggtitle("Netflix since 2009") +

  labs(x = "Date", "Price") +

  scale_x_date(date_breaks = "years", date_labels = "%Y") +

  labs(x = "Date", y = "Adjusted Price") +

  theme_bw()

计算单个股票的每日和每月收益率

一旦我们从Yahoo Finance下载了收盘价,下一步便是计算收益。我们将再次使用tidyquant包进行计算。我们已经在上面下载了Netflix的价格数据,如果您还没有下载,请参见上面的部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算每日收益netflix_daily_returns <- netflix %>%

  tq_transmute(select = adjusted,          这指定要选择的列

               mutate_fun = periodReturn,   # 这指定如何处理该列               period = "daily",      # 此参数计算每日收益               col_rename = "nflx_returns") # 重命名列#计算每月收益netflix_monthly_returns <- netflix %>%

  tq_transmute(select = adjusted,

               mutate_fun = periodReturn,

               period = "monthly",      # 此参数计算每月收益               col_rename = "nflx_returns")

绘制Netflix的每日和每月收益图表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 我们将使用折线图获取每日收益



 

  ggplot(aes(x = date, y = nflx_returns)) +

  geom_line() +

  theme_classic() +

查看Netflix的每日收益图表后,我们可以得出结论,收益波动很大,并且股票在任何一天都可以波动+/- 5%。为了了解收益率的分布,我们可以绘制直方图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
netflix_daily_returns %>%

  ggplot(aes(x = nflx_returns)) +

  geom_histogram(binwidth = 0.015) +

  theme_classic() +

接下来,我们可以绘制自2009年以来Netflix的月度收益率。我们使用条形图来绘制数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 绘制Netflix的月度收益图表。 使用条形图





  ggplot(aes(x = date, y = nflx_returns)) +

  geom_bar(stat = "identity") +

  theme_classic() +

计算Netflix股票的累计收益

绘制每日和每月收益对了解投资的每日和每月波动很有用。要计算投资的增长,换句话说,计算投资的总收益,我们需要计算该投资的累积收益。要计算累积收益,我们将使用  cumprod()  函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  mutate(cr = cumprod(1 + nflx_returns)) %>%      # 使用cumprod函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  ggplot(aes(x = date, y = cumulative_returns)) +

  geom_line() +

  theme_classic() +

该图表显示了自2009年以来Netflix的累计收益。有了事后分析的力量, 自2009年以来,_可以_用1美元的投资赚取85美元。但据我们所知,说起来容易做起来难。在10年左右的时间里,在Qwickster惨败期间投资损失了其价值的50%。在这段时期内,很少有投资者能够坚持投资。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  ggplot(aes(x = date, y = cumulative_returns)) +

  geom_line() +

  theme_classic() +

我们可以直观地看到,月收益表比日图表要平滑得多。

多只股票

下载多只股票的股票市场数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#将我们的股票代码设置为变量



tickers <- c("FB", "AMZN", "AAPL", "NFLX", "GOOG") 



# 下载股价数据



multpl_stocks <- tq_get(tickers,

绘制多只股票的股价图

接下来,我们将绘制多只股票的价格图表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
multpl_stocks %>%  ggplot(aes(x = date, y = adjusted,

这不是我们预期的结果。由于这些股票具有巨大的价格差异(FB低于165,AMZN高于1950),因此它们的规模不同。我们可以通过按各自的y比例绘制股票来克服此问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  facet_wrap(~symbol, scales = "free_y") +  # facet_wrap用于制作不同的页面

  theme_classic() +

计算多只股票的收益

计算多只股票的收益与单只股票一样容易。这里只需要传递一个附加的参数。我们需要使用参数  group_by(symbol)  来计算单个股票的收益。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#计算多只股票的每日收益                          

  tq_transmute(select = adjusted,

               mutate_fun = periodReturn,

               period = 'daily',

               col_rename = 'returns')#计算多只股票的月收益                            

  tq_transmute(select = adjusted,

               mutate_fun = periodReturn,

               period = 'monthly',

               col_rename = 'returns')

绘制多只股票的收益图表

一旦有了收益计算,就可以在图表上绘制收益。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
multpl_stock_daily_returns %>%

  ggplot(aes(x = date, y = returns)) +

  geom_line() +

  geom_hline(yintercept = 0) +
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
multpl_stock_monthly_returns %>%

  ggplot(aes(x = date, y = return 

  scale_fill_brewer(palette = "Set1",   # 我们会给他们不同的颜色,而不是黑色

在FAANG股票中,苹果的波动最小,而Facebook和Netflix的波动最大。对于他们从事的业务而言,这是显而易见的。Apple是一家稳定的公司,拥有稳定的现金流量。它的产品受到数百万人的喜爱和使用,他们对Apple拥有极大的忠诚度。Netflix和Facebook也是令人难以置信的业务,但它们处于高增长阶段,任何问题(收益或用户增长下降)都可能对股票产生重大影响。

计算多只股票的累计收益

通常,我们希望看到过去哪种投资产生了最佳效果。为此,我们可以计算累积结果。下面我们比较自2013年以来所有FAANG股票的投资结果。哪项是自2013年以来最好的投资?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
multpl_stock_monthly_returns %>%

  mutate(returns e_returns = cr - 1) %>%

  ggplot(aes(x = date, y = cumulative_returns, color = symbol)) +

  geom_line() +

  labs(x = "Date"

毫不奇怪,Netflix自2013年以来获得了最高的收益。亚马逊和Facebook位居第二和第三。

统计数据

计算单个股票的均值,标准差

我们已经有了Netflix的每日和每月收益数据。现在我们将计算收益的每日和每月平均数和标准差。 为此,我们将使用  mean()  和  sd() 函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算平均值

 

  .[[1]] %>%  mean(na.rm = TRUE)



nflx_monthly_mean_ret <- netfl turns) %>%  .[[1]] %>%  mean(na.rm = TRUE)



# 计算标准差



nflx_daily_sd_ret <- netflirns) %>%  .[[1]] %>%  sd()



nflx_monthly_sd_ret <- netflix_rns) %>%  .[[1]] %>%  sd()

 nflx_stat
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## # A tibble: 2 x 3##   period     mean     sd

##   <chr>     <dbl>  <dbl>

## 1 Daily   0.00240 0.0337## 2 Monthly 0.0535  0.176

我们可以看到Netflix的平均每日收益为0.2%,标准差为3.3%。它的月平均回报率是5.2%和17%标准差。该数据是自2009年以来的整个时期。如果我们要计算每年的均值和标准差,该怎么办。我们可以通过按年份对Netflix收益数据进行分组并执行计算来进行计算。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
netflix  %>%

  summarise(Monthly_Mean_Returns = mean(nflx_returns),

            MOnthly_Standard_Deviation = sd(nflx_returns)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## # A tibble: 10 x 3##     year Monthly_Mean_Returns MOnthly_Standard_Deviation

##    <dbl>                <dbl>                      <dbl>

##  1  2009              0.0566                      0.0987##  2  2010              0.110                       0.142 

##  3  2011             -0.0492                      0.209 

##  4  2012              0.0562                      0.289 

##  5  2013              0.137                       0.216 

##  6  2014              0.00248                     0.140 

##  7  2015              0.0827                      0.148 

##  8  2016              0.0138                      0.126 

##  9  2017              0.0401                      0.0815## 10  2018              0.243                       0.233

我们还可以绘制结果更好地理解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
netflix_monthly_returns %>%

  mutate(year = rns, Standard_Deviation, keyistic)) +

  geom_bar(stat = "identity", position = "dodge") +

  scale_y_continuous(b ) +

  theme_bw() +

我们可以看到,自2009年以来,每月收益和标准差波动很大。2011年,平均每月收益为-5%。

计算多只股票的均值,标准差

接下来,我们可以计算多只股票的均值和标准差。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  group_by(symbol) %>%  summarise(mean = mean(returns),

            sd = sd(returns))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## # A tibble: 5 x 3##   symbol     mean     sd

##   <chr>     <dbl>  <dbl>

## 1 AAPL   0.00100  0.0153## 2 AMZN   0.00153  0.0183## 3 FB     0.00162  0.0202## 4 GOOG   0.000962 0.0141## 5 NFLX   0.00282  0.0300
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
group_by(symbol) %>%  summarise(mean = mean(returns),

            sd = sd(returns))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## # A tibble: 5 x 3##   symbol   mean     sd

##   <chr>   <dbl>  <dbl>

## 1 AAPL   0.0213 0.0725## 2 AMZN   0.0320 0.0800## 3 FB     0.0339 0.0900## 4 GOOG   0.0198 0.0568## 5 NFLX   0.0614 0.157

计算收益的年均值和标准差。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   %>%  group_by(symbol, year) %>%  summarise(mean = mean(returns),

            sd = sd(returns))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## # A tibble: 30 x 4## # Groups:   symbol [?]

##    symbol  year      mean     sd

##    <chr>  <dbl>     <dbl>  <dbl>

##  1 AAPL    2013  0.0210   0.0954##  2 AAPL    2014  0.0373   0.0723##  3 AAPL    2015 -0.000736 0.0629##  4 AAPL    2016  0.0125   0.0752##  5 AAPL    2017  0.0352   0.0616##  6 AAPL    2018  0.0288   0.0557##  7 AMZN    2013  0.0391   0.0660##  8 AMZN    2014 -0.0184   0.0706##  9 AMZN    2015  0.0706   0.0931## 10 AMZN    2016  0.0114   0.0761## # ... with 20 more rows

我们还可以绘制此统计数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
multpl_stock_monthly_returns %>%

  mutate(year = year(date)) %>%

  group_by(symbol, yea s = seq(-0.1,0.4,0.02),

                     labels = scales::percent) +

  scale_x_continuous(breaks = seq(2009,2018,1)) +

  labs(x = "Year", y = Stocks") +

  ggtitle
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
multpl_stock_monthly_returns %>%

  mutate(year = year(date)) %>% 

  ggplot(aes(x = year, y = sd, fill = symbol)) +

  geom_bar(stat = "identity", position = "dodge", width = 0.7) +

  scale_y_continuous(breaks = seq(-0.1,0.4,0.02),

                     labels = scales::p 

  scale_fill_brewer(palette = "Set1",

计算多只股票的协方差和相关性

另一个重要的统计计算是股票的相关性和协方差。为了计算这些统计数据,我们需要修改数据。我们将其转换为xts对象。

协方差表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#计算协方差



  tk_xts(silent = TRUE) %>%

  cov()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##               AAPL        AMZN          FB         GOOG          NFLX

## AAPL  5.254736e-03 0.001488462 0.000699818 0.0007420307 -1.528193e-05## AMZN  1.488462e-03 0.006399439 0.001418561 0.0028531565  4.754894e-03## FB    6.998180e-04 0.001418561 0.008091594 0.0013566480  3.458228e-03## GOOG  7.420307e-04 0.002853157 0.001356648 0.0032287790  3.529245e-03## NFLX -1.528193e-05 0.004754894 0.003458228 0.0035292451  2.464202e-02

相关表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算相关系数



 %>%

  tk_xts(silent = TRUE) %>%

  cor()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##              AAPL      AMZN        FB      GOOG         NFLX

## AAPL  1.000000000 0.2566795 0.1073230 0.1801471 -0.001342964## AMZN  0.256679539 1.0000000 0.1971334 0.6276759  0.378644485## FB    0.107322952 0.1971334 1.0000000 0.2654184  0.244905437## GOOG  0.180147089 0.6276759 0.2654184 1.0000000  0.395662114## NFLX -0.001342964 0.3786445 0.2449054 0.3956621  1.000000000

我们可以使用corrplot() 包来绘制相关矩阵图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## corrplot 0.84 loaded
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  cor() %>%  corrplot()
本文选自《基于R语言股票市场收益的统计可视化分析》。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于R语言股票市场收益的统计可视化分析|附代码数据
要执行此分析,我们需要资产的历史数据。数据提供者很多,有些是免费的,大多数是付费的。在本文中,我们将使用Yahoo金融网站上的数据。
拓端
2023/02/07
1.9K0
MLQuant:基于XGBoost的金融时序交易策略(附代码)
使用机器学习和过股票价格来预测下一个时期的价格或方向并不是什么新鲜事,它也不会产生任何有意义的预测。在这篇文章中我们将一系列资产的时间序列数据分解成一个简单的分类问题,看看机器学习模型能否更好地预测下一个周期方向。目标和策略是每天投资一项资产。其资产将是机器学习模型最有信心在下一个上升Ť+1期间股价上涨的资产。换句话说,我们对机器学习模型给出最大预测概率的资产进行投资,即给定资产明天将升值。也就是说,如果模型预测在第t天,GOOG的资产将以0.78的预测概率高于之前的收盘价,并且还预测AMZN将以0.53的概率上升,那么我们今天将投资于GOOG。我们每天只投资一项资产,该模型可以扩展到卖空、多资产购买和多周期等。
量化投资与机器学习微信公众号
2020/09/14
3.1K0
MLQuant:基于XGBoost的金融时序交易策略(附代码)
Python数据分析之股票实战
前言:对于股票的研究我想,无论是专业人士还是非专业人士都对其垂涎已久,因为我们都有赌徒的心态,我们都希望不花太多的时间但是能赚足够的钱,而股票绝对是一个好的选择,本人也不例外对股票垂涎已久,不管你是否承认股票是一个来钱快的地方,但是伴随着的当然是巨大的风险,毕竟这么多炒股,并不是每个人都赚到了钱,下面的内容也不一定保证你一定能赚到钱,反正都是“猜”,不如让“猜”看起来更加专业一些。 原文章参考:http://nbviewer.ipython.org/github/jmportilla/Udemy-notes
CDA数据分析师
2018/02/05
1.7K0
Python数据分析之股票实战
R语言之可视化①误差棒
本教程介绍如何使用R软件和ggplot2包创建带有误差棒的图形。 可以使用以下函数创建不同类型的错误栏:
用户1359560
2018/12/05
2.6K0
R语言之可视化①误差棒
Fama French (FF) 三因子模型和CAPM模型分析股票市场投资组合风险/收益可视化
本文我们超越了 CAPM 的简单线性回归,探索了 Fama French (FF) 股票风险/收益的多因素模型。
拓端
2022/03/05
4K0
Fama French (FF) 三因子模型和CAPM模型分析股票市场投资组合风险/收益可视化
R语言从经济时间序列中用HP滤波器,小波滤波和经验模式分解等提取周期性成分分析
经济时间序列的分析通常需要提取其周期性成分。这篇文章介绍了一些方法,可用于将时间序列分解为它们的不同部分。它基于《宏观经济学手册》中Stock和Watson(1999)关于商业周期的章节,但也介绍了一些较新的方法,例如汉密尔顿(2018)替代HP滤波器,小波滤波和经验模式分解。
拓端
2020/08/23
2.4K0
R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列|附代码数据
最近我们被客户要求撰写关于ARIMA-GARCH的研究报告,包括一些图形和统计输出。
拓端
2023/01/09
5640
TidyFriday Excel 用户的福音!在 R 中实现 Excel 的功能
许多 R 的新用户在金融、市场、商业分析等领域有丰富的行业经验,但是他们并没有太多的编程背景,所以日常工作中还是选择 Excel、PowerBI 这些传统的工具进行工作;tidyquant 的作者意识到了这些痛点,于是他在新版本中加入了好多 Excel 的特性,如果你是 Excel 的重度患者,又想体验 R 强大的数据处理和可视化功能,那么本文再合适不过了!
王诗翔呀
2020/07/06
2.7K0
TidyFriday Excel 用户的福音!在 R 中实现 Excel 的功能
R语言从经济时间序列中用HP滤波器,小波滤波和经验模态分解等提取周期性成分分析
经济时间序列的分析通常需要提取其周期性成分。这篇文章介绍了一些方法,可用于将时间序列分解为它们的不同部分。它基于《宏观经济学手册》中Stock和Watson(1999)关于商业周期的章节,但也介绍了一些较新的方法,例如汉密尔顿(2018)替代HP滤波器,小波滤波和经验模态分解。
拓端
2021/01/29
9000
R语言从经济时间序列中用HP滤波器,小波滤波和经验模态分解等提取周期性成分分析
用R语言让你的可视化图表动起来!动起来!!附源代码
链接:https://pan.baidu.com/s/1xn4Fq2DvMOTZMQAvrFAB1A
拴小林
2020/07/10
7570
R语言进行时间序列分析和预测
R语言数据分析指南
2023/09/25
4360
R语言进行时间序列分析和预测
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析|附代码数据
最近我们被客户要求撰写关于ARMA-GARCH的研究报告,包括一些图形和统计输出。
拓端
2023/02/21
1.1K0
R语言使用Rasch模型分析学生答题能力|附代码数据
请注意,item1是V2而不是V1,item29是V30。要获得第一个题目V1的难易程度,只需将题目1到题目29的系数求和,然后乘以-1。
拓端
2022/12/07
5610
「R」Shiny:案例研究:急诊室受伤情况分析
在之前的推文中我们学习了一堆的知识与概念,为了帮助大家吸收,接下来我们将一起通过创建一个探究有趣数据集的 Shiny 应用来整合当前所学的所有思想。
王诗翔呀
2020/07/03
4.4K0
「R」Shiny:案例研究:急诊室受伤情况分析
基于长短期记忆模型的股价预测及可视化
1、https://easyai.tech/ai-definition/lstm/
皮大大
2024/09/09
2230
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析|附代码数据
本文将分析工业指数(DJIA)。工业指数(DIJA)是一个股市指数,表明30家大型上市公司的价值。工业指数(DIJA)的价值基于每个组成公司的每股股票价格之和(点击文末“阅读原文”获取完整代码数据)。
拓端
2022/11/01
7050
数据可视化完美指南-R-python
Yan Holtz 和Conor Healys两个人关系很好,一起在业余时间开发了这个网站。基于R和Python做的源代码,这里我们不仅可以得到大量优秀的源代码,同时我们可以得到一张决策树,用于知道如何使用代码。这两个人相当厉害了,不仅仅给大家了工具,还叫大家如何使用。作为无私的分享,如果对大家有用,请在文章中致谢他们。如果我们需要交流代码,和谁交流呢?那必须是Yan Holtz,这位主要负责代码部分。Conor Healys负责图形设计工作。
生信宝典
2019/11/07
8880
数据可视化完美指南-R-python
高维数据 | R语言数据可视化之日历图
日历图,在环境与生态指标的动态监测中应用普遍,特别适用于显示不同时间段的指标情况。比如污染物中重金属含量、空气中PM2.5变化情况。在金融行业中检测股票收盘价、回测信号等指标中也很常见。生物医药领域的血糖或血压日记录值,新型冠状病毒的逐日确诊数量等等。通过时间分布的日历图动态监测数据,以弥补普通线图的不足。
黑妹的小屋
2020/08/06
2K0
全网最全的R语言基础图形合集
直方图是一种对数据分布情况进行可视化的图形,它是二维统计图表,对应两个坐标分别是统计样本以及该样本对应的某个属性如频率等度量。
生信学习者
2024/06/12
1130
全网最全的R语言基础图形合集
R语言金融市场量化交易:布林带、价差策略、RSI交易策略,回测COMP 226|附代码数据
从现在开始,我们将重复使用实用工具脚本 "utilities.R "中的函数。在这种情况下,我们将使用。
拓端
2023/03/30
1.1K0
推荐阅读
相关推荐
基于R语言股票市场收益的统计可视化分析|附代码数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验