毕业设计题目:Django+Vue 基于随机森林算法的手机销量分析与预测

一、 系统设计思想与核心功能

设计思想: 采用前后端分离架构,Django作为后端提供RESTful API负责数据管理、模型训练和预测,Vue作为前端负责数据可视化、用户交互和结果展示。随机森林模型作为核心预测引擎。

核心功能模块:

  1. 数据管理模块:

    • 手机销量数据的上传、查看、编辑、删除。

    • 数据字段可能包括:品牌、型号、发布时间、价格、屏幕尺寸、内存、存储、摄像头像素、电池容量、历史销量等。

  2. 数据分析与可视化模块:

    • 多维度数据看板: 使用ECharts等图表库展示销量趋势(按时间)、品牌市场份额、价格分布、功能特性与销量的关系等。

    • 数据探索: 用户可以选择不同维度和筛选条件来动态生成图表。

  3. 机器学习预测模块:

    • 模型训练: 用户可以选择数据特征,触发后端训练随机森林回归模型(预测具体销量)或分类模型(预测销量等级,如高/中/低)。

    • 单样本预测: 用户在前端输入或选择一款手机的各项参数,系统调用已训练好的模型预测其销量。

    • 批量预测: 上传包含多款手机参数的文件,进行批量预测并下载结果。

  4. 模型评估模块:

    • 训练完成后,展示模型的关键评估指标,如:均方误差(MSE)、决定系数(R²)、特征重要性排序图。


二、 系统整体架构

系统采用经典的前后端分离架构,其数据流和组件交互如下图所示:


三、 技术栈选型

层级 技术 说明
前端 Vue 3 主流前端框架,响应式,组合式API。
Vue Router 前端路由管理。
Vuex / Pinia 状态管理,存储用户token、图表数据等。
Axios 基于Promise的HTTP库,用于前后端通信。
Element Plus 基于Vue 3的UI组件库,快速构建美观界面。
ECharts / AntV G2 强大的图表可视化库。
后端 Django 4.2 强大的Python Web框架,提供完善功能和安全性。
Django REST Framework 用于构建RESTful API的强大工具集。
Pandas & NumPy 数据处理和分析的核心库。
Scikit-learn 机器学习库,用于构建随机森林模型。
Joblib / Pickle 用于将训练好的模型序列化并保存到磁盘。
数据库 SQLite 开发测试阶段使用,轻量级。
MySQL / PostgreSQL 生产环境推荐,性能更强,更稳定。
开发工具 Node.js & npm Vue项目构建和依赖管理。
PyCharm / VS Code IDE。

四、 数据库模型设计

在Django的models.py中定义核心数据模型:

python

from django.db import models

class PhoneSalesData(models.Model):
    # 基础信息
    brand = models.CharField(max_length=50, verbose_name="品牌")
    model = models.CharField(max_length=100, verbose_name="型号")
    release_date = models.DateField(verbose_name="发布日期")
    
    # 规格参数
    price = models.FloatField(verbose_name="发售价")
    screen_size = models.FloatField(verbose_name="屏幕尺寸")
    ram = models.IntegerField(verbose_name="运行内存")
    storage = models.IntegerField(verbose_name="存储容量")
    camera_main = models.FloatField(verbose_name="主摄像头像素")
    battery = models.IntegerField(verbose_name="电池容量")
    # ... 可根据需要添加更多特征
    
    # 目标变量
    sales_volume = models.FloatField(verbose_name="销量", null=True, blank=True) # 用于训练和真实数据
    # 或者使用销量等级
    sales_level = models.CharField(max_length=10, choices=(('H', '高'), ('M', '中'), ('L', '低')), verbose_name="销量等级")
    
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    def __str__(self):
        return f"{self.brand} {self.model}"

行结果展示:

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐