Jas*_*rgh 6 python python-2.7 pandas numba
我有一个包含1,500,000行的DataFrame.这是我从QuantQuote.com购买的一分钟级别的股票市场数据.(开盘价,最高价,最低价,收盘价,成交量)我正在尝试进行一些自制的股市交易策略回溯测试.用于处理事务的直接python代码太慢了,我想尝试使用numba来加快速度.问题是numba似乎不适用于pandas功能.
谷歌搜索发现了一个令人惊讶的缺乏关于使用熊猫与大熊猫的信息.这让我想知道我是否因为考虑它而犯了错误.
我的设置是Numba 0.13.0-1,Pandas 0.13.1-1.Windows 7,MS VS2013与PTVS,Python 2.7,Enthought Canopy
我现有的Python + Pandas内环具有以下一般结构
然后我使用DataFrame.iterrows来处理DataFrame.
我尝试了各种优化,但它仍然没有我想要的那么快.并且优化会导致错误.
我想用numba来处理行.是否有接近这个的首选方法?
因为我的DataFrame实际上只是一个浮点矩形,所以我正在考虑使用像DataFrame.values这样的东西来访问数据,然后编写一系列使用numba来访问行的函数.但是这会删除所有时间戳,我不认为这是一个可逆的操作.我不确定从DataFrame.values获得的值矩阵是否保证不是数据的副本.
任何帮助是极大的赞赏.
Numba 是一个支持 NumPy 的即时编译器。您可以将 NumPy 数组作为参数传递给 Numba 编译的函数,但不能传递 Pandas 系列。
您唯一的选择,仍然是 2017-06-27,是使用 Pandas 系列值,它们实际上是 NumPy 数组。
此外,您询问这些值是否“保证不是数据的副本”。它们不是副本,您可以验证:
import pandas
df = pandas.DataFrame([0, 1, 2, 3])
df.values[2] = 8
print(df) # Should show you the value `8`
Run Code Online (Sandbox Code Playgroud)
在我看来,Numba 是处理市场数据的一种很好的(如果不是最好的)方法,并且您只想坚持使用 Python。如果您想获得巨大的性能提升,请务必使用@numba.jit(nopython=True)(请注意,这将不允许您在 JIT 编译的函数中使用字典和其他 Python 类型,但会使代码运行得更快)。
请注意,您正在使用的某些指标可能已经在 Pandas 中有效实现,因此请考虑使用 Pandas 预先计算它们,然后将值(NumPy 数组)传递给您的 Numba 回测函数。
| 归档时间: |
|
| 查看次数: |
6893 次 |
| 最近记录: |