Я создал модель с пророком Facebook. Теперь мне интересно, каков «лучший» способ доступа к этим прогнозам из онлайн-веб-приложения (Django).
Требования заключаются в том, что я должен еженедельно обучать/обновлять свою модель с данными из моего приложения Django (PostgreSQL). Прогнозы будут сохранены, и я хочу иметь возможность вызывать/получать доступ к этим данным из моего приложения Django.
После того, как я изучил Google Cloud и AWS, я не смог найти ни одного решения, которое размещало бы мою модель таким образом, чтобы я мог просто получить доступ к прогнозам через API.
Моя лучшая идея/подход к решению этой проблемы прямо сейчас:
1) Создайте приложение Flask, который еженедельно тренирует мои модели. Прогнозы сохраняются в PostgreSQL. Данные будут еженедельно экспортироваться в CSV из моего веб-приложения Django.
2) Создайте API в моем приложении Flask, который может получить доступ к прогнозам из базы данных.
3) Из моего приложения Django я могу вызывать API и получать доступ к данным, когда это необходимо.
Я почти уверен, что мой подход звучит неровно и, вероятно, не так, как это делается. Есть ли у вас какие-либо отзывы или идеи о том, как решить эту проблему лучше? Вкратце:
1) Прогнозировать данные из базы данных PostgresSQL.
2) Подавать прогнозы в веб-приложении Django.






Самый простой способ предоставить предварительно рассчитанные значения прогноза от 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")
Одна из причин, по которой я посетил этот вопрос, заключалась в том, что я не был уверен, куда идти. Ответ кажется отличной альтернативой. Тем не менее, у меня не было много ограничений для моего приложения Django, и я искал более простой способ для кого-то с такими же вариантами использования, как у меня.
Мое решение:
Иерархия проекта:
project/
project/
django-app-for-website/
django-app-for-prophet/
manage.py
requirements.txt
Несмотря на то, что производительность моего проекта не сильно пострадает, пока это не является моим приоритетом, но может быть вашим, и в этом случае я бы не рекомендовал это решение.
Если вы ищете самый простой способ служить модели Пророка, это то, что я мог бы предложить. Еще одно решение возможно.
Отличная идея, не подумал об этом. Спасибо!