前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R练习50题 - 第六期

R练习50题 - 第六期

作者头像
用户7652506
发布2021-04-26 11:17:22
5500
发布2021-04-26 11:17:22
举报
文章被收录于专栏:大猫的R语言课堂

题预览

两位主创最近都有很多事情要做,抽空做一期更新!下面我们继续看题!

22. 每天沪深300指数成分占比最大的10只股票是哪些?

23. 各个行业的平均每日股票数量从大到小排序是什么?

24. 每个行业每天成交额最大的一只股票代码是什么?

25. 每个行业每天最大成交额是最小成交额的几倍?

26. 每个行业每天成交额最大的5只股票和成交额总和是多少?

27. 每个行业每天成交额超过该行业中股票成交额80%分位数的股票的平均收益率是多少?

28. 每天成交额最大的10%的股票的平均收益率和成交额最小的10%的股票的平均收益率的相关系数是多少?

注:关于题目数据的问题可参考R练习50题-第一期

题 22

22. 每天沪深300指数成分占比最大的10只股票是哪些?

代码语言:javascript
复制
data[order(date, -index_w300), .(symbol = symbol[1:10]), by = .(date)
    ][1:5]

这一题主要考察排序和选择的综合使用。

首先对dateindex_w300分别进行升序和降序排列,也即是先将日期升序排列,而后在每一天中将沪深300的各支股票以成分占比降序排列;接下来利用by = .(date),按照日期进行分组,而后用.(symbol = symbol[1:10])选择出成分占比每天排在前十的股票。

23. 各个行业的平均每日股票数量从大到小排序是什么?

代码语言:javascript
复制
data[, .(stkcd_amount = uniqueN(symbol)), keyby = .(date, industry)
    ][, .(stkcd_mean = mean(stkcd_amount)), by = .(industry)
    ][order(-stkcd_mean)
    ][1:5]

本题主要在于理解题意,并利用排序和分组计算。

首先理解题意:计算观测时间内每个行业每天股票的数量,求每个行业股票数量的均值,而后按从大到小排序。

line 1 利用分组计算出了每个行业每天的股票数量stkcd_amount,line 2 以行业industry进行分组计算每个行业的股票数量的均值,line 3则依据stkcd_mean进行降序排列。

24. 每个行业每天成交额最大的一只股票代码是什么?

代码语言:javascript
复制
data[order(-amount), .(symbol = symbol[1]), keyby = .(date, industry)
    ][1:5]

此题与22题类似,这里不作赘述,感兴趣的水友可以参考22题对此题进行尝试。

25. 每个行业每天最大成交额是最小成交额的几倍?

代码语言:javascript
复制
data[order(date, industry, -amount)
    ][amount > 0, .(times = amount[1]/amount[.N]), by = .(date, industry)
    ][1:5]

本题的重点在于理解题意,并进行排序后的分组计算。

本题根据24题题意,推测本题含义应是:行业每天最大成交额的股票是最小成交股票的几倍。

首先依据日期date、行业industry和成交额amount分别进行升序,升序和降序排列,并且删除所有成交额amount等于0的观测。

接下来以日期date和行业industry进行分组,最后在每组中以amount最大值除以amount最小值times = amount[1]/amount[.N]

注:在此处有一个data.table的小技巧,i中的排序和选择的操作的在代码中分成了两步,这是因为这两个部分不能够以order(date, industry, -amount) & amount > 0形式书写,这样书写其中的排序部分会失效。换句话说一个i中只能存在排序和选择两个功能其中的一个!!!

26. 每个行业每天成交额最大的5只股票和成交额总和是多少?

代码语言:javascript
复制
data[order(date, industry, -amount), .(symbol = symbol[1:5], amount = sum(amount[1:5])),
     by = .(date, industry)
    ][1:5]

本题与25题类似,总体可参考25题进行作答,此处不做赘述。

27. 每个行业每天成交额超过该行业中股票成交额80%分位数的股票的平均收益率是多少?

代码语言:javascript
复制
data[, .(symbol = symbol, ret = close/pre_close - 1, amount = amount, industry, date)
    ][, .SD[amount > quantile(amount, 0.8)], by = .(date, industry)
    ][, .(aver_ret = mean(ret)), by = .(date, industry)
    ][1:5]

这一题的关键在于运用了分组以后的.SD选择,这是一个data.table包的常用技巧。

line 1 计算了个股每日的收益率ret,再将其余需要的变量挑选出来。

line 2 是本题的关键。首先根据dateindustry进行分组,而后在分组的.SD中选择每天成交额超过该行业中股票成交额80%分位数的股票:.SD[amount > quantile(amount, 0.8)],这样就将每日每个行业中超过本行业80%分位数的股票选择出来了。

line 3 则是分组计算每日每行业这些股票的平均收益率aver_ret

28. 每天成交额最大的10%的股票的平均收益率和成交额最小的10%的股票的平均收益率的相关系数是多少?

代码语言:javascript
复制
data[, .(symbol = symbol, ret = close/pre_close - 1, amount = amount, date)
    ][, .(tag = ifelse(amount > quantile(amount, 0.9), "max10%", ifelse(amount < quantile(amount, 0.1), "min10%", "others")), ret), by = .(date)
    ][, .(ret_aver = mean(ret)), by = .(date, tag)
    ][tag != "others", dcast(.SD, date ~ tag, value.var = "ret_aver")
    ][, cor(`max10%`, `min10%`)]

这一题主要运用了dcast一个‘长’的表变成一个‘宽’的表,还有关于R中变量名引用问题

line 1 与前一题类似计算出个股收益率ret,而后挑选出需要的变量。

line 2 生成一个变量tag,首先以日期date进行分组,而后以quantile(amount, 0.9)quantile(amount, 0.1)为两个标识,生成三个观测值max10%min10%others

line 3 接下来根据日期date和标识tag,计算三个分组在每日的平均收益率ret_aver

line 4 在删除tag = "other"的这些观测之后,用dcast将表进行变形,把观测值max10%min10%变成两个变量名,而后在这两个变量名下填充ret_aver的观测值:dcast(.SD, date ~ tag, value.var = "ret_aver"

line 5 计算max10%min10%这两个变量的相关系数。因为在变量名中出现的%,会在函数中自动识别为函数%,如果需要讲变量名进行引用,则需要运用引用符号``这个函数。

注:此处作者在进行解答时,特意应用了max10%min10%两个变量名,仅为了说明``的用法,大家在一般编写过程中则需尽量避免变量名与函数的混用!!

大猫的R语言课堂

我是大猫,一个高中读文科但却在代码、数学的路上狂奔不止的Information System Ph. D Candidate。

我是村长,一个玩了12年指弹吉他,却被代码深深吸引的金融学博士候选人。

大猫的微信号是:

iRoss2007

村长的微信号及B站主页是:

ravin515

http://space.bilibili.com/40771572

大猫的R语言课堂关注R语言、数据挖掘以及经济金融学。

我们与大家分享我们的知识和节操,我相信独乐乐不如众乐乐。

我还有许多好玩的计划。

更多的精彩内容正在路上。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的R语言课堂 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档