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格式。

例如下面这样的一个数据:

我们可以很简单的用一个语句就把pandas保存下来:
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后,返回的逻辑和有多种日期是不一样的,大家可以自行研究一下,还是很有趣的。

量化投资中常用python代码分析(一)相关推荐

  1. Python代码分析工具:PyChecker、Pylint

    1 概述 PyChecker是Python代码的静态分析工具,它能够帮助查找Python代码的bug,而且能够对代码的复杂度和格式等提出警告. PyChecker可以工作在多种方式之下.首先,PyCh ...

  2. 从入门到入土:机器学习part01|python|代码分析|初步学习

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  3. 静态代码分析工具列表--常用静态代码分析工具介绍

    代码检测简介 本文是一个静态代码分析工具的清单,但是为公司产品需要付费使用.共有37个公司,有些公司包含多个工具.其中27个公司有多语言 工具,1个公司为PHP工具.2个公司为.NET工具.1个公司为 ...

  4. 多标签算法:MASP 的理论与Python代码分析

    本篇文章是基于导师与师姐发布的论文: Xue-Yang Min, Kun Qian, Ben-Wen Zhang, Guojie Song, and Fan Min, Multi-label acti ...

  5. 【Python】数据预处理之将类别数据转换为数值的方法(含Python代码分析)

    在进行Python数据分析的时候,首先要进行数据预处理.但是有时候不得不处理一些非数值类别的数据,遇到这类问题时该怎么解决呢? 目前为止,总结了三种方法,这里分享给大家. 一.通过mapping方式, ...

  6. 常用python代码合集

    1.数据处理 1.1连接mysql数据库并读取数据成dataframe格式 import pandas as pd import numpy as np import matplotlib.pyplo ...

  7. 常用Python代码

    常见的for循环 去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片. 1 Value = [(10,150),(100,200),(180,230)] for i,(minV ...

  8. python三大神器_常用Python代码及花式写法(函数调用自身+三大神器)

    备注:第33课已经OK 一.urllib from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as sou ...

  9. python--如何使用 Pylint 来检查分析Python 代码

    Pylint 是什么 Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考 ...

最新文章

  1. Centos 64位 Install certificate on apache 即走https协议
  2. 获取用户的IP地址的三个属性的区别
  3. JAVA IO 随笔记录
  4. linux中常用的压缩、解压命令详解
  5. 蚂蚁借呗和京东金条全面对比,哪个更划算?
  6. MUI 拍照和从系统相册选择图片上传
  7. Netty构建游戏服务器(一)--基本概念与原理
  8. 精选36道SQL练习题解析 from(原50道SQL练习题)
  9. 用拉普拉斯变换求零状态响应_什么是UPS?为什么用UPS?关于UPS电源的知识都在这里!...
  10. 微型计算机原理与接口技术AD实验报告,微机原理与接口技术AD转换综合实验报告.doc...
  11. 高速PCB设计规范(二)
  12. 第三章 part1 中值定理
  13. 如何把几张图片整合到一张图片?
  14. wpf toolbar右对齐_侧方停车是与旁车对齐还是反光镜对B柱?有什么停车技巧吗
  15. 生活琐事--纯属无聊
  16. 如何提高soc算法精度
  17. Boost.Interprocess.file_mapping内存映射文件
  18. PostgreSQL主从数据库数据同步
  19. 备考通信复试过程中的一些知识点总结梳理——信源编码
  20. fedora33和Debian10安装轻量桌面

热门文章

  1. safari浏览器的兼容
  2. 【Comsol学习】二维非稳态热传导问题
  3. 台式计算机屏幕亮度在哪调,电脑亮度怎么调?教您电脑亮度在哪里调
  4. ​基于光通信的6G水下信道建模综述
  5. Pixelmator Pro Mac(图像编辑软件)
  6. 做PPT只会用黑体和宋体?这些可商用字体瞬间提升你的PPT档次
  7. IDEA更改中文字体
  8. Python 实现键鼠操作
  9. dns 劫持是什么意思,DNS劫持有啥解决办法?
  10. KWS_关键词命名+识别率和误识别率