Flask MySQL ECharts 电商用户行为数据分析平台这是一个非常适合作为毕业设计的选题技术栈主流、数据可视化直观、业务逻辑清晰 核心分析指标指标含义SQL计算方式PV (Page View)页面访问量COUNT(*)UV (Unique Visitor)独立访客数COUNT(DISTINCT user_id)转化漏斗浏览→加购→下单→支付各阶段人数逐层统计️ 数据库设计 (MySQL)-- 用户行为表 CREATE TABLE user_behavior ( id INT AUTO_INCREMENT PRIMARY KEY, user_id VARCHAR(50), item_id INT, category_id INT, behavior_type ENUM(pv,cart,fav,buy), timestamp DATETIME, INDEX idx_user (user_id), INDEX idx_time (timestamp) ); -- 商品表 CREATE TABLE items ( item_id INT PRIMARY KEY, category_id INT, price DECIMAL(10,2) ); Flask后端核心代码1. 项目结构ecommerce_analysis/ ├── app.py # Flask主程序 ├── models.py # 数据库操作 ├── templates/ │ ├── index.html # 仪表盘主页 │ └── funnel.html # 漏斗图页面 └── static/ └── js/ # ECharts配置2. API接口示例 (app.py)from flask import Flask, jsonify, render_template from flask_sqlalchemy import SQLAlchemy from datetime import datetime, timedelta app Flask(__name__) app.config[SQLALCHEMY_DATABASE_URI] mysql://root:passwordlocalhost/ecommerce db SQLAlchemy(app) class UserBehavior(db.Model): __tablename__ user_behavior id db.Column(db.Integer, primary_keyTrue) user_id db.Column(db.String(50)) behavior_type db.Column(db.String(20)) timestamp db.Column(db.DateTime) app.route(/api/pv_uv) def get_pv_uv(): 获取每日PV/UV数据 today datetime.now().date() results db.session.execute( SELECT DATE(timestamp) as date, COUNT(*) as pv, COUNT(DISTINCT user_id) as uv FROM user_behavior WHERE timestamp :start_date GROUP BY DATE(timestamp) ORDER BY date , {start_date: today - timedelta(days30)}).fetchall() return jsonify([{ date: str(r.date), pv: r.pv, uv: r.uv } for r in results]) app.route(/api/funnel) def get_funnel(): 获取转化漏斗数据 stages [pv, cart, fav, buy] funnel_data [] for stage in stages: count db.session.execute( SELECT COUNT(DISTINCT user_id) FROM user_behavior WHERE behavior_type :stage , {stage: stage}).scalar() funnel_data.append({stage: stage, count: count}) return jsonify(funnel_data) app.route(/) def dashboard(): return render_template(index.html) if __name__ __main__: app.run(debugTrue) ECharts前端可视化折线图 - PV/UV趋势 (templates/index.html)!DOCTYPE html html head script srchttps://cdn.jsdelivr.net/npm/echarts5/dist/echarts.min.js/script /head body div idpvuvChart stylewidth: 100%; height: 400px;/div div idfunnelChart stylewidth: 600px; height: 450px;/div script // PV/UV折线图 fetch(/api/pv_uv) .then(res res.json()) .then(data { const chart echarts.init(document.getElementById(pvuvChart)); chart.setOption({ title: { text: 30天PV/UV趋势 }, tooltip: { trigger: axis }, legend: { data: [PV, UV] }, xAxis: { type: category, data: data.map(d d.date) }, yAxis: [ { type: value, name: PV }, { type: value, name: UV } ], series: [ { name: PV, type: line, data: data.map(d d.pv), smooth: true }, { name: UV, type: line, data: data.map(d d.uv), yAxisIndex: 1, smooth: true } ] }); }); // 漏斗图 fetch(/api/funnel) .then(res res.json()) .then(data { const chart echarts.init(document.getElementById(funnelChart)); chart.setOption({ title: { text: 用户转化漏斗 }, tooltip: { trigger: item, formatter: {b} : {c} }, series: [{ type: funnel, left: 10%, top: 60, bottom: 40, width: 80%, min: 0, max: Math.max(...data.map(d d.count)), minSize: 0%, maxSize: 100%, sort: descending, gap: 2, label: { show: true, position: inside }, data: data.map(d ({ name: d.stage pv ? 浏览 : d.stage cart ? 加入购物车 : d.stage fav ? 收藏 : 购买, value: d.count })) }] }); }); /script /body /html 扩展功能建议加分项功能模块实现思路技术点实时监控WebSocket推送最新数据Flask-SocketIO用户画像RFM模型分析用户价值Pandas聚合计算热力图按小时星期展示活跃度ECharts热力图导出报告生成PDF分析报告ReportLab/PyPDF2预测趋势ARIMA/LSTM预测未来流量Prophet/Sklearn 数据集推荐淘宝用户行为数据集 (UserBehavior.csv) - 约1亿条记录天猫用户行为数据 (Tianchi竞赛数据)自己写脚本模拟生成测试数据