python - 如何在 Python/SQLAlchemy/Flask 中计算累积移动平均值

标签 python sqlalchemy flask flask-sqlalchemy

我将提供一些上下文,以便它有意义。我在表(评级)中捕获产品的客户评级,并希望能够返回基于时间的评级的累积移动平均数。

一个基本示例如下:

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 中执行此操作?

感谢任何和所有建议!

最佳答案

我不知道 SQLAlchemy,但我可能会使用这样的方法:

  • 将累积平均值和评分计数与个人评分分开存储。
  • 每次获得新评分时,更新累积平均值和评分计数:
    • new_count = old_count + 1
    • new_average = ((old_average * old_count) + new_rating)/new_count
  • 可以选择为每个新评级存储一行。

更新平均值和评级计数可以使用单个 SQL 语句完成。

关于python - 如何在 Python/SQLAlchemy/Flask 中计算累积移动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7157768/

相关文章:

python - celery 4.0.0 : No such transport: django

python - 如何在 drf_yasg 中将方案从 HTTP 更改为 HTTPS?

python - Materialise CSS 不显示(与 Flask 有关)

python - plt.plot()、object.plot() 之间有什么区别

python - 请求实体太大 : Can't save large Jupyter notebook, 尽管配置了 max_body_size

python - 相关子项更改时 SQLAlchemy 更新父项

python - 任何人都知道为什么我在尝试将数据帧加载到 sybase 表时出现此错误? [SQL 炼金术]

python - SQLalchemy 中 backref 和 back_populate 的概念?

python - 从表单获取数据,但根据 Flask 所在的页面运行函数

python - 下载 flask 生成的 html 页面