资讯动态

Django+深度学习实战:淘宝用户行为预测与可视化系统

发布时间:2026/10/14 3:45:23 来源:尧图企业网站定制
简介这份资源是面向高校学生与开发者的Django与深度学习融合项目实战包聚焦淘宝用户购物行为可视化与预测这一典型赛题场景适合具备Python与Web基础、希望完成课程设计或毕业设计的中级学习者。包内共287个文件以Vue前端组件、Python后端脚本、编译缓存、JPG与PNG图表素材、JS逻辑及CSS样式为主另含少量HTML模板、批处理启动脚本与JSON配置压缩包约15.35MB结构覆盖前后端与数据层。内容围绕系统架构、深度学习模型构建与训练、可视化模块设计、数据采集与预处理、行为预测准确性评估等环节展开并附有万字论文、PPT、部署包与讲解视频可帮助读者快速理解从数据清洗到模型评估的完整链路对照图表与指标复盘实验过程掌握Django与深度学习结合的项目落地思路。目前已有97人学习下载。1. 从一份 Django 电商行为分析包说起它到底能跑出什么结果如果你手头正好有一批淘宝用户行为日志想快速搭出一套能看板、能预测、还能写进论文的系统这份 Django 基于深度学习的淘宝用户购物可视化与行为预测系统设计包大概率能省掉你从零搭架子的大半时间。它把 Python、Django、深度学习、Vue、MySQL 这几样东西串成了一条完整链路后端用 Django 做接口和数据管理前端用 Vue 做可视化看板模型侧用深度学习做购买行为预测数据落在 MySQL 里。适合两类人一类是课程设计或毕设阶段需要一套能演示、能讲清原理的系统另一类是刚转数据方向想找一个端到端项目把「数据清洗—特征工程—模型训练—接口暴露—前端展示」跑通。我拆这类包的习惯是先看它能不能独立跑起来再看模型部分是不是真训练而不是写死结果这份包在这两点上给得比较完整后面几章我按实际复现顺序拆开讲。2. 环境与依赖把 Django、Vue、MySQL 三端先对齐2.1 为什么这套组合容易在环境上翻车Python Django Vue MySQL 这套栈本身不复杂但它跨了三个运行时Python 解释器、Node.js、MySQL 服务。很多人拿到包直接pip install -r requirements.txt然后python manage.py runserver结果要么是 MySQL 连不上要么是前端npm run serve报 node-sass 编译错误。根因通常不是代码问题而是版本没对齐。Django 2.x 和 3.x 在路由和url()写法上有差异Vue 2 和 Vue 3 的脚手架命令也不一样MySQL 8 默认的caching_sha2_password认证方式还会让老版本驱动直接拒绝连接。所以第一步不是急着跑而是先把三个运行时的版本锁死。我一般会先确认三件事Python 用 3.7 或 3.8深度学习框架对高版本 Python 兼容性参差Node.js 用 14.x 或 16.x对应 Vue 2 的 node-sassMySQL 用 5.7 或 8.0 但要把认证插件调成mysql_native_password。这三条对齐了后面 80% 的环境报错都不会出现。2.2 后端依赖安装与数据库初始化先建虚拟环境再装依赖。不要用全局 Python否则深度学习框架和系统包冲突时很难排查。# 创建并激活虚拟环境隔离项目依赖 python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate # 安装后端依赖建议逐条确认版本 pip install django3.2 pip install pymysql # MySQL 驱动比 mysqlclient 好装 pip install pandas numpy scikit-learn pip install tensorflow2.6 # 或 pytorch看包内模型用的是哪个 pip install djangorestframework # 接口层装完后在 Django 的__init__.py里加两行让 pymysql 冒充 MySQLdb这是 Django 连 MySQL 的常见做法import pymysql pymysql.install_as_MySQLdb()然后在settings.py里改数据库配置。参数含义逐条说NAME是库名要提前在 MySQL 里CREATE DATABASEHOST本地就写 127.0.0.1别写 localhost避免走 socket 出玄学问题OPTIONS里的charset必须是 utf8mb4否则中文商品名会乱码。DATABASES { default: { ENGINE: django.db.backends.mysql, NAME: taobao_behavior, # 提前建好的库 USER: root, PASSWORD: your_password, HOST: 127.0.0.1, PORT: 3306, OPTIONS: {charset: utf8mb4}, } }数据库建好后执行迁移把 Django 自带的表和项目模型表建出来python manage.py makemigrations python manage.py migrate python manage.py createsuperuser # 建后台账号如果migrate报django.db.utils.OperationalError: (1045, Access denied)八成是密码或认证插件问题去 MySQL 里执行ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY your_password;再刷新权限即可。2.3 前端 Vue 工程启动前端目录一般在frontend或web下进去先装依赖再起服务。Vue 2 项目用 node-sass 的话Node 版本高于 16 会编译失败这是血泪经验别硬扛直接切 Node 14。cd frontend npm install # 若卡在 node-sass先 npm rebuild node-sass npm run serve # Vue CLI 项目若是 Vite 则 npm run dev前端默认跑在 8080后端 Django 跑在 8000跨域问题要在 Django 里装django-cors-headers并在INSTALLED_APPS和MIDDLEWARE里注册CORS_ALLOW_ALL_ORIGINS True开发阶段先放开。三端都起来后浏览器打开前端地址能看到登录页说明骨架通了接下来才是数据。3. 数据层用户行为表怎么设计、清洗脚本怎么写3.1 行为数据表结构与字段含义电商行为预测的原始数据通常是一张宽表核心字段就那么几个用户 ID、商品 ID、行为类型浏览/收藏/加购/购买、时间戳。这份包里的表设计基本围绕这四类行为展开因为预测购买本质上是在建模「从浏览到下单」的转化路径。下面是我按常见做法整理的核心表结构字段名以实际包内为准含义是通用的。字段名类型含义备注user_idBIGINT用户唯一标识建索引关联频繁item_idBIGINT商品唯一标识建索引behavior_typeTINYINT行为类型1 浏览 2 收藏 3 加购 4 购买timestampINT行为发生时间秒级时间戳需转 datetimecategory_idBIGINT商品类目用于类目偏好特征行为类型用数字编码比字符串省空间也方便模型直接吃。时间戳字段一定要转成可读时间否则后面做「近 7 天活跃度」这类特征时没法按天聚合。3.2 清洗与特征工程脚本原始日志里通常有重复记录、时间戳异常、以及大量只浏览一次就流失的噪声用户。清洗脚本我一般分三步去重、时间转换、按用户聚合行为计数。下面这段可以直接抄改一下表名和字段名就能用。import pandas as pd # 读取原始行为日志假设是 csv df pd.read_csv(user_behavior.csv) # 1. 去重同一用户对同一商品同一秒的重复行为只留一条 df df.drop_duplicates(subset[user_id, item_id, behavior_type, timestamp]) # 2. 时间戳转 datetime并提取小时、星期作为特征 df[dt] pd.to_datetime(df[timestamp], units) df[hour] df[dt].dt.hour df[weekday] df[dt].dt.weekday # 3. 按用户聚合四类行为的次数构造用户行为画像 behavior_count df.pivot_table( indexuser_id, columnsbehavior_type, valuesitem_id, aggfunccount, fill_value0 ) behavior_count.columns [view, fav, cart, buy] print(behavior_count.head())逻辑说明drop_duplicates的 subset 必须包含行为类型和时间戳否则会把用户在不同时间对同一商品的正常多次浏览误删。pivot_table用aggfunccount统计次数fill_value0保证没发生过某类行为的用户也有完整四列不然模型输入维度对不齐。参数上hour和weekday是给后续模型做时间偏好特征用的如果模型只吃统计特征这两列可以先不喂。清洗完把结果写回 MySQL 或存成 csv 供模型训练用。写库时注意用to_sql的if_existsreplace还是append前者会清表重建后者追加训练数据建议用 replace 保证每次干净。4. 深度学习预测模型从特征到购买概率4.1 为什么这里用深度学习而不是逻辑回归购买预测本质是二分类逻辑回归也能做但用户行为特征之间往往有非线性交互比如「加购次数高但浏览时长极短」这种组合线性模型很难捕捉。这份包用深度学习常见做法是搭一个几层的全连接网络输入是用户行为统计特征输出是购买概率。相比树模型全连接网络在特征维度不高时优势不明显但胜在结构简单、容易和 Django 集成推理时直接加载权重跑一次前向传播就行不需要额外依赖。选型上要注意如果数据量只有几万条深度网络容易过拟合这时候加 Dropout 和早停比堆层数有用。我一般会先跑一个逻辑回归做基线再用深度模型对比如果提升不到 2 个百分点说明特征工程才是瓶颈不是模型不够深。4.2 模型搭建与训练代码下面是一个可复现的二分类网络输入维度对应上一章聚合出的行为特征数输出一个 0 到 1 的购买概率。import numpy as np from tensorflow.keras import layers, models, callbacks # X 是行为特征矩阵y 是是否购买标签 # 假设特征维度为 8按实际调整 model models.Sequential([ layers.Dense(64, activationrelu, input_shape(8,)), layers.Dropout(0.3), # 防过拟合 layers.Dense(32, activationrelu), layers.Dropout(0.2), layers.Dense(1, activationsigmoid) # 二分类输出概率 ]) model.compile( optimizeradam, lossbinary_crossentropy, metrics[accuracy, AUC] ) # 早停验证集 AUC 连续 3 轮不升就停并恢复最优权重 early_stop callbacks.EarlyStopping( monitorval_auc, patience3, restore_best_weightsTrue ) history model.fit( X_train, y_train, validation_split0.2, epochs50, batch_size256, callbacks[early_stop] ) model.save(buy_predict.h5)逻辑说明Dropout(0.3)表示训练时随机丢弃 30% 神经元推理时关闭这是抑制过拟合最直接的手段。binary_crossentropy是二分类标准损失别用 categorical。EarlyStopping的patience3是容忍度太小会早停欠拟合太大浪费算力3 到 5 之间比较稳。batch_size256在几万到几十万样本量下比较平衡显存不够就降到 64。训练完看history里的val_auc如果训练集 AUC 0.95 而验证集只有 0.6就是典型过拟合回去减层、加 Dropout、或者补特征。模型存成 h5 后Django 里用keras.models.load_model加载封装成一个预测接口。4.3 把模型接进 Django 接口模型不能每次请求都重新加载要在 Django 启动时加载一次放在视图模块顶层或用单例。下面是一个最小可用的预测视图from django.http import JsonResponse from tensorflow.keras.models import load_model import numpy as np model load_model(buy_predict.h5) # 模块加载时执行一次 def predict_buy(request): # 从前端拿到用户行为特征顺序必须和训练时一致 features request.GET.get(features) # 逗号分隔的 8 个值 x np.array([float(i) for i in features.split(,)]).reshape(1, -1) prob float(model.predict(x)[0][0]) return JsonResponse({buy_probability: round(prob, 4)})参数说明reshape(1, -1)是把单条样本变成模型要求的二维输入。特征顺序必须和训练时完全一致这是最容易翻车的地方建议在训练脚本里把特征列名存成 json接口按列名取值而不是按位置避免顺序错乱导致预测结果完全失真。5. 可视化看板与前后端联调让数据真正能看5.1 看板该放哪些图可视化不是把数据全堆上去而是围绕「用户行为—转化—预测」这条线选图。常见做法是四块行为类型分布饼图、近 30 天购买趋势折线、用户行为漏斗浏览→收藏→加购→购买、以及单个用户的购买概率预测卡片。前三个用 ECharts 或 Chart.js 都能画第四个调上一章的预测接口。前端调接口时注意跨域和参数格式。Vue 里用 axios 发请求后端返回 JsonResponse字段名要对齐。下面是一个调预测接口的示例import axios from axios export default { data() { return { prob: null } }, methods: { async fetchPredict(features) { // features 是数组转成逗号分隔字符串传给后端 const res await axios.get(http://127.0.0.1:8000/api/predict/, { params: { features: features.join(,) } }) this.prob res.data.buy_probability } } }逻辑说明params会把 features 拼到 URL 上后端用request.GET.get取。如果特征多或含敏感信息改成 POST 更合适。await保证拿到结果再赋值避免渲染时 prob 还是 null。5.2 联调时接口 404 和 500 怎么定位接口 404 一般是路由没注册检查urls.py里有没有把视图挂上路径有没有拼错。500 多半是模型加载失败或特征维度不对去 Django 控制台看 traceback最常见的是ValueError: Input 0 is incompatible with layer说明传进去的特征数和训练时不一致。定位方法很简单在视图里先print(x.shape)和训练时的input_shape对一下对不上就回去查特征工程脚本。前端图表不显示数据先看浏览器 Network 面板里接口返回了什么是空数组还是报错。空数组说明数据库查询条件太严报错说明后端挂了。这一步别猜直接看返回体能省一半时间。6. 避坑与排查这类包最容易翻车的五个地方现象一migrate时报Unknown command: migrate。原因通常是没在虚拟环境里执行或者当前目录不是 manage.py 所在目录。解决确认which python指向 venvcd到 manage.py 同级再执行。现象二前端npm install卡在 node-sass 编译。原因是 Node 版本过高node-sass 不支持。解决用 nvm 切到 Node 14或者把 node-sass 换成 sassdart-sass后者不依赖二进制编译。现象三模型预测结果全是 0.5 左右。原因是特征没归一化或者训练时用了标准化但推理时没做同样处理。解决把训练时的 scaler 一起保存推理前先 transform别只存模型权重。现象四中文商品名在页面上显示成问号。原因是数据库或连接字符集不是 utf8mb4。解决建库时指定CHARACTER SET utf8mb4连接串加charsetutf8mb4两头都要改。现象五Django 启动报No module named MySQLdb。原因是没装 pymysql 或没加install_as_MySQLdb()。解决补上那两行代码重启服务。7. 进阶技巧把预测接口做成可复用的批量打分单条预测只能演示实际用起来更常见的是给一批用户批量打分然后按概率排序做运营名单。这里有个技巧不要循环调接口那样每次都要走一遍网络和模型加载开销直接在 Django 里写一个批量视图一次传入多条特征模型一次前向传播出结果。def batch_predict(request): # 前端传 JSON{samples: [[...8个特征...], [...], ...]} import json data json.loads(request.body) X np.array(data[samples], dtypefloat) probs model.predict(X, batch_size512).flatten() # 返回每条样本的购买概率 return JsonResponse({probs: [round(float(p), 4) for p in probs]})参数说明batch_size512控制一次喂给模型多少条显存小就调低。flatten()把 (N,1) 压成 (N,)方便前端遍历。这个接口配合 pandas 读一批用户 ID 和特征就能一次性产出全量用户的购买概率再按概率倒序取前 10% 做定向触达。验证模型有没有真的在工作我有个习惯故意把某个用户的行为特征改成「加购 10 次、浏览 1 次」看预测概率是不是明显高于「浏览 10 次、加购 0 次」。如果两者差不多说明模型没学到东西得回去查特征工程或标签构造。从那以后我每次接完模型接口都强制走一遍这种反常识样本的验证比看准确率数字更能发现问题。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑