小散量化炒股记|Python数据透视表和热力图跟踪行业板块热点切换

前言

相信大家都听说了量化交易这个东西了吧!量化交易是一种新兴的系统化金融投资方法。

那么,什么才是普通股民所适合的量化交易打开方式呢?

本文就用一个接地气的股票分析场景——Python中用数据透视表和热力图这两个数据分析的利器跟踪行业板块热点切换来和大家分享一下,普通股民如何去使用量化交易!

行业板块数据透视表 

数据透视表(Pivot Table)对大家并不陌生,在EXCEL中就经常会用来统计分析数据。

Pandas这个库是可以取代Excel完成各自数据统计分析的,在Pandas中提供了一个类似的功能函数pivot_table()。

在创建数据透视表之前,我们得清楚地明确我们想通过透视表解决什么问题。所以,我们先来介绍下本期对应的股票分析场景。

平时我们在股票分析的时候,除了关注指数的动态之外,还会关注板块的动态。特别是市场不断扩容的前提下,板块的选择尤其重要。

比如像我的话,会统计出每个交易日板块的一些整体动态,比如涨跌幅、总市值、换手率、上涨家数、下跌家数、领涨股票……如下所示为2020-07-27的板块情况:

当然了,每天的板块数据是静态的,无法识别出板块的变化趋势,于是我们得把每天的板块数据链接起来分析。此处我们就先从近一个月的板块数据中选取2020-07-27至2020-07-31这一周的数据来进行分析。

第一步是把这一周的数据从csv文件中加载到程序中,成为DataFrame对象,如下所示:

df_bk_mon = pd.read_csv('table-bk-2020-07-27.csv', parse_dates=True, index_col=0, encoding='GB18030')
df_bk_tue = pd.read_csv('table-bk-2020-07-28.csv', parse_dates=True, index_col=0, encoding='GB18030')
df_bk_wed = pd.read_csv('table-bk-2020-07-29.csv', parse_dates=True, index_col=0, encoding='GB18030')
df_bk_thu = pd.read_csv('table-bk-2020-07-30.csv', parse_dates=True, index_col=0, encoding='GB18030')
df_bk_fri = pd.read_csv('table-bk-2020-07-31.csv', parse_dates=True, index_col=0, encoding='GB18030')

第二步把这周一到周五这一周的板块数据合并为一份。此处仅需将这些DataFrame对象简单的级联即可,我们就用pd.concat()来完成。关键参数axis为0表示沿着列方向将多个 DataFrame 对象拼接到一起。如下所示:

df_bk_week.to_csv("table-bk-2020-07-27-31.csv", columns=df_bk_week.columns, index=True, encoding='GB18030')

准备工作完成之后,我们就来介绍下如何使用pivot_table()完成数据透视表。

pandas.pivot_table函数接口介绍如下:

pandas.pivot_table (data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

官方文档对各个参数的解释如下:

以“板块名称”、“交易日期”归类做个数据透视表,“板块名称”在前,“交易日期”在后,这样可以观察单个板块这一周的变化情况。如下所示:

df_bk_pivot = pd.pivot_table(df_bk_week,index=["板块名称", "交易日"])

上面的表格中BK指的是板块的涨跌幅,SK指的是领涨股的涨跌幅,如果我们不需要显示这一列的话,可以用values选择要进行聚合的数值列,如下所示:

df_bk_pivot = pd.pivot_table(df_bk_week, index=["板块名称", "交易日"], values=["BK涨跌幅","上涨家数","下跌家数","总市值","换手率"])

以上为pivot_table()最基本的使用方法。对于行业板块的数据,我比较关注的是“换手率”和“涨跌家数”。

接下来我来介绍下如果用pivot_table()观察“涨跌家数”。

我观察“涨跌家数”数据是在某一个热点板块持续火爆的时候,我通过涨跌个数的比例来观察板块热点的持续时间。通常一个板块快熄火的时候,虽然有些龙头股还在涨,但是同一板块的跟风股会提前下跌。

我们需要对数据做一些处理,计算出板块的上涨比例值,如下所示:

df_bk_week["上涨比例"] = df_bk_week["上涨家数"] / (df_bk_week["上涨家数"] + df_bk_week["下跌家数"])
df_bk_week["上涨比例"]=df_bk_week["上涨比例"].round(2)

再做一份数据透视图。此处用了columns=["交易日"],将交易日从index参数中抽出放进columns参数中。

df_bk_pivot = pd.pivot_table(df_bk_week, index=["板块名称"], columns=["交易日"], values=["上涨比例"], aggfunc=np.mean)

另外,aggfunc这个参数也非常重要,可以用列表或字典来设置对数据列的计算方式,比如求和、求均值、求最大值或最小值等,默认为求平均。不过此处我们无需使用。

热力图可视化 

光是有一张数据透视表对我来说还不算很直观。于是我结合Seaborn库的热力图(heatmap)来显示板块涨跌个数的变化。效果如下所示:

根据颜色深浅的变化可知7-28和7-29日上涨股票的个数比例是比较高的,结合上证指数的走势也可以相吻合。如下所示:

根据颜色深浅的变化可知7-27日贵金属和珠宝首饰板块是当天的热点,但是仅仅是一日游行情,后续几天不怎么给力。

当然,此处我仅仅是找了一周的数据来给大家做个演示,我们在实际分析中需要每天的板块数据连贯性地分析,这样能更精准找到其中的一些板块轮动的迹象。

总结

通过这个简单而又实用的股票量化场景,希望能够给广大朋友对于量化交易有一个直观的感受。

然后,我们应该升级自己的炒股方式了,把自己以前炒股的那套方法,抽象成策略模型,用量化的方法去全市场回测评估,然后让程序帮助我们监测行情的走势。

这个才是普通股民所适合的量化交易打开方式!

例程中代码涉及到《Python股票量化交易从入门到实践》书中知识点。比如:

第4章    第三方库Pandas快速入门 *** 

4.3 DataFrame的规整化处理

    4.3.1模拟生成股票行情数据 

    4.3.2整体概览DataFrame

    4.3.3 DataFrame缺失值处理

    4.3.4 DataFrame精度的转换

    4.3.5 DataFrame合并处理

4.5 CSV文件存储和加载

    4.5.1 DataFrame存储至CSV 

    4.5.2 CSV加载为DataFrame

关于例程中的代码,我们会上传至《Python股票量化交易从入门到实践》读者交流群和《玩转股票量化交易》知识星球(知识星球的目录可点击【阅读原文】查看)。

关于例程中的使用到的一周行业板块数据,我们也会一并上传。

行业板块数据是我每天自动爬取和清洗后的数据,后续代码稳定后会上传至知识星球中,敬请期待!

往期回顾

小散量化炒股记|只用一分钟选出底部放量跳空上扬的强势股

小散量化炒股记|不用追高!Python告诉你强势股回调介入的位置

小散量化炒股记|一文揭秘主力、散户资金流入流出的来龙去脉

小散量化炒股记|搭建本地化的股票量化数据库这么几步就够了

元宵大师的量化交易书籍开售!!京东、当当、天猫有售!!凭订单进读者交流群获取工具源码!加我微信了解详情
微信关注:‘元宵大师带你用Python量化交易’

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值