pandas 在julia中获得完整数据长度上的指数移动平均值

rryofs0p  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(162)

我想用ewma(指数加权移动平均)函数,在Python的pandas库中提供,具有等效的Julia函数。在Julia中,有一个名为MarketTechnicals.ema(m)的函数用于计算EMA值。然而,该函数从大小为n的数据序列中的第m个元素开始计算值,因此,结果数据的长度为(n-m+1)。虽然这是可以理解的,因为跨度为m,但无论跨度长度是多少,panda ewma函数都从第一个元素开始计算,如下所示:

#python
import pandas as pd
data = {"val": [1, 2, 3, 4, 5, 6]}
df = pd.DataFrame(data)
df['val'].ewm(m).mean()     
#output m=3
0    1.000000
1    1.571429
2    2.189189
3    2.851429
4    3.555698
5    4.299079

如果df ['val']的长度为n,则此Python代码将返回n个值。但Julia代码段后面的长度为(n-m+1)

# julia
using DataFrames, MarketTechnicals
df = DataFrame(val = [1, 2, 3, 4, 5, 6])
ema(df.val,m)              
#output m=3
4×1 Matrix{Float64}:
 2.0
 3.0
 4.0
 5.0

我偶然发现了一个repo,它允许在Julia中使用pandas功能,但我不清楚语法,也无法在网上找到任何示例。
有人能帮我用pandas ewma函数的Julia等价物吗?

cu6pst1q

cu6pst1q1#

注:以下代码受this blog中所提出方法的启发。在以下函数中,a是平滑系数:

julia> function ewma(obs::Vector, a::Float64)
           EWMA = Vector{Float64}(obs)
           for t∈axes(obs, 1)[2:end]
               EWMA[t] = a*obs[t]+(1-a)*EWMA[t-1]
           end
           EWMA
       end
ewma (generic function with 1 method)

julia> ewma([40, 45, 43, 31, 20], 0.3)
5-element Vector{Float64}:
 40.0
 41.5
 41.949999999999996
 38.66499999999999
 33.06549999999999

相关问题