首页 > 解决方案 > 使用日期时间对象进行简单回归

问题描述

我从 Yahoo Finance 导入了一些数据并将其保存到 csv。然后我将数据解析为两个数组:时间和价格。我将价格转换为浮点数,将日期转换为日期时间对象。但是,当我尝试使用该数据运行回归时,我收到此错误:

“TypeError:输入类型不支持 ufunc 'isfinite',并且根据转换规则 ''safe'' 无法安全地将输入强制转换为任何支持的类型”

如何使摘要起作用?任何建议表示赞赏。我的代码如下

def data_to_array(ticker):
   dates = []
   prices = []

   data = csv.reader(open('path', 'r+'), delimiter = ",", quotechar = '|')

   for row in data:
       dates.append(row[0])
       prices.append(row[1])


   for i in range(0, len(prices)):
       prices[i] = float(prices[i])

   for j in range(len(dates)):
       dates[j] = datetime.strptime(dates[j], '%Y-%m-%d')

   return(dates, prices)

这是我的回归函数:

def simple_regression(dates, prices):

    y = prices
    x1 = dates

    print(x1)

    x = sm.add_constant(x1)
    results = sm.OLS(y,x).fit()
    results.summary()  

标签: python

解决方案


问题

问题是,要使回归起作用,您需要两个轴的数值数据。要将日期时间转换为数字格式,我们可以将它们转换为 UTC 时间戳。

解决方案

在 Python 中,您可以使用此函数来获取日期时间对象的 UTC 格式:

timestamp = dt.replace(tzinfo=timezone.utc).timestamp()

其中 timestamp 是 UTC 时间戳,dt 是日期时间对象。

因此将其合并到您的代码中:

换行

x1 = dates

并将其替换为

x1 = [dt.replace(tzinfo=timezone.utc).timestamp() for dt in dates]

注意:由于 UTC 时间戳是自 1970 年以来的秒数,因此您的斜率将以秒为单位。如果您正在绘制图形,x 轴将以秒为单位。

要将一组 UTC 时间戳转换回日期时间对象:

   datetimes = [datetime.utcfromtimestamp(timestamp) for timestamp in timestamps]

其中 timestamps 是 UTC 时间戳,而 datetimes 是等效的时间戳对象。


推荐阅读