1

这是我在这里的第一个问题,我也是 Python 的新手(没有 CS 背景,我必须补充)!

我正在尝试实现三重指数平滑来进行预测。我的数据基于 AIS 数据,我特别关注 SOG(对地速度)值。我遵循的数学方法是三重指数平滑模型。

我仍然只遵循 Python 的基础知识,并且正在努力找出迭代部分。然而,我期望的是从 CSV(包括时间和 SOG)中读取数据并预测速度值,这样我就可以比较预测值和实际值。

是我使用 atm 的示例/测试数据表。

我尝试对方程式部分进行编码(如下所示),我知道它非常草率。但我不想一无所有地来到这里。

alpha = 0.9
m = 3


def test(ssv_current, x_current, ssv_previous, dsv_previous, tsv_previous):
    # ssv = single smoothing value (s'(t-1) and s'(t))
    ssv_current = (alpha * x_current) + ((1 - alpha) * ssv_previous)
    # dsv = double smoothing value (s''(t-1) and s''(t))
    dsv_current = (alpha * ssv_current) + ((1 - alpha) * dsv_previous)
    # tsv = triple smoothing value (s'''(t-1) and s'''(t))
    tsv_current = (alpha * dsv_current) + ((1 - alpha) * tsv_previous)
    at = (3 * ssv_current) - (3 * dsv_current) + tsv_current

    bt = ((alpha ** 2) / (2 * ((1 - alpha) ** 2))) * (((6 - 5 * alpha) * ssv_current) - ((10 - 8 * alpha) * dsv_current)
                                                      + ((4 - 3 * alpha) * tsv_current))
    ct = ((alpha ** 2) / ((1 - alpha) ** 2)) * (ssv_current - (2 * dsv_current) + tsv_current)

    ft = at + (m * bt) + (0.5 * (m ** 2) * ct)  # mth predicted value at time t

我知道我的问题和代码看起来都很垃圾,但我期待从这个社区学习。我以前只使用过 MatLab,这里的任何提示都会对我有帮助。蒂亚!

编辑:我意识到我的帖子并没有传达我真正想要的东西。基本上,我希望代码一个接一个地读取速度值并遍历它并打印预测值。

4

1 回答 1

0

一个非常基本的迭代器是

import csv

datafile = open('datafile.csv', 'r')
csv_file = csv.reader(datafile)

for row in csv_file:
   print(row)

每个“行”项目都有数据

参考:CSV 库参考

你也可以对 pandas 做同样的事情。

import pandas as pd

df = pd.read_csv('datafile.csv')

现在,您不需要迭代。只需一次使用整个列进行计算,pandas 就会创建这些结果。例如

df['total'] = df['a'] + df['b']

就像那样 参考:熊猫

于 2020-12-24T07:15:03.140 回答