Jak vypočítat kumulativní klouzavý průměr v Python / SQLAlchemy / Baňka

hlasů
8

Dám nějaký kontext, tak to dává smysl. Já zachycení hodnocení zákazníků pro produkty v tabulce (rating) a chtějí mít možnost vrátit kumulativní klouzavý průměr z hodnocení na základě času.

Jednoduchý příklad následuje při stanovení sazeb za den:

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...

Snažím se myslet na přístupu, který nebude měřítko příšerně.

Můj současný nápad je mít funkci, která je aktivována při vložení řádku do tabulky jmenovitých hodnot, který pracuje se na Cum Avg vychází z předchozí řady s tímto výrobkem

Takže pole by bylo něco jako:

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

Ale to zdá jako poměrně riskantní způsob, jak ukládat data.

Jaký by měl být (nebo jakékoliv) způsob, jak toho dosáhnout? Pokud bych měl použít ‚spoušť‘ svého druhu, jak se vám jít o tom, že v SQLAlchemy?

Veškeré rady ocení!

Položena 23/08/2011 v 08:47
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
-5

Myslím, že byste měli uložit MA v seznamu 2 prvků, bylo by to mnohem jednodušší:

#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]

sbohem

Odpovězeno 23/08/2011 v 09:32
zdroj uživatelem

hlasů
5

Nevím o SQLAlchemy, ale mohl bych použít metodu takto:

  • Ukládat kumulativní průměr a počet hodnocení odděleně z jednotlivých hodnocení.
  • Pokaždé, když dostanete nový rating, aktualizujte kumulativní průměrný a Počet hodnocení:
    • NEW_COUNT = old_count + 1
    • new_average = ((old_average * old_count) + new_rating) / NEW_COUNT
  • Volitelně uložit řádek pro každý nový rating.

Aktualizace průměrnou a Počet hodnocení by mohlo být provedeno pomocí jediného příkazu SQL.

Odpovězeno 25/08/2011 v 00:37
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more