【问题标题】:Ramer–Douglas–Peucker algorithm (RDP) Python implementation: How to Plot it and use it with dataframes?Ramer–Douglas–Peucker 算法 (RDP) Python 实现:如何绘制它并将其与数据帧一起使用?
【发布时间】:2021-10-09 03:27:15
【问题描述】:

我只是想使用 Ramer–Douglas–Peucker 算法 (RDP) 及其 Python 实现来减少价格图表中的 jitternez。

所以我尝试了以下方法:

import yfinance as yf
import matplotlib.pyplot as plt
import numpy as np
from rdp import rdp


stock = 'AMZN'
start = '2020-11-01'

df = yf.download(stock , start=start)



nfx = []
nfy = []

for index, row in df.iterrows():
    
    x_data = nfx.append(index)
    y_data = nfy.append(row['Close'])
rdpp = [rdp(np.array([nfy]), epsilon=0.2)]


plt.plot(rdpp)
plt.show()

但这不起作用。 要么我收到错误消息,要么是一个空的情节。

我可以做/改进什么来完成这项工作?

这是文档,但它很小,我真的不知道如何在我的情况下应用它。 --> https://pypi.org/project/rdp/

非常感谢,祝你好运

【问题讨论】:

    标签: python pandas algorithm matplotlib


    【解决方案1】:

    rdp 函数需要一个 N×2 数组作为输入,其中 N 是点数,2 是维度(也可以是 3D)。

    构建此二维数组的一种方法是使用numpy's column_stack 函数。此外,index 必须转换为数值,例如秒数。

    import numpy as np
    import matplotlib.pyplot as plt
    
    import yfinance as yf
    from rdp import rdp
    
    stock = "AMZN"
    start = "2020-11-01"
    
    dataframe = yf.download(stock, start=start)
    
    nfx, nfy = [], []
    for index, row in dataframe.iterrows():
        nfx.append(index.timestamp())
        nfy.append(row["Close"])
    
    # print(nfx)
    points = np.column_stack([nfx, nfy])
    print("points.shape:", points.shape)
    points_after_rdp = rdp(points, epsilon=80)
    
    # Graph
    plt.plot(points_after_rdp[:, 0], points_after_rdp[:, 1], color="red", label="after RDP")
    plt.plot(
        points[:, 0], points[:, 1], color="black", label="before", alpha=0.7, linewidth=1
    )
    plt.xlabel("time (s)")
    plt.ylabel("Close")
    plt.legend()
    plt.show()
    

    图表如下所示:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2021-05-16
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多