楼主: 左大营
4976 12

[原创博文] 左大营 | python数据分析篇系列1——探索沪深300指数(附代码)(中) [推广有奖]

  • 0关注
  • 7粉丝

已卖:44份资源

初中生

95%

还不是VIP/贵宾

-

威望
0
论坛币
63 个
通用积分
10.1787
学术水平
24 点
热心指数
25 点
信用等级
21 点
经验
222 点
帖子
17
精华
0
在线时间
18 小时
注册时间
2020-4-14
最后登录
2021-6-18

楼主
左大营 发表于 2020-4-16 12:14:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

探索沪深300指数(HS300)——基于Python(中)


【承接上文】



写在前面:本文只做分析,提供观点,不构成投资建议

如需转载请微信联系:eosO_oke

佛系更新,关注不迷路


       沪深300指数是A股市场中比较具有代表性的指数之一,于2005年4月8日正式推出。2005年之前沪深两个市场各自均有独立的综合指数和成分指数,但市场缺乏反映沪深市场整体走势的跨市场指数,沪深300指数应运而生。

       沪深300指数是反映沪深两个市场整体走势的“晴雨表”,指数样本覆盖了两市大部分流通股。沪深300成分股均为市场中代表性好、流动性高、交易活跃的主流投资股票,多为蓝筹股或白马股,能够反映市场主流投资的收益情况。


思路:

·       沪深300近15年走势图(2005-20年)

·       沪深300历次重大事件中的表现情况

·       收益是否遵从正态分布

·       每年收益率展示

·      月历效应

·      日历效应


前文我们分析了沪深300历史走势图、分析了众多历史事件中指数的表现、也查看了收益的分布情况。

本节继续探索沪深300指数收益情况,将分别使用柱状图和饼图来进行分析,重点分析【月历效应】


01 年度收益与年平均收益

(1)首先我们剥离日期索引中的年月日

  1. #先把原数据的日期中的年、月、日剥离出来(后续工作可能用到)
  2. hs300["year"] = hs300.index.year
  3. hs300['month'] = hs300.index.month
  4. hs300['week'] =  hs300.index.strftime('%w') #注week要用strftime('%w')的方法
  5. hs300['day'] = hs300.index.day
  6. hs300[['year','month','week','day']].tail(20) #仅查看剥离出来的四列的最后20个值
复制代码

输出结果为(其中的week表示当前交易日为周几,因此没有6和7):

  1.             year  month week  day
  2. date
  3. 2020-03-19  2020      3    4   19
  4. 2020-03-20  2020      3    5   20
  5. 2020-03-23  2020      3    1   23
  6. 2020-03-24  2020      3    2   24
  7. 2020-03-25  2020      3    3   25
  8. 2020-03-26  2020      3    4   26
  9. 2020-03-27  2020      3    5   27
  10. 2020-03-30  2020      3    1   30
  11. 2020-03-31  2020      3    2   31
  12. 2020-04-01  2020      4    3    1
复制代码
(2)求各年度收益与年平均收益并绘制柱状图
  1. #15年来每一年各自的收益(乘以100是为了去掉%,下同)
  2. return_by_year = pd.DataFrame(round(hs300['return'].groupby(hs300.year).sum()*100,2))
  3. #15年来每年的平均收益
  4. average_return = np.mean(return_by_year['return'])
  5. #年度收益正负分开
  6. return_by_year['positive'] = return_by_year > 0
复制代码
输出结果为:
1587010614(1).jpg


(3)年化收益率大于0 和小于0各自占比(绘制饼状图)

  1. data = return_by_year['positive'].value_counts().tolist()
  2. pos_neg = pd.DataFrame(data=data,columns=['counts'],index=['positive','negative'])

  3. plt.figure(figsize=(15,15))
  4. pos_neg.counts.plot(kind='pie',colors=['green','red'],autopct='%1.1f%%',startangle=140)
  5. plt.title('年化收益率正负各自占比',size=(20))
  6. plt.legend(loc='upper right',fontsize=10,ncol=2,fancybox=True,framealpha=0.5,shadow=True) #两列展示图例
复制代码

此图作用不大,背后的意义也不大,但是食之无味弃之可惜,展示出来权当是占个位置来学做饼图吧:

输出结果为:

1587010734(1).jpg

(4)各月份平均收益图(A股月历效应)

  1. return_by_month = pd.DataFrame(round(hs300['return'].groupby(hs300.month).mean()*100,2))
  2. return_by_month['positive'] = return_by_month['return']>0
  3. plt.figure(figsize=(20,15))
  4. return_by_month['return'].plot(kind='bar',color=return_by_month.positive.map({True:'red',False:'forestgreen'}))
  5. plt.title("月度平均收益图(%)",size=20)
  6. plt.xlabel('月份',size=20)
  7. plt.ylabel('每月平均收益',size=20)
  8. plt.yticks(np.arange(-0.25,0.25,step=0.025),size=15)
  9. plt.xticks(rotation=45,size=15)
  10. plt.grid(alpha=0.3)
复制代码

输出结果为:

1587010779(1).jpg

从结果可以看出,除了一月平均收益为0,6月和8月平均收益为负之外,其他九个月的平均收益均为正。收益率在2月和12月份达到最高,平均0.2%,月历效应背后的原因大家可以上网去查,各有各的说法,我是想说,含有我们最讨厌的数字2,4的月份,表现的反而最好,我们最喜欢的6,8数字的月份,表现最差,是的,它很有个性,这很A股


(5)绘制每个月收益图,具体查看月历效应

  1. #合并年和月,查看15年*12个月 每个月的收益相对于月份平均收益的走势图
  2. hs300['year_month'] = hs300['year'].map(str)+'年'+hs300['month'].map(str)+'月'
  3. hs300['year_month'].tail(20)
  4. month_return = pd.DataFrame(round(hs300['return'].groupby(hs300['year_month']).sum()*100,2))
  5. month_return['positive'] = month_return['return']>0

  6. #计算平均月收益
  7. average_month_return = np.mean(month_return['return'])

  8. plt.figure(figsize=(20,10))
  9. month_return['return'].plot(kind='bar',color=month_return['positive'].map({True:'red',False:'green'}),label='Monthly Return')
  10. plt.axhline(y=average_month_return, color='blue',linestyle='-',label='Average Return')
  11. plt.title('每月收益率与月平均收益率对比',size=20)
  12. plt.xlabel('月份',size=20)
  13. plt.ylabel('收益',size=20)

  14. month_return['n'] = range(len(month_return)) #解释同133行代码
  15. plt.xticks(month_return['n'][::10],month_return.index[::10],rotation=45) #解释同上
  16. plt.yticks(np.arange(-50,50,step=10))
  17. plt.legend(ncol=2)
复制代码
输出结果为:
1587009572(1).jpg

大家可以通过让x轴更加密集的方式,来查看是否大部分年份里每年的2,4,12月份收益最高,6,8月收益最低。
下期来看看每周哪一天交易日里收益最好。
昨天收到“管友”催更的信息了,本人也是激动的一P,说明帖子有人看,但是事情较多,只能佛系更新,下期不定时展示;

***关注一下 ,不做尘世中迷途的小书童




未完待续






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 数据处理 沪深300指数 月历效应

已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
xixia333 + 5 + 5 + 5 + 5 精彩帖子

总评分: 论坛币 + 5  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

沙发
tianwk 发表于 2020-4-16 13:57:06
thanks for sharing

藤椅
xixia333 发表于 2020-4-16 15:01:01
给你打赏哦

板凳
左大营 发表于 2020-4-16 16:12:18
xixia333 发表于 2020-4-16 15:01
给你打赏哦
哈哈,你又来捧场啦,热烈欢迎

报纸
左大营 发表于 2020-4-16 16:13:54
这次代码直接贴在文中了,不用单独上传附件,如果大家觉得这种方式优于图片+附件形式,以后就用这种方式了,欢迎留言告知。

地板
改变change 发表于 2020-4-16 16:35:09
打赏打赏,持续关注!

7
与心交响 发表于 2020-4-16 16:36:48
谢谢大神分享

8
蓝羽ABC 发表于 2020-4-16 16:48:26
你咋这么优秀啊,大神,要多多更新哦{:2_31:}

9
左大营 发表于 2020-4-16 18:53:12 来自手机
与心交响 发表于 2020-4-16 16:36
谢谢大神分享
加油

10
agan06 发表于 2020-4-17 07:13:59
谢谢分享

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-13 13:12