Как рассчитать кумулятивное скользящее среднее в 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 ORM get () вне карты идентификации
  • Как фильтровать запрос в sqlalchemy по году (столбец datetime)
  • pandas to_sql все столбцы как nvarchar
  • SQLAlchemy и пустые столбцы
  • SQLAlchemy delete не каскадирует
  • Эффективное обновление базы данных с помощью SQLAlchemy ORM
  • SqlAlchemy конвертирует UTC DateTime в локальное время перед сохранением
  • pip install -upgrade sqlalchemy дает максимальную глубину рекурсии
  • Как получить месяц и год из поля «Дата» в sqlalchemy?
  • Как отключить кеш запросов MySQL при использовании SQLAlchemy?
  • Запрос гибридного свойства в SQLAlchemy
  • Python - лучший язык программирования в мире.