Jos*_*a G 6 python signal-processing time-series trendline trend
有哪些好的算法可以自动检测时间序列数据的趋势或绘制趋势线(上升趋势、下降趋势、无趋势)?如果您能为我指出任何好的研究论文或 python、R 或 Matlab 库,我将不胜感激。
理想情况下,该算法的输出将有 4 列:
从时间
到时间
非常感谢您的参与。
我有一个类似的问题 - 想要对具有相似趋势的片段进行时间序列分割。对于该任务,您可以使用趋势分类器Python 库。它可以通过 pip 安装 ( pip3 install trend-classifier)。
下面是一个从 YahooFinance 获取时间序列数据并进行分析的示例。
import yfinance as yf
from trend_classifier import Segmenter
# download data from yahoo finance
df = yf.download("AAPL", start="2018-09-15", end="2022-09-05", interval="1d", progress=False)
x_in = list(range(0, len(df.index.tolist()), 1))
y_in = df["Adj Close"].tolist()
seg = Segmenter(x_in, y_in, n=20)
seg.calculate_segments()
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用趋势线和段边界绘制时间序列:
seg.plot_segments()
Run Code Online (Sandbox Code Playgroud)

您可以检查有关每个段的详细信息(例如,斜率的正值表示上升趋势,负值表示下降趋势)。要查看有关索引段的信息3:
from devtools import debug
debug(seg.segments[3])
Run Code Online (Sandbox Code Playgroud)
您可以使用Segmenter.segments.to_dataframe()生成 Pandas DataFrame 的方法以表格形式获取有关所有段的信息。
seg.segments.to_dataframe()
Run Code Online (Sandbox Code Playgroud)
有一个参数控制“泛化”因素,即您可以尝试将趋势线拟合到较小的时间序列范围 - 您最终会得到大量的线段,或者您可以选择跨越更大范围的线段时间序列的一部分(更一般的趋势线),最终将时间序列分为更少的部分。为了控制该行为,在初始化时Segmenter()(例如,Segmenter(x_in, y_in, n=20)使用不同的n参数值。越大,n泛化性越强(段越少)。
免责声明:我是趋势分类器包的作者。
| 归档时间: |
|
| 查看次数: |
5037 次 |
| 最近记录: |