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. JS:1.2,控制语句(if,if else,for,switch,while,do while)
  2. 面试彩蛋1:斐波那契数列用递归函数、循环函数实现
  3. hive 分区_Hive下数据仓库历史拉链表如何加工,分区键该如何选择
  4. 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING (SORT)
  5. for update引发了血案
  6. IBC 2019 五篇文章阅读笔记
  7. C语言学习笔记->const和define区别
  8. 二维码内容过多,生成的二维码太复杂,导致扫码的时候,过慢或者扫不出来解决方案。附二维码生成、解析工具类
  9. 软考中的网络工程师难考吗?
  10. R语言机器学习xgboost实例,油管上的关于xgboost的例子
  11. SwiftUI内功之如何设计Struct和Class不要和陌生人说话
  12. Arduino应用开发——通过小爱同学控制灯光
  13. 计算机图形学基础知识-光照材质
  14. matlab 分类学习工具箱 Classification Learner的使用及导出其生成的图,混淆矩阵confusion matrix的画法
  15. 分享一个简单、便宜配置https安全证书的方法(10元/年)
  16. 计算机心理测试题,计算机也能当“心理医生” “知心情感计算”带你领略脑科学前沿技术...
  17. Linux:系统进程---->查看命令【ps:静态查看进程】【top:动态查看进程】
  18. 测开高阶技术- Docker/环境布置/容器 讲清楚了,全套教程
  19. 近10年的网盘发展史(那些年你的网盘存了多少资料)
  20. 办公套件Office LTSC 2021中文

热门文章

  1. 迈微科讯 | 最新科技发展资讯
  2. 阿里云生活物联网平台搭建
  3. 局域网搭建Linux镜像源
  4. pycharm连接MySQL数据库
  5. 【近3万字分享】《Android开发之路——10年老开发精心整理分享》
  6. Android adb使用总结记录
  7. vue项目- v-lazy懒加载 图片没有出来之前 loding的图标占位
  8. 三色球问题python_面试题-三色球问题
  9. 12个同父异母的孩子都有自闭症,简历造假的捐精者吸引了全球顶级专家
  10. Machine Learning in Action -- AdaBoost