python - 使用日期时间对象进行简单回归
问题描述
我从 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()
解决方案
问题
问题是,要使回归起作用,您需要两个轴的数值数据。要将日期时间转换为数字格式,我们可以将它们转换为 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 是等效的时间戳对象。
推荐阅读
- eclipse - 为什么 Jenkins 会更改我的工作空间路径?
- laravel - 当单击外部 div 时,vuejs 停止传播单击
- javascript - useEffect 缺少依赖项(使用 useContext 而不是 useState 时)
- javascript - 如何获取 DOM 中渲染的 Vue 组件的数量?
- python - Python:“myvar = 1000”有什么作用?
- tcl - 在 tcl 中打开 gnome-terminal 并运行脚本
- php - 有人知道如何根据字符串名称更改颜色吗?
- python - fernet 密钥错误“Fernet 密钥必须是 32 个 url 安全的 base64 编码字节”
- javascript - WP_NAV_MENU 不起作用,包括我的@Media 查询
- google-api - 通过 Google Drive API 获取共享驱动器创建者