Как рассчитать кумулятивное скользящее среднее в Python / SQLAlchemy / Flask

Я расскажу о каком-то контексте, так что это имеет смысл. Я забираю Оценки клиентов для продуктов в таблице (Рейтинг) и хочу иметь возможность вернуть кумулятивную скользящую среднюю оценки, основанные на времени.

Базовый пример следует за оценкой в ​​день:

02 FEB - Rating: 5 - Cum Avg: 5 03 FEB - Rating: 4 - Cum Avg: (5+4)/2 = 4.5 04 FEB - Rating: 1 - Cum Avg: (5+4+1)/3 = 3.3 05 FEB - Rating: 5 - Cum Avg: (5+4+1+5)/4 = 3.75 Etc... 

Я пытаюсь думать о подходе, который не будет масштабироваться ужасно.

Моя нынешняя идея состоит в том, чтобы иметь функцию, которая срабатывает, когда строка вставляется в таблицу рейтинга, которая разрабатывает Cum Avg на основе предыдущей строки для этого продукта

Таким образом, поля будут выглядеть примерно так:

 TABLE: Rating | RatingId | DateTime | ProdId | RatingVal | RatingCnt | CumAvg | 

Но это кажется довольно хитроумным способом хранения данных.

Каким был бы (или любой) способ сделать это? Если бы я использовал «триггер», как вы это делаете в SQLAlchemy?

Любые советы приветствуются!

2 Solutions collect form web for “Как рассчитать кумулятивное скользящее среднее в Python / SQLAlchemy / Flask”

Я не знаю о SQLAlchemy, но я мог бы использовать такой подход:

  • Храните кумулятивное среднее и количество оценок отдельно от индивидуальных оценок.
  • Каждый раз, когда вы получаете новый рейтинг, обновляйте кумулятивное значение и рейтинг:
    • new_count = old_count + 1
    • new_average = ((old_average * old_count) + new_rating) / new_count
  • При желании, сохраните строку для каждого нового рейтинга.

Обновление среднего и рейтинга может быть выполнено с помощью одного оператора SQL.

Я думаю, вы должны сохранить MA в списке из 2-х элементов, это было бы намного проще:

 #first rating 5 is rating number 0 a = [5,0] #next: for i in rating: a = [(a[0]*a[1]+lastRating)/(a[1]+1),a[1]+1] 

до свидания

  • SQLAlchemy OperationalError из-за Quoo-invoked autoflush
  • sqlalchemy простой пример `sum`,` average`, `min`,` max`
  • Переопределение __cmp__, __eq__ и __hash__ для декларативной базы SQLAlchemy
  • SQLAlchemy + SQL Injection
  • Целевая база данных не обновляется
  • Является ли SQLAlchemy по-прежнему рекомендуемым, если он используется только для сырого SQL-запроса?
  • Flask-SQLAlchemy - Когда создаются и уничтожаются таблицы / базы данных?
  • Запрос PostgreSQL ILIKE с SQLAlchemy
  •  
    Interesting Posts for Van-Lav

    Настройка цвета разных баров в matplotlib Python

    scipy.optimize.fmin_cg: «Желаемая ошибка не всегда достигается из-за потери точности».

    Условное оформление Python3?

    scikit изучает уменьшение размера PCA – множество данных и несколько примеров

    Нужна помощь в понимании ошибок импорта модуля

    Многопоточность Python

    Почему auc настолько отличается от логистической регрессии sklearn и R

    Могу ли я использовать CountVectorizer в scikit-learn, чтобы подсчитать частоту документов, которые не использовались для извлечения токенов?

    Когда я создаю новый GUID для COM-серверов? (Примеры в Python)

    Pandas SettingWithCopyWarning

    SQLAlchemy: конвертировать значение столбца взад и вперед между внутренним и базовым форматом

    Обучение Z3py – есть поддержка массивов и циклов

    Как отправлять асинхронные HTTP-запросы в python по одному за раз?

    Удалите соседние повторяющиеся элементы из списка

    Python очень большой набор. Как избежать исключения из памяти?

    Python - лучший язык программирования в мире.