使用Modin替换Pandas以提高运行速度 Pandas是单核的,所以我无法使用我主机上24核的CPU。有没有一种办法,可以简单易行地提升Pandas的效率而不大幅更改我的代码?ModinModin官方传送门:https://github.com/modin-project/modin简单地介绍一下Modin是如何通过多进程调度来提升Pandas的效率的:你可以简单地把Modin理解为 Pandas + Multiprocessing, Modin将多进程运行Pandas的过程简化并封装,保留了和原来完全相同的API,这样..
Pandas 官方文档 翻译 本文档用于记录梧承本人学习翻译:梧承联系方式:chenwuji2000@foxmail.com原文链接:User Guide — pandas 1.4.1 documentation不定时更新MultiIndex / advanced indexing 多重索引 / 进阶索引This section covers indexing with a MultiIndex and other advanced indexing featuresSee the Indexing and
Pandas datetime格式的Index保存为parquet文件后读取问题:OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 简单贴一下我在StackOverflow上面的回答问题是由于pandas.datetime格式采用的是int64而parquet将其解析为int96的格式了(具体原理没有深究)这个问题可以通过使用以下代码解决:df.read_parquet(path_file)顺便记录一下如果遇到过大的文件用pd自带的写入会报错如何解决:# -- 写入parquet文件import pyarrow as paimport pyarrow.parquet as pqtable = pa....
Anaconda 虚拟环境创建与常用操作记录 本文用于记录一些关于anaconda 的常用命令和操作有必要认识到使用anaconda 创建虚拟环境进行隔离的重要性,例如:arctic只能安装pandas=1.2.3,更高版本时会报错等问题。有必要接受一定程度的命令行使用, -h 或是 --help 可以提供足够的帮助。创建虚拟环境:conda create -n 环境名称 python=python版本名称conda create -n gusty_test python=3.9每次进入Jupyter lab 或安装库前激活c
向量化回测系列3——数据的重构与转换pivot stack unstack 本篇文章我将介绍如何把数据转换成我们常见的需要的格式我们有数据格式如下:现利用pivot将其转换成我们需要的 windbyfeature 所有股票的对应特征的方式:此处只取出了 S_DQ_OPEN 的数据,可以采用for循环提取所有的特征数据。但是有时候,我们也希望获得 windbystock 每只个股的全部特征的方式,这会稍显复杂:第一步,设置时间和股票为多重索引:第二步,全部stack第三步,根据stock unstack(转换为列索引)第四步,uns...
向量化回测系列2——全市场股票回测 上次我们讲解了如何在单只股票上进行向量化回测:https://blog.csdn.net/weixin_44566452/article/details/123493077现在我们要讲这个方法推广到全市场,一次性在所有股票上测试我们的策略。上次我们提到,向量化回测需要的材料有:1. 收益率矩阵2. 策略条件矩阵那么如果我们希望在全市场的股票上测试,就需要拥有全市场股票的收益率矩阵和策略条件矩阵。这里我们同样采用加减乘除的方式,先计算收益率矩阵:然后计算策略条件矩阵,.
向量化回测系列1——单只股票的回测 在我探索量化的进程中,回测一直是十分重要的一个环节,而其中又分为事件驱动型回测和向量化回测。大家市面上见到的绝大多数在线回测平台,或者是backtrader和vnpy,都是事件驱动型回测,但是究其代码层面,使用的普遍是for循环的需要占用大量内存和运行时间的原理。相较于前者,向量化回测则快速的多的多的多,出结果只要一秒钟都不到的计算,但是这玩意儿我一直在很长时间里都不知道是什么,其实是一个特别简单的事情,因此我在这里分享给所有人。我们常见的数据格式如下:(数据读取采用Arctic高性能数据库我先
dataframe 链式索引 切片 赋值 for循环 内存溢出问题——返回副本和视图的区别 记录一个坑了我两个多小时的隐性问题!!!问题情况:for循环中出现内存溢出,随着for循环内存占用爆炸式增加问题代码:def render_framebymethod(frame, method): result = frame.copy() for col in result.columns: EntryRemoveDate = method(col) for row in range(EntryRemoveDate.shape[0]):..
给定日期查询前第n/后第n个交易日 def query_tradedatebydelta(base_date, delta): # -- assert type(base_date) == pandas._libs.tslibs.timestamps.Timestamp return tradedate.shift(-delta).loc[base_date]query_tradedatebydelta(df.loc[0, 'date_buy'], 0)Out[1]: Timestamp('2021-12-31 0.
Timestamp 查询前/后第n天的日期 def query_datebydelta(base_date, delta): # -- assert type(base_date) == pandas._libs.tslibs.timestamps.Timestamp return base_date + datetime.timedelta(days=delta)仅作记录用法:df['Turnover_10daysbeforebuy'] = df.apply(lambda x: query_J2Turnover(x[.
如何获取每月第一个/最后一个交易日 思路是,获取指数的行情信息,然后利用如下代码进行判断:data['first'] = data['trade_date'].where(data['month'] != data.shift(1)['month'], np.nan)data['last'] = data['trade_date'].where(data['month'] != data.shift(-1)['month'], np.nan)完整代码如下:数据源我用的是wind,大家可以用tushare来替代,获取更简单一些.
如何计算对数收益率和净值化转换 请直接参照函数:def valuetounitcumulatedvalue(data): class result(object): def __init__(self): pass result.logreturn = np.log(data / data.shift(1)) result.unitcumaltedvalue = (result.logreturn.cumsum() + 1).dropna(axis=0, how='a
Wind万得PythonAPI量化接口常用小工具——时序数据处理及工作日前推查询 前段时间帮中信的前老板编写了一个数据整合的程序,用到了一些自己编写的组件感觉特别好用,在此进行分享。首先是非时间序列数据的转化:def createcleandata(wind_data): class result(object): pass result.Codes = wind_data.Codes result.Fields = wind_data.Fields result.Times = wind_data.Times resu
《重构》——Python代码版本_Chpt1.8-1.9(第一章完结) 原文是JS代码写的,我试图用Python改写,第一章上半部分的内容可以参考:重构——Python代码版本_Chpt1-1.6第一章下半部分的内容包括了很多多态重构的内容,因此单独拉出来一个帖子。JS的代码和Python的实现形式在很多处还是有一些不同,在阅读的时候不要过于关注代码的形式,要尝试去解读背后的内容。我会在代码中加入一部分注释用于解释其意图,我觉得已经很清晰了。如果以后有多余的时间,我还会加入流程图来对程序进行说明。import math# 定义数据源的结构class.
重构——改善既有代码的设计(第一章)——Python版本代码 最近在看重构这本书,但是里面全是JS语言写的,因为我一直在用python,因此尝试将其写成python语言的形式。代码会一点点的更新,有些地方因为语言的不同采取了其他方式实现,但是应该都是看得懂的。import mathplays = dict( hamlet={'name': 'Hamlet', 'type': 'tragedy'}, as_like={'name': 'As You Like It', 'type': 'comedy'}, othello={'nam
时间序列数据整理及日期分离(如何从datetime中分离week、星期等)——以Tushare的沪深三百数据为例 问题:如何对datetime进行日期分离?例如,如果我希望知道星期几是否存在日历效应,那么该怎么做?(星期四最容易跌)方式有很多种,我这里给出我觉得方便的两种:我直接给出分离日期的部分代码:这里面用到了一些lambda匿名函数,看起来比较装逼,但是实际上和另外一种方式是一样的(但是第二种方式无法提取星期几)顺便提一嘴,对于pandas的dataframe来说,apply是比for循环要快的多的,而且看上去也简洁很多。# 按照时间排序df['trade_date'] = pd.to_.
如何从巨潮资讯爬取股票公告 z如何做一个难以被反制的爬虫——Selenium+Python爬取新股材料实例之前我写了上面这篇文章来说明如何从深交所或者上交所的网站爬取文件,但是这个爬虫是有点不稳定的,因为网速的原因。偶然间我发现巨潮资讯已经整合了所需要的公告,因此又写了一个针对巨潮资讯的爬虫。相较来说,这个爬虫简洁的多,稳定性也要好得多。但是还有很多可以提升的空间。from selenium import webdriverfrom time import sleepimport pan
一个常见的入门坑——如何解决Python库及依赖库安装问题 问题:如何解决Python库安装及其依赖库安装问题有一个事情我觉得是可能是很多人刚开始入坑python的第一个坑,就是依赖库问题。例如在安装tushare库时,我们使用:pip install tushare在安装好之后,运行程序,系统依旧会报错说未安装某某库如:这个问题就是:未安装依赖库那么如何解决这个问题呢,我一般的解决方案是直接用pycharm的preference里面的python interpreter里面去添加package,这个方法会自动安装所有依赖库,而且可以避免.
如何在dataframe中根据值查找值所在位置——一个似乎被很多人忽略的问题 上一篇文章我们讲到如何用一行代码检索目标字符串是否包含一个或多个关键字:如何一行代码检索是否包含list中的一个或全部目标关键词?但是这行代码是我在处理另一个问题时遇到并顺带解决的:已知值,如何根据值来查找其所对应的位置呢?据我所知,在查找了csdn和pandas的官方文档之后,目前都还没有看到过有人提出过这一问题的解决方案。pandas似乎并没有提供一个方法可以直接根据值查找位置,而只能在至少确定行或者列其中一项以后才能进行查找。例如:当我们先给出一个数据框:name = ['小