首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用dask高效并行化时间序列预测?

如何利用dask高效并行化时间序列预测?
EN

Stack Overflow用户
提问于 2018-03-21 21:41:22
回答 2查看 2.6K关注 0票数 5

我正在尝试使用dask并行处理python中的时间序列预测。数据的格式是,每个时间序列都是一列,它们有一个月日期的共同索引。我有一个自定义预测函数,它返回带有拟合值和预测值的时间序列对象。我想要将这个函数应用于dataframe的所有列(所有时间序列),并返回一个新的dataframe,并将所有这些序列上传到DB。我通过运行以下代码使代码工作:

代码语言:javascript
运行
复制
data = pandas_df.copy()
ddata = dd.from_pandas(data, npartitions=1)
res = ddata.map_partitions(lambda df: df.apply(forecast_func, 
    axis=0)).compute(get=dask.multiprocessing.get)

我的问题是,Dask中是否有一种按列而不是行进行分区的方法,因为在这个用例中,我需要保持有序的时间索引,就像预测函数正确工作一样。

如果不是,我将如何重新格式化数据以使高效的大规模预测成为可能,并且仍然以我需要的格式返回数据到DB?

数据格式示例

EN

Stack Overflow用户

回答已采纳

发布于 2018-03-22 16:59:47

谢谢你的帮助,我真的很感激。我使用了dask.delayed解决方案,它运行得很好,仅使用本地集群就需要大约1/3的时间。

对于任何感兴趣的人,我已经实现的解决方案:

代码语言:javascript
运行
复制
from dask.distributed import Client, LocalCluster
import pandas as pd
import dask

cluster = LocalCluster(n_workers=3,ncores=3)
client = Client(cluster)

#get list of time series back
output = []
for i in small_df:
    forecasted_series = dask.delayed(custom_forecast_func)(small_df[i])
    output.append(forecasted_series)

total = dask.delayed(output).compute()

#combine list of series into 1 dataframe
full_df = pd.concat(total,ignore_index=False,keys=small_df.columns,names=['time_series_names','Date'])
final_df = full_df.to_frame().reset_index()
final_df.columns = ['time_series_names','Date','value_variable']
final_df.head()

这为您提供了熔化的dataframe结构,因此,如果您希望将该系列作为列,则可以使用

代码语言:javascript
运行
复制
pivoted_df = final_df.pivot(index='Date', columns='time_series_names', values='value_variable')

df在熊猫数据中是这样的格式,日期是索引。

票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49416980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档