【计算机毕业设计】基于K-Means聚类的电商客户分群系统
1.系统介绍
随着电子商务行业的快速发展,传统的粗放式运营模式已难以满足用户个性化需求与平台精细化管理的要求,如何通过数据分析实现客户精准分群、提升运营效率成为电商平台亟待解决的问题。在此背景下,本研究旨在开发一套融合K-Means聚类算法的电商客户分群系统,以实现客户特征分析与精准运营。
系统采用Java语言开发,基于Django、Vue、MySQL构建技术架构,设计用户端、管理员端、商家端三大操作端。用户端支持注册登录、商品选购、订单管理等基础消费功能,并可接收个性化商品推荐;管理员端负责系统管控、用户与商品管理及K-Means聚类分析;商家端聚焦商品运营,借助聚类结果优化商品策略,各端功能协同实现电商业务全流程管理与客户智能分群。
该系统的开发与应用,有效将机器学习算法与电商业务结合,通过K-Means聚类实现客户精准分群,不仅提升了商品推荐的精准度与用户购物体验,也为商家和管理员提供了数据驱动的运营决策依据,对推动电商平台从传统运营模式向智能化、精细化模式转型具有重要的实践意义。2.系统需求分析
用户端面向普通消费者,提供注册登录、个人中心管理等基础服务,支持商品信息查看与个性化推荐。用户可进行商品购买、购物车管理、订单管理等操作,同时可领取优惠券、进行余额充值与收货地址管理,满足一站式购物需求。用户用例图如图所示。

管理员端负责平台整体运营与维护,提供登录与个人中心功能,涵盖系统管理、用户管理、公告管理、商品信息与分类管理、评论管理、订单管理等模块,并集成 K-Means 聚类分析,实现客户分群与数据监控。管理员用例图如图所示。

商家端面向店铺运营人员,支持注册登录与个人中心管理,可进行系统配置、商品分类与商品信息管理、订单处理等日常运营工作,并通过 K-Means 聚类分析客户群体,辅助精准营销与商品优化。商家用例图如图所示。

3.系统结构功能
本系统采用前后端分离架构,基于 Django、Vue 与 MySQL 实现,分为用户端、管理员端、商家端三层结构。用户端提供注册登录、个人中心、商品推荐与查看、购物车、订单、优惠券、余额及地址管理等功能;管理员端负责登录、个人中心、系统、用户、公告、商品、分类、评论、订单管理及 K-Means 聚类分析;商家端实现注册登录、个人中心、系统、商品、分类、订单管理及聚类分析,整体结构清晰、功能完整,满足电商平台多角色协同运营与智能客户分群需求。系统结构功能图如图所示。

4.数据库设计
E-R图表可以清楚地显示出系统中的每一个实体及其相互关系。利用图形化的方法,使开发者能够更加精确地了解系统的结构与数据流,从而避免在以后的数据库设计与开发中产生混乱与误会。该方法可以帮助对数据库结构进行规划,明确各实体的属性及其相互关系,为其标准化与优化奠定了依据,使其设计更为合理、高效,能够更好地适应系统的服务需要,增强系统的稳定与可扩充性。系统总体E-R图如图所示。

5.系统功能实现
5.1管理员登录模块

管理员登录代码如下:
@route.post("/login", url_name="login", response={200: AdminLoginResponse,500:BaseResponseSchema},auth=None)
def obtain_token(self, payload: AdminLoginInput):
try:
user = Admin.objects.filter(username=payload.username)
if not user.exists():
return 200,{'code': 500, 'msg': '用户不存在','data':None}
user = user.first()
print(user.password,payload.password, gen_password(payload.password))
if user.password != gen_password(payload.password):
return 200,{'code': 500, 'msg': '密码错误','data':None}
token = str(AccessToken.for_user(user))
# ✅ 登录成功后,将用户信息存入 Redis,键为 token,过期时间 24 小时
cache.set(f"admin_token:{token}", (user.id, user), timeout=86400)
user.token = token
return 200, {'code': 0, 'msg': 'success', 'data': user}
except Exception as e:
print(e)
return 200,{'code': 500, 'msg': str(e)}
5.2个人中心

5.3系统管理

5.4用户管理

修改用户信息代码如下:
@route.post(path='/save', summary='保存')
def saveaboutus(self, payload: UserInfoOutput):
try:
if payload.password:
payload.password = gen_password(payload.password)
payload.addtime = datetime.now()
User.objects.create(**payload.dict())
return 200, {'code': 0, 'msg': 'success', 'data': True}
except Exception as e:
print(e)
return 200,{'code': 500, 'msg': str(e)5.5公告管理

添加公告信息代码:
@route.post(path='/save', summary='保存公告信息信息',response={200:BaseResponseSchema,500:BaseResponseSchema})
def saveNews(self, payload: NewsInfo):
"""新建公告信息记录"""
try:
save_dict = get_save_dict(payload)
News.objects.create(**save_dict)
return 200, {'code': 0, 'msg': 'success', 'data': True}
except Exception as e:
print(e)
return 200,{'code': 500, 'msg': str(e)}
5.6商品信息管理

商品信息添加代码:
@route.post(path='/save', summary='保存商品信息信息',response={200:BaseResponseSchema,500:BaseResponseSchema})
def saveCommodityinformation(self, payload: CommodityinformationInfo):
"""新建商品信息记录"""
try:
save_dict = get_save_dict(payload)
Commodityinformation.objects.create(**save_dict)
return 200, {'code': 0, 'msg': 'success', 'data': True}
except Exception as e:
print(e)
return 200,{'code': 500, 'msg': str(e)}
5.7K-means聚类分析


5.8订单管理

订单查看代码如下:
@route.post(path='/list', response={200: OrdersListOutput,500:BaseResponseSchema}, summary='列表查询订单', auth=None)
def orderslist(self, request:HttpRequest,payload: OrdersQueryInput):
try:
token = request.META.get('HTTP_AUTHORIZATION')
user_token = UserAuthentication()
validated_token = user_token.get_validated_token(token)
user_id, user = user_token.get_user(validated_token)
query_dict = get_query_dict(payload)
query = build_query(query_dict)
query.add(Q(userid=user_id), Q.AND)
orders = Orders.objects.filter(query)
paginator, page = page_check(payload, orders)
return 200, {'code': 0, 'msg': 'success', 'data': (page)}
except Exception as e:
print(e)
return 500, {'code': 500, 'msg': str(e)}
5.9用户注册登录

用户注册代码如下:
@route.post(path='/register', summary='注册', auth=None,response={200:BaseResponseSchema,500:BaseResponseSchema})
def create_admin(self, payload: UserRegeisterInput):
try:
if User.objects.filter(username=payload.username).exists():
return 200,{'code': 500, 'msg': '用户名已存在'}
payload.password = gen_password(payload.password)
payload.addtime = datetime.now()
User.objects.create(**payload.dict())
return 200, {'code': 0, 'msg': 'success', 'data': True}
except Exception as e:
print(e)
return 200,{'code': 500, 'msg': str(e)}
5.10商品信息推荐

5.11商品信息


商品信息代码如下:
def commodityinformationinfo(self,request:HttpRequest):
"""查询商品信息详情"""
try:
payload = json.loads(request.body)['id']
instance = Commodityinformation.objects.get(id=payload)
# 启用协同过滤推荐时,记录用户的浏览/收藏行为
try:
userid, user = get_userid(request, UserAuthentication)
# 获取商品的名称和图片字段(用于显示)
# 这里假设模型有name和photo字段,如需调整请修改字段名
item_name = getattr(instance, 'name', getattr(instance, 'title', str(instance.id)))
item_picture = getattr(instance, 'photo', getattr(instance, 'image', ''))
# 创建或更新Storeup记录,用于协同过滤推荐
Storeup.objects.create(
userid=userid,
refid=payload,
tablename='commodityinformation',
type=1, # 1表示浏览/查看,可根据业务调整
name=item_name,
picture=item_picture,
addtime=datetime.now(),
)
except Exception as e:
print(f"记录用户行为失败: {e}")
# 记录失败不影响返回结果
pass
return 200,{'code': 0, 'msg': 'success', 'data': instance}
except Exception as e:
print(e)
return 200,{'code': 500, 'msg': str(e)}
5.12商品购买

商品购买代码如下:
@route.post(path='/page', response={200:OrdersPageResponse,500:BaseResponseSchema}, summary='分页读取订单')
def orderspage(self, payload: OrdersQueryInput):
try:
query_dict = get_query_dict(payload)
query = build_query(query_dict)
orders = Orders.objects.filter(query)
paginator, page = page_check(payload, orders)
return 200, {'code': 0, 'msg': 'success', 'data': {'total': paginator.count, 'list': list(page)}}
except Exception as e:
print(e)
return 500, {'code': 500, 'msg': str(e)}
@route.post(path='/info', response={200: OrdersDetailOutput,500:BaseResponseSchema}, summary='查询订单')
def ordersinfo(self,request: HttpRequest):
try:
order_id = json.loads(request.body.decode('utf-8'))['id']
orders = Orders.objects.get(id=order_id)
return 200,{'code': 0, 'msg': 'success', 'data': orders}
except Exception as e:
print(e)
return 500, {'code': 500, 'msg': str(e)}
5.13商品分类管理

5.14商品信息管理

修改商品信息代码如下:
@route.post(path='/update', summary='更改商品信息信息',response={200:BaseResponseSchema,500:BaseResponseSchema})
def updateCommodityinformation(self, payload: CommodityinformationInfoOutput):
"""更新商品信息记录"""
try:
instance = Commodityinformation.objects.get(id=payload.id)
save_dict=get_update_dict(payload)
instance.__dict__.update(**save_dict)
instance.save()
return 200, {'code': 0, 'msg': 'success', 'data': True}
except Exception as e:
print(e)
return 200,{'code': 500, 'msg': str(e)5.15订单管理

更多推荐



所有评论(0)