Berechnung des kumulativen gleitenden Durchschnitts in Python / SQLAlchemy / Flask

8

Ich gebe einen Zusammenhang, damit es Sinn ergibt. Ich erfasse Kundenbewertungen für Produkte in einer Tabelle (Bewertung) und möchte einen kumulativen gleitenden Durchschnitt der Bewertungen basierend auf der Zeit zurückgeben können.

Ein einfaches Beispiel folgt der Bewertung pro Tag:

%Vor%

Ich versuche, an einen Ansatz zu denken, der sich nicht schrecklich skalieren lässt.

Meine aktuelle Idee ist es, eine Funktion zu haben, die ausgelöst wird, wenn eine Zeile in die Bewertungstabelle eingefügt wird, die den Cum Avg basierend auf der vorherigen Zeile für dieses Produkt berechnet.

Die Felder würden also so aussehen:

%Vor%

Aber das scheint eine ziemlich zwielichtige Art zu sein, die Daten zu speichern.

Was wäre der (oder irgendein) Weg, dies zu erreichen? Wenn ich den "Auslöser" der Arten verwenden sollte, wie geht man das in SQLAlchemy?

Alle und alle Ratschläge geschätzt!

    
mwan 23.08.2011, 07:47
quelle

2 Antworten

5

Ich weiß nichts über SQLAlchemy, aber ich könnte einen Ansatz wie folgt verwenden:

  • Speichern Sie den kumulativen Durchschnitt und die Ratinganzahl getrennt von den einzelnen Bewertungen.
  • Jedes Mal, wenn Sie eine neue Bewertung erhalten, aktualisieren Sie den kumulativen Durchschnitt und die Anzahl der Bewertungen:
    • neuer_Zähler = alter_Zähler + 1
    • new_average = ((altes_Alter * alter_Zahl) + neues_Rating) / neuer_Zähler
  • Speichern Sie optional eine Zeile für jede neue Bewertung.

Die Aktualisierung des Durchschnitts und der Anzahl der Bewertungen könnte mit einer einzigen SQL-Anweisung erfolgen.

    
ʇsәɹoɈ 24.08.2011, 23:37
quelle
-5

Ich denke, dass Sie den MA in einer 2-Element-Liste speichern sollten, es wäre viel einfacher:

%Vor%

Tschüss

    
prince 23.08.2011 08:32
quelle