转载:量化投资中常用python代码分析(一)
pandas的IO
量化投资逃不过数据处理,数据处理逃不过数据的读取和存储。一般,最常用的交易数据存储格式是csv,但是csv有一个很大的缺点,就是无论如何,存储起来都是一个文本的格式,例如日期‘2018-01-01’,在csv里面是字符串格式存储,每次read_csv的时候,我们如果希望日期以datatime格式存储的时候,都要用pd.to_datetime()函数来转换一下,显得很麻烦。而且,csv文件万一一不小心被excel打开之后,说不定某些格式会被excel“善意的改变”,譬如字符串‘000006’被excel打开之后,然后万一选择了保存,那么再次读取的时候,将会自动变成数值,前面的五个0都消失了,很显然,原来的股票代码被改变了,会造成很多不方便。
此外,如果我们的pandas中的某些地方存储的不是可以被文本化的内容的时候,csv的局限性就更大了。pandas官方提供了一个很好的存储格式,hdfs。所以笔者建议,凡是pandas格式的数据,想存储下来,就用hdfs格式。
例如下面这样的一个数据:
size_data.to_hdf('filename.h5', key='data')
当我们想读取的时候,只要
size_data = pd.read_hdf('filename.h5', key='data')
就可以了,size_data就可以再次使用了。
面板数据的截面分析
所谓的面板数据就是截面数据加上时间序列数据。股票的数据很显然就是一个面板数据。在量化投资中,我们经常会使用截面数据处理和时间序列数据的处理。
所谓的截面数据处理,就是站在某一个交易日,或者某一个时间点,来考察全市场这么多股票的情况。而,通常,我们希望对时间序列上每一个时间节点都进行一次截面处理。
例如,我们现在有这样的一个dataframe:
。。。。。。
显然,这个数据就是一个典型的面板数据。我们现在希望对第三列signal_raw做截面上的处理。这个时候,就可以使用groupby。
- signal.sort_values(['trading_date', 'code'], inplace=True)
- signal['siganl_win'] = signal.groupby('trading_date').apply(your_function).values
我们来分析一下上面的代码。第一行的作用是先根据trading_date排序,然后根据code排序。
代码中的your_function就是我们希望作用在截面数据上的函数。
我们来好好分析一下:
- def xf(df):
- print df
- signal.groupby('trading_date').apply(xf)
我们运行一下看看,究竟groupby之后每一个部分是什么。
很显然,groupby把dataframe按照日期分成好多小的dataframe。所以我们的处理函数只要能够返回一个等长的series,注意,我们的函数要返回一个series,要不然整个函数就不是这样写的。大家可以尝试返回一个等长的list,就会发现上面的代码不能成功运行。这样的原因是因为如果返回一个series,pandas最后整个groupby语句返回的是一个multi index 的series,index第一层是日期,第二层是返回的series的index。如果返回的是list,那么返回的是一个类似于字典结构的结果,key是日期,values是返回的list。
之所以最后要用values是将multi index去掉,只留下数值。而之所以前面要sort_values是为了顺序匹配,大家可以仔细想想。
面板数据的时间序列分析
很简单,只要sort的时候,顺序换一下,先code,后日期。然后groupby的时候按照code就可以了。
groupby apply的彩蛋
groupby后面apply的函数运行过程中,第一个被groupby拆分的子dataframe会被apply后面的函数运行两次。大家如果看仔细的话,会发现,第一个子dataframe和第二个dataframe其实是一样的。pandas官方说,之所以这样是第一个子dataframe传入的目的是为了寻找一个能够优化运行速度的方法,提高后面的运行效率。所以,如果日期只有一种,而再groupby后,返回的逻辑和有多种日期是不一样的,大家可以自行研究一下,还是很有趣的。
--------------------- 本文来自 钱塘小甲子 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qtlyx/article/details/80515077?utm_source=copy
转载:量化投资中常用python代码分析(一)的更多相关文章
- Python代码分析工具
Python代码分析工具:PyChecker.Pylint - CSDN博客 https://blog.csdn.net/permike/article/details/51026156
- Python代码分析工具之dis模块
转自:http://hi.baidu.com/tinyweb/item/923d012e8146d00872863ec0 ,格式调整过. 代码分析不是一个新的话题,代码分析重要性的判断比较主观,不同 ...
- 60行python代码分析2018互联网大事件
2018年是改革开放四十周年,也是互联网发展的重要一年.经历了区块链,人工智能潮的互联网行业逐渐迎来了冬天.这一年里有无数的事件发生着,正好学了python数据处理相关,那么就用python对18年的 ...
- 梅尔频谱(mel-spectrogram)提取,griffin_lim声码器【python代码分析】
在语音分析,合成,转换中,第一步往往是提取语音特征参数.利用机器学习方法进行上述语音任务,常用到梅尔频谱.本文介绍从音频文件提取梅尔频谱,和从梅尔频谱变成音频波形. 从音频波形提取Mel频谱: 对音频 ...
- discuz内置常用CSS代码分析
CSS多IE下兼容HACK写法 所有 IE浏览器适用:.ie_all .foo { ... } IE6 专用:.ie6 .foo { ... } IE7 专用:.ie7 .foo { ... } IE ...
- 如何使用 Pylint 来规范 Python 代码风格
如何使用 Pylint 来规范 Python 代码风格 转载自https://www.ibm.com/developerworks/cn/linux/l-cn-pylint/ Pylint 是什么 ...
- python代码检查工具pylint 让你的python更规范
1.pylint是什么? Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅 ...
- SonarQube-5.6.3 代码分析平台搭建使用
python代码分析 官网主页: http://docs.sonarqube.org/display/PLUG/Python+Plugin Windows下安装使用: 快速使用: 1.下载jdk ht ...
- 利用这10个工具,你可以写出更好的Python代码
我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 很多人 ...
随机推荐
- Centos7单机部署ELK+x-pack
ELK分布式框架作为现在大数据时代分析日志的常为大家使用.现在我们就记录下单机Centos7部署ELK的过程和遇到的问题. 系统要求:Centos7(内核3.5及以上,2核4G) elk版本:6.2. ...
- GloVe损失函数的理解
简介 GloVe是一种非常简单快速的训练词向量的算法.与复杂的word2vec相比,其是一个log双线性模型,仅通过一个简单的损失函数就能够得到很好的结果. (1)J=∑i,jNf(Xi,j) ...
- Android--通过Application传递数据
在整个Android程序中,有时需要保存某些全局的数据(如:用户信息),方便在程序的任何地方调用.在Activity之间数据传递中有一种比较使用的方式,就是全局对象,使用过J2EE的都应该知道Java ...
- 7-Flink的分布式缓存
分布式缓存 Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件,并把它放在taskmanager节点中,防止task重复拉取. 此缓存的工作机制如下:程序注 ...
- SpringCloud学习5-如何创建一个服务提供者provider
前几篇主要集中在注册中心eureka的使用上,接下来可以创建服务提供者provider来注册到eureka. demo源码见: https://github.com/Ryan-Miao/spring- ...
- Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding)
首先感谢大家对Magicodes.NET框架的支持.就如我上篇所说,框架成熟可能至少还需要一年,毕竟个人力量实在有限.希望有兴趣的小伙伴能够加入我们并且给予贡献.同时有问题的小伙伴请不要在群里询问问题 ...
- 【SqlServer系列】数据库三大范式
1 概述 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分:第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关 ...
- Go标准库:Go template用法详解
本文只介绍template的语法和用法,关于template包的函数.方法.template的结构和原理,见:深入剖析Go template. 入门示例 以下为test.html文件的内容,里面使用了 ...
- 以 SPI 方式获取 SD 卡容量(V2.0)
下面是 SD 卡 V2.0 协议的 CSD 寄存器内容,来自官方手册: 单片机如何确定当前的 SD 卡遵循 V2.0 协议 CSD 寄存器为 128 个位,即 16 个字节.通过检测 CSD 寄存器的 ...
- Sklearn中二分类问题的交叉熵计算
二分类问题的交叉熵 在二分类问题中,损失函数(loss function)为交叉熵(cross entropy)损失函数.对于样本点(x,y)来说,y是真实的标签,在二分类问题中,其取值只可能为集 ...