Python 如何为Django应用程序提供Prophet模型?

Python 如何为Django应用程序提供Prophet模型?,python,django,amazon-web-services,google-cloud-platform,facebook-prophet,Python,Django,Amazon Web Services,Google Cloud Platform,Facebook Prophet,我喜欢Facebook Prophet。我现在想知道从在线web应用程序(Django)访问这些预测的“最佳”方式是什么 要求是我必须每周使用来自Django应用程序(PostgreSQL)的数据来训练/更新我的模型。这些预测将被保存,我希望能够从Django应用程序调用/访问这些数据 在我查看了Google Cloud和AWS之后,我找不到任何能够通过API访问预测的解决方案来承载我的模型 我目前解决这一问题的最佳想法/方法: 1) 每周训练我的模特。预测保存在PostgreSQL中。数据将从

我喜欢Facebook Prophet。我现在想知道从在线web应用程序(Django)访问这些预测的“最佳”方式是什么

要求是我必须每周使用来自Django应用程序(PostgreSQL)的数据来训练/更新我的模型。这些预测将被保存,我希望能够从Django应用程序调用/访问这些数据

在我查看了Google Cloud和AWS之后,我找不到任何能够通过API访问预测的解决方案来承载我的模型

我目前解决这一问题的最佳想法/方法:

1) 每周训练我的模特。预测保存在PostgreSQL中。数据将从Django web应用程序每周导出一次CSV

2) 在我的Flask应用程序中创建一个API,可以访问数据库中的预测

3) 在Django应用程序中,我可以随时调用API并访问数据

我很确定我的方法听起来很颠簸,可能不是这样做的。对于如何更好地解决这个问题,你有什么反馈或想法吗?简言之:

1) 从PostgresSQL数据库预测数据


2) 在Django web应用程序中提供预测。

从Prophet提供预先计算的预测值的最简单方法是从S3或其他文件服务器提供CSV文件。您可以每隔几天刷新一次模型,并将预测输出写入S3

import boto3
from io import StringIO

DESTINATION = bucket_name

def write_dataframe_to_csv_on_s3(dataframe, filename):
    """ Write a dataframe to a CSV on S3 """
    print("Writing {} records to {}".format(len(dataframe), filename))
    # Create buffer
    csv_buffer = StringIO()
    # Write dataframe to buffer
    dataframe.to_csv(csv_buffer, sep=",", index=False)
    # Create S3 object
    s3_resource = boto3.resource("s3")
    # Write buffer to S3 object
    s3_resource.Object(DESTINATION, filename).put(Body=csv_buffer.getvalue())

results = forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].copy()

write_dataframe_to_csv_on_s3(results, output+file_name+".csv")

我访问这个问题的原因之一是我不确定该走哪条路。答案似乎是一个很好的选择。 然而,我对Django应用程序没有太多限制,我正在为具有类似用例的人想出一种更简单的方法

我的解决方案:

  • 我有一个Django项目,一个为我的网站服务的Django应用程序,还有一个用于Prophet模型的Django应用程序
  • Prophet模型每天将被重新训练一次(在某种条件下)
  • 每天训练模型,它预测新数据,并将预测保存到CSV文件(可存储在数据库中)。它还使用pickle存储经过训练的模型
  • 现在,我可以通过在需要的地方导入Django应用程序,访问经过训练的模型和一些预定义的预测
项目层次结构:

project/
    project/
    django-app-for-website/
    django-app-for-prophet/
    manage.py
    requirements.txt
尽管我的项目的性能没有受到太大影响,但现在这不是我的优先事项,但它可以是你的,在这种情况下,我不推荐这种解决方案


如果你在寻找一种最简单的方式来服务先知模型,这就是我能想到的。这只是另一个可能的解决方案。

好主意,我没想过。非常感谢。