- 博客(24)
- 收藏
- 关注
原创 使用Modin替换Pandas以提高运行速度
Pandas是单核的,所以我无法使用我主机上24核的CPU。有没有一种办法,可以简单易行地提升Pandas的效率而不大幅更改我的代码?ModinModin官方传送门:https://github.com/modin-project/modin简单地介绍一下Modin是如何通过多进程调度来提升Pandas的效率的:你可以简单地把Modin理解为 Pandas + Multiprocessing, Modin将多进程运行Pandas的过程简化并封装,保留了和原来完全相同的API,这样..
2022-04-16 16:27:33
1029
翻译 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
2022-04-01 13:45:07
1605
原创 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....
2022-04-01 09:52:37
3036
原创 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
2022-03-24 10:32:56
863
原创 向量化回测系列3——数据的重构与转换pivot stack unstack
本篇文章我将介绍如何把数据转换成我们常见的需要的格式我们有数据格式如下:现利用pivot将其转换成我们需要的 windbyfeature 所有股票的对应特征的方式:此处只取出了 S_DQ_OPEN 的数据,可以采用for循环提取所有的特征数据。但是有时候,我们也希望获得 windbystock 每只个股的全部特征的方式,这会稍显复杂:第一步,设置时间和股票为多重索引:第二步,全部stack第三步,根据stock unstack(转换为列索引)第四步,uns...
2022-03-15 09:42:33
632
原创 向量化回测系列2——全市场股票回测
上次我们讲解了如何在单只股票上进行向量化回测:https://blog.csdn.net/weixin_44566452/article/details/123493077现在我们要讲这个方法推广到全市场,一次性在所有股票上测试我们的策略。上次我们提到,向量化回测需要的材料有:1. 收益率矩阵2. 策略条件矩阵那么如果我们希望在全市场的股票上测试,就需要拥有全市场股票的收益率矩阵和策略条件矩阵。这里我们同样采用加减乘除的方式,先计算收益率矩阵:然后计算策略条件矩阵,.
2022-03-15 09:20:16
1528
原创 向量化回测系列1——单只股票的回测
在我探索量化的进程中,回测一直是十分重要的一个环节,而其中又分为事件驱动型回测和向量化回测。大家市面上见到的绝大多数在线回测平台,或者是backtrader和vnpy,都是事件驱动型回测,但是究其代码层面,使用的普遍是for循环的需要占用大量内存和运行时间的原理。相较于前者,向量化回测则快速的多的多的多,出结果只要一秒钟都不到的计算,但是这玩意儿我一直在很长时间里都不知道是什么,其实是一个特别简单的事情,因此我在这里分享给所有人。我们常见的数据格式如下:(数据读取采用Arctic高性能数据库我先
2022-03-15 08:45:57
3662
6
原创 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]):..
2022-03-05 07:57:34
660
原创 给定日期查询前第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.
2022-02-24 13:24:09
579
原创 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[.
2022-02-23 20:12:17
469
原创 如何获取每月第一个/最后一个交易日
思路是,获取指数的行情信息,然后利用如下代码进行判断: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来替代,获取更简单一些.
2022-01-18 13:01:10
5297
原创 如何计算对数收益率和净值化转换
请直接参照函数: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
2022-01-14 14:00:16
1335
原创 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
2022-01-11 09:58:21
2792
原创 《重构》——Python代码版本_Chpt1.8-1.9(第一章完结)
原文是JS代码写的,我试图用Python改写,第一章上半部分的内容可以参考:重构——Python代码版本_Chpt1-1.6第一章下半部分的内容包括了很多多态重构的内容,因此单独拉出来一个帖子。JS的代码和Python的实现形式在很多处还是有一些不同,在阅读的时候不要过于关注代码的形式,要尝试去解读背后的内容。我会在代码中加入一部分注释用于解释其意图,我觉得已经很清晰了。如果以后有多余的时间,我还会加入流程图来对程序进行说明。import math# 定义数据源的结构class.
2021-12-10 16:54:33
779
原创 重构——改善既有代码的设计(第一章)——Python版本代码
最近在看重构这本书,但是里面全是JS语言写的,因为我一直在用python,因此尝试将其写成python语言的形式。代码会一点点的更新,有些地方因为语言的不同采取了其他方式实现,但是应该都是看得懂的。import mathplays = dict( hamlet={'name': 'Hamlet', 'type': 'tragedy'}, as_like={'name': 'As You Like It', 'type': 'comedy'}, othello={'nam
2021-12-03 15:58:23
501
原创 时间序列数据整理及日期分离(如何从datetime中分离week、星期等)——以Tushare的沪深三百数据为例
问题:如何对datetime进行日期分离?例如,如果我希望知道星期几是否存在日历效应,那么该怎么做?(星期四最容易跌)方式有很多种,我这里给出我觉得方便的两种:我直接给出分离日期的部分代码:这里面用到了一些lambda匿名函数,看起来比较装逼,但是实际上和另外一种方式是一样的(但是第二种方式无法提取星期几)顺便提一嘴,对于pandas的dataframe来说,apply是比for循环要快的多的,而且看上去也简洁很多。# 按照时间排序df['trade_date'] = pd.to_.
2021-11-05 20:53:19
1245
原创 如何从巨潮资讯爬取股票公告
z如何做一个难以被反制的爬虫——Selenium+Python爬取新股材料实例之前我写了上面这篇文章来说明如何从深交所或者上交所的网站爬取文件,但是这个爬虫是有点不稳定的,因为网速的原因。偶然间我发现巨潮资讯已经整合了所需要的公告,因此又写了一个针对巨潮资讯的爬虫。相较来说,这个爬虫简洁的多,稳定性也要好得多。但是还有很多可以提升的空间。from selenium import webdriverfrom time import sleepimport pan
2021-10-29 17:21:50
2450
5
原创 一个常见的入门坑——如何解决Python库及依赖库安装问题
问题:如何解决Python库安装及其依赖库安装问题有一个事情我觉得是可能是很多人刚开始入坑python的第一个坑,就是依赖库问题。例如在安装tushare库时,我们使用:pip install tushare在安装好之后,运行程序,系统依旧会报错说未安装某某库如:这个问题就是:未安装依赖库那么如何解决这个问题呢,我一般的解决方案是直接用pycharm的preference里面的python interpreter里面去添加package,这个方法会自动安装所有依赖库,而且可以避免.
2021-10-27 23:30:18
1799
原创 如何在dataframe中根据值查找值所在位置——一个似乎被很多人忽略的问题
上一篇文章我们讲到如何用一行代码检索目标字符串是否包含一个或多个关键字:如何一行代码检索是否包含list中的一个或全部目标关键词?但是这行代码是我在处理另一个问题时遇到并顺带解决的:已知值,如何根据值来查找其所对应的位置呢?据我所知,在查找了csdn和pandas的官方文档之后,目前都还没有看到过有人提出过这一问题的解决方案。pandas似乎并没有提供一个方法可以直接根据值查找位置,而只能在至少确定行或者列其中一项以后才能进行查找。例如:当我们先给出一个数据框:name = ['小
2021-10-20 21:36:00
10959
原创 如何一行代码检索是否包含list中的一个或全部目标关键词?
解决方案:直接给出解决方案target_word = ['存在1', '存在2', '不存在3']any([key_word in text for key_word in target_word])all([key_word in text for key_word in target_word])需求:检索字符串是否包含某些关键词如果我们有这样一个需求,检测字符串中是否包含某一关键词,那么可以简单地写成:target_file = []text = '2020-01-07
2021-10-20 14:46:10
587
原创 如何做一个难以被反制的爬虫——Selenium+Python爬取新股材料实例
最近实习的领导给了我一个任务,需要先下载发行的新股的新股发行公告和配售结果公告,然后再进行处理。因此为了简化流程我把这个获取文件并重命名的过程写了个程序。如果你需要爬取一个网站,request等常见爬虫方式早就被严防死守,而你不想处理复杂的反爬虫情况,那么你需要什么框架呢?没错!就是Selenium:一个“按键精灵”一样的库,可以模拟人工操作来完成一系列步骤而不被网页发现。(而且越蠢的方式就是越难发现的,毕竟如果你的爬虫并不会对网页造成很大的危害,那么他也没必要冒着不小心干掉正常用户的风险来处理你)
2021-10-19 15:51:50
549
原创 Tushare数据本地化+高性能数据库Arctic
在上一篇文章我们从Tushare平台获取数据并保存为.csv文件之后,又有一个问题浮现水面:如果我们需要读取数据,那么通过什么方式读取数据最快呢?一个免费的次优解:根据VNPY官方公众号给出的测试结果,他们的DolphinDB在读取方面是最快的,应用层面最多的情况就是读取数据。但是这个海豚数据库似乎需要付费~于是我将目光看向了排名第二的Arctic。关于Arctic,可以直接上github看他们的官方文档。但是简单来说Arctic数据库是基于MongoDB的,但是针对数据读写进.
2021-10-18 19:54:18
2664
1
原创 Tushare数据本地化多进程版本——如何快速一次性获取全部股票数据
在我自己早期使用tushare进行股票数据获取的时候遇到一个问题:如何快速获取全市场所有股票的行情数据呢?一般来说,我们可以采用for循环的方式:def Get_stock_basicinfo(): stock_basicinfo = pro.stock_basic(list_status='L') return stock_basicinfo# 设置股票池stock_list = list(stock_basic_info['ts_code'])for stock in
2021-10-18 18:04:36
2040
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人