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

欢迎你们订阅《Python数据分析实战:构建股票量化交易系统》小册子,学完小册上的知识点后,必定要学以至用的方式来辅助咱们分析股票! ​微信

前言

​ 相信你们都据说了量化交易这个东西了吧!markdown

量化交易是一种新兴的系统化金融投资方法,它综合多个学科的知识,用先进的数学模型代替人的主观思惟制定交易策略,利用计算机强大的运算力从庞大的股票、债券、 期货等历史数据中回测交易策略的盈亏“几率”,经过管理盈亏的“几率”帮助投资者作出准确的决策。函数

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

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

行业板块数据透视表 

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

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

在建立数据透视表以前,咱们得清楚地明确咱们想经过透视表解决什么问题。因此,咱们先来介绍下本期对应的股票分析场景。3d

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

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

固然了,天天的板块数据是静态的,没法识别出板块的变化趋势,因而咱们得把天天的板块数据连接起来分析。此处咱们就先从近一个月的板块数据中选取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日贵金属和珠宝首饰板块是当天的热点,可是仅仅是一日游行情,后续几天不怎么给力。

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

总结

经过这个简单而又实用的股票量化场景,但愿可以给广大朋友对于量化交易有一个直观的感觉。

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

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

———————————————————————————————————————————————— 你们若是想对涉及到的知识点进行更全面、更体系的从0-1方式的介绍,这里推荐给你们个人书籍《Python股票量化交易从入门到实践》!天猫、京东、当当全面开售!

同时也欢迎你们关注个人微信公众号【元宵大师带你用Python量化交易】了解更多Python量化交易相关内容

例程中的代码,上传至《玩转股票量化交易》知识星球(知识星球的目录可点击【阅读】查看)。

相关文章
相关标签/搜索