You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask生成的购物篮分析结果无法在HTML页面显示问题排查

市场篮子分析Flask结果不显示问题解决

问题描述

开展市场篮子分析项目时,Flask后端生成的关联规则分析结果无法在results.html页面展示,页面仅显示表头,无任何数据行。

相关代码

HTML文件(results.html)

<!DOCTYPE html>
<html>
  <head>
    <title>Market basket analysis</title>
    <link rel="stylesheet" type="text/css" href="styles.css" />
  </head>
  <body>
    <h1>Market Basket Analysis</h1>
    <table>
      <thead>
        <tr>
          <th>Left Hand Side</th>
          <th>Right Hand Side</th>
          <th>Support</th>
          <th>Confidences</th>
          <th>Lifts</th>
        </tr>
      </thead>
      <tbody>
        {% for result in results %}
        <tr>
          <td>{{ result[0] }}</td>
          <td>{{ result[1] }}</td>
          <td>{{ result[2] }}</td>
          <td>{{ result[3] }}</td>
          <td>{{ result[4] }}</td>
        </tr>
        {% endfor %}
      </tbody>
    </table>
  </body>
</html>

Python文件(app.py)

from flask import Flask, render_template
import pandas as pd
from apyori import apriori

app = Flask(__name__)

@app.route('/')
def index():
    df = pd.read_csv('Groceries_data.csv')
    df['date'] = pd.to_datetime(df['Date'])
    cust_level = df[["Member_number","itemDescription"]].sort_values(by="Member_number", ascending= False)
    cust_level["itemDescription"] = cust_level["itemDescription"].str.strip()
    transactions = [a[1]['itemDescription'].tolist() for a in list(cust_level.groupby(["Member_number"]))]
    rules = apriori(transactions = transactions, min_support = 0.002, min_confidence=0.05, min_lift=3, min_length=2)
    results = list(rules)
    
    def inspect(results):
        lhs = [tuple(result[2][0][0])[0] for result in results]
        rhs = [tuple(result[2][0][1])[0] for result in results]
        supports = [result[1] for result in results]
        confidences = [result[2][0][2] for result in results]
        lifts = [result[2][0][3] for result in results]
        return list(zip(lhs,rhs,supports,confidences,lifts))

    resultsindataframe = pd.DataFrame(inspect(results),columns=['Left Hand Side','Right Hand Side','Support','Confidences','Lifts']) 
    results = resultsindataframe.to_html(index=False)
    return render_template('results.html', results=results)

if __name__ == '__main__':
    app.run(debug=True)

文件结构

MBA/
├── app.py
├── templates/
│      └── result.html
└── Groceries_data.csv

输出情况

页面仅显示标题和表格表头,无任何分析数据行。


错误分析与解决方案

1. 模板文件名不匹配

问题:文件结构中模板文件名为result.html,但Flask代码中render_template调用的是results.html(多了一个s),导致无法匹配正确的模板文件。
解决:

  • 要么将templates目录下的result.html重命名为results.html;
  • 要么修改app.py中的代码,将return render_template('results.html', results=results)改为return render_template('result.html', results=results),保持文件名一致。

2. 数据传递格式错误

问题:代码中将DataFrame转换为HTML字符串(resultsindataframe.to_html(index=False))传给前端,但前端模板是通过循环遍历列表/元组的方式渲染数据,格式不匹配导致无法解析。
解决:
将数据转换为列表格式传递,修改app.py中的代码:

# 替换原来的results = resultsindataframe.to_html(index=False)
results = resultsindataframe.values.tolist()
return render_template('results.html', results=results)

修改后前端的{% for result in results %}就能正确遍历每一行数据。

3. 关联规则生成异常

问题:如果上述修改后仍无数据,需检查apriori是否生成了有效规则。可能是设置的min_support、min_confidence、min_lift等参数过高,导致没有符合条件的规则生成。
解决:

  • 在app.py中添加打印语句,查看规则数量:
    results = list(rules)
    print(f"生成的规则数量:{len(results)}") # 打印规则数量确认是否为空
    
  • 如果规则数量为0,调整apriori的参数,比如降低min_confidence到0.01、min_lift到1,或降低min_support,确保能生成足够的规则。

内容的提问来源于stack exchange,提问作者Riya Poonia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:40:06