如何为我的 Django 应用程序提供 Prophet 模型?
How to serve a Prophet model for my Django application?
我 created a model 使用 Facebook Prophet。我现在想知道从在线 Web 应用程序 (Django) 访问这些预测的 "best" 方法是什么。
要求是我必须每周 train/update 我的模型使用来自我的 Django 应用程序 (PostgreSQL) 的数据。预测将被保存,我希望能够 call/access 从我的 Django 应用程序中获取这些数据。
在我研究了 Google Cloud 和 AWS 之后,我找不到任何可以通过 API.
访问预测的方式托管我的模型的解决方案
我现在最好idea/approach解决这个问题:
1) Build a Flask application 每周训练我的模型。预测保存在 PostgreSQL 中。数据将从我的 Django 网络应用程序每周导出 CSV。
2) 在我的 Flask 应用程序中创建一个 API,它可以从数据库访问预测。
3) 在我的 Django 应用程序中,我可以调用 API 并在需要时访问数据。
我很确定我的方法听起来很坎坷,而且可能不是它的实现方式。您对如何更好地解决它有任何反馈或想法吗?简而言之:
1) 从 PostgresSQL 数据库预测数据。
2) 在 Django 网络应用程序中提供预测服务。
从 Prophet 提供 pre-calculated 预测值的最简单方法是从 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 应用程序,以及一个 Django 应用程序 用于先知模型。
- Prophet 模型每天将被重新训练一次(在某些情况下)。
- 每天训练模型,它都会预测新数据并将预测保存到 CSV 文件(可以存储在数据库中)。它还使用 pickle.
存储训练模型
- 现在,我可以通过 导入 Django 应用访问 训练模型 和一些 预定义预测 我需要的地方。
项目层次结构:
project/
project/
django-app-for-website/
django-app-for-prophet/
manage.py
requirements.txt
尽管我的项目的性能没有受到太大影响,但它现在不是我的优先事项,但它可以是你的,在这种情况下,我不会推荐这个解决方案。
如果您正在寻找为 Prophet 模型提供服务的最简单方法,这就是我能想到的。只是另一个 可能的 解决方案。
我 created a model 使用 Facebook Prophet。我现在想知道从在线 Web 应用程序 (Django) 访问这些预测的 "best" 方法是什么。
要求是我必须每周 train/update 我的模型使用来自我的 Django 应用程序 (PostgreSQL) 的数据。预测将被保存,我希望能够 call/access 从我的 Django 应用程序中获取这些数据。
在我研究了 Google Cloud 和 AWS 之后,我找不到任何可以通过 API.
访问预测的方式托管我的模型的解决方案我现在最好idea/approach解决这个问题:
1) Build a Flask application 每周训练我的模型。预测保存在 PostgreSQL 中。数据将从我的 Django 网络应用程序每周导出 CSV。
2) 在我的 Flask 应用程序中创建一个 API,它可以从数据库访问预测。
3) 在我的 Django 应用程序中,我可以调用 API 并在需要时访问数据。
我很确定我的方法听起来很坎坷,而且可能不是它的实现方式。您对如何更好地解决它有任何反馈或想法吗?简而言之:
1) 从 PostgresSQL 数据库预测数据。
2) 在 Django 网络应用程序中提供预测服务。
从 Prophet 提供 pre-calculated 预测值的最简单方法是从 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 应用程序,以及一个 Django 应用程序 用于先知模型。
- Prophet 模型每天将被重新训练一次(在某些情况下)。
- 每天训练模型,它都会预测新数据并将预测保存到 CSV 文件(可以存储在数据库中)。它还使用 pickle. 存储训练模型
- 现在,我可以通过 导入 Django 应用访问 训练模型 和一些 预定义预测 我需要的地方。
项目层次结构:
project/
project/
django-app-for-website/
django-app-for-prophet/
manage.py
requirements.txt
尽管我的项目的性能没有受到太大影响,但它现在不是我的优先事项,但它可以是你的,在这种情况下,我不会推荐这个解决方案。
如果您正在寻找为 Prophet 模型提供服务的最简单方法,这就是我能想到的。只是另一个 可能的 解决方案。