Как обслуживать модель Пророка для моего приложения Django? - PullRequest
0 голосов
/ 08 июля 2019

Я создал модель с Facebook Prophet. Теперь мне интересно, каков «лучший» способ получить доступ к этим прогнозам из онлайн-приложения (Django).

Требования заключаются в том, что я должен еженедельно обучать / обновлять свою модель с использованием данных из моего приложения Django (PostgreSQL). Прогнозы будут сохранены, и я хочу иметь возможность вызывать / получать доступ к этим данным из моего приложения Django.

После того, как я посмотрел в Google Cloud и AWS, я не смог найти ни одного решения, которое бы содержало мою модель таким образом, чтобы я мог просто получить доступ к прогнозам через API.

Моя лучшая идея / подход для решения этой проблемы прямо сейчас:

1) Создайте приложение Flask , которое еженедельно обучает мои модели. Прогнозы сохраняются в PostgreSQL. Данные будут еженедельно экспортироваться в CSV из моего веб-приложения Django.

2) Создайте API в моем приложении Flask, которое будет иметь доступ к прогнозам из базы данных.

3) Из моего приложения Django я могу вызывать API и получать доступ к данным в любое время.

Я почти уверен, что мой подход звучит неровно и, вероятно, не так, как это делается. Есть ли у вас какие-либо отзывы или идеи о том, как решить это лучше? Короче говоря:

1) Прогнозирование данных из базы данных PostgresSQL.

2) Служить прогнозам в веб-приложении Django.

1 Ответ

0 голосов
/ 13 июля 2019

Простейшим способом предоставления предварительно рассчитанных значений прогноза от Prophet является обслуживание файлов CSV с S3 или других файловых серверов. Вы можете обновлять свои модели каждые несколько дней и записывать прогнозируемый результат в 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")
...