计算机毕业设计:汽车数据可视化与智能分析平台 Django框架 Scrapy爬虫 可视化 车辆 懂车帝大数据 数据分析 机器学习(建议收藏)✅

博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅**感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。**🍅

1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2026年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

1、项目介绍

技术栈

Python 语言、Django 框架、MySQL 数据库、Vue 前端框架、Scrapy 爬虫框架、Echarts 可视化库、Element Plus UI 组件库、Pinia 状态管理、Vue Router、懂车帝网与车质网数据源

功能模块

  • 数据采集模块
  • 条件选车模块
  • 销量榜单模块
  • 差评榜单模块
  • 可视化分析模块
  • 车系详情模块
  • 后台管理模块
  • 用户认证模块

项目介绍

本系统基于 Python 与 Django 框架开发,结合 Scrapy 爬虫与 Vue 前端技术,构建集数据抓取、查询展示、可视化分析于一体的汽车信息平台。系统通过 Scrapy 爬虫抓取懂车帝汽车及销量数据、车质网投诉数据,经 MySQL 存储后,利用 Vue3、Element Plus 与 Echarts 实现丰富交互与可视化。平台提供多条件筛选排序选车、多时间维度销量与差评榜单、车系详情展示(含评分雷达图、质量问题词云图及投诉趋势)、车系降价排行、品牌数量分布、价格区间分布等多维度可视化分析,支持用户注册登录与后台数据管理,为用户提供全面的汽车信息查询与决策支持。

2、项目界面

(1)汽车数据、条件筛选汽车

该页面是汽车数据可视化分析系统的条件选车界面,支持按品牌、价格、燃料、座位、车型等多维度筛选汽车,以卡片形式展示符合条件的车辆信息,同时提供销量榜单、差评榜单和可视化分析等功能入口,方便用户精准查找并了解汽车相关数据。

(2)汽车数据详情页

该页面是汽车数据可视化分析系统的车型详情界面,展示目标车型的基础信息、参数配置、评分雷达图,呈现不同版本与车身颜色选择,通过标签、词云图、时间轴折线图分析质量问题,辅助用户全面了解车型表现。

(3)销量排行榜

该页面是汽车数据可视化分析系统的销量榜单界面,支持按时间筛选,以列表形式展示各车型的排名、车辆图片、名称、级别、价格、评分及销量数据,侧边栏还提供条件选车、差评榜单和可视化分析等功能入口,方便用户直观了解不同时段的汽车销量排行情况。

(4)差评榜单

该页面是汽车数据可视化分析系统的差评榜单界面,支持按时间和问题类型筛选,以列表形式展示各车型的排名、车辆图片、名称、级别、价格、评分、问题数及具体问题标签,侧边栏还提供条件选车、销量榜单和可视化分析等功能入口,方便用户直观了解不同时段各类汽车的质量与服务问题分布情况。

(5)可视化分析

该页面是汽车数据可视化分析系统的可视化分析界面,通过条形图、环形图、柱状图等多种图表,分别展示车系降价排行、汽车品牌数量分布及价格范围数量分布,侧边栏还提供条件选车、销量榜单和差评榜单等功能入口,实现汽车多维度数据的直观可视化展示与分析。

(6)后台数据管理

该页面是汽车数据可视化分析系统的后台管理界面,以列表形式展示车系的详细信息,支持按品牌、子品牌、车系名称等条件搜索筛选,同时提供新增、删除等数据维护功能,还可对品牌、车系及销量数据进行统计管理,实现汽车数据的全流程后台管控。

(7)注册登录

该页面是汽车数据可视化分析系统的登录界面,提供用户名与密码输入框,支持用户完成身份验证登录,同时设有注册入口,方便新用户创建账号,为后续访问系统数据管理、可视化分析等功能提供权限保障。

(8)数据采集

该页面是汽车数据分析系统的爬虫代码编辑与运行界面,通过编写Scrapy爬虫脚本实现汽车相关数据的采集,终端实时展示数据爬取日志,为后续汽车数据可视化分析提供原始数据支撑。

3、项目说明

一、技术栈简要说明

系统后端采用 Python 语言与 Django 框架构建,前端使用 Vue 框架结合 Element Plus UI 组件库实现交互界面,数据库选用 MySQL 进行数据存储。数据采集基于 Scrapy 爬虫框架抓取懂车帝汽车及销量数据、车质网投诉数据,可视化部分通过 Echarts 图表库实现雷达图、词云图、时间轴折线图等多种图形渲染,状态管理使用 Pinia,路由管理采用 Vue Router。

二、功能模块详细介绍

· 数据采集模块

基于 Scrapy 爬虫框架,编写爬虫脚本抓取懂车帝网站的汽车及销量数据、车质网网站的汽车投诉数据,终端实时展示数据爬取日志,经处理后存储于 MySQL 数据库,为后续展示与分析提供数据基础。

· 条件选车模块

支持按品牌、价格、燃料类型、座位、车型等多维度筛选汽车,以卡片形式展示符合条件的车辆信息,提供按总分、价格、舒适性、外观、配置、动力、空间、内饰等维度排序功能,并支持自动翻页。

· 销量榜单模块

根据近一年、近半年及每个月的车系销量数据进行统计,以列表形式展示各车型排名、车辆图片、名称、级别、价格、评分及销量数据,支持按时间筛选,方便用户了解不同时段的销量排行。

· 差评榜单模块

根据近一年、近半年及每个月的车系问题投诉数据进行统计,支持按时间和问题类型(质量问题、服务问题、其他问题)筛选,以列表形式展示车型排名、问题数及具体问题标签,辅助用户了解车辆质量与服务问题分布。

· 可视化分析模块

通过条形图、环形图、柱状图等多种图表,展示车系降价排行(官方价与经销商价差值)、汽车品牌数量 TOP 分布、价格范围数量分布等指标,实现汽车多维度数据的直观可视化分析。

· 车系详情模块

展示目标车型的基础信息、参数配置、经销商报价、厂商报价、近一年销量排名、投诉量排名,通过雷达图分析舒适性、外观、配置、控制、动力、空间、内饰六个维度,以词云图展示质量问题关键词,用时间轴折线图呈现三种问题的每月投诉量走势、每月销量走势及销量排名走势。

· 后台管理模块

基于 Django 后台管理框架,以列表形式展示车系详细信息,支持按品牌、子品牌、车系名称等条件搜索筛选,提供新增、删除等数据维护功能,可对品牌、车系及销量数据进行统计管理,实现汽车数据的全流程后台管控。

· 用户认证模块

提供用户注册与登录功能,包含用户名与密码输入框,支持身份验证登录与账号创建,为后续访问系统数据管理、可视化分析等功能提供权限保障。

三、项目总结

本系统基于 Python 与 Django 框架开发,结合 Scrapy 爬虫与 Vue 前端技术,构建集数据抓取、查询展示、可视化分析于一体的汽车信息平台。系统通过 Scrapy 爬虫抓取懂车帝汽车及销量数据、车质网投诉数据,经 MySQL 存储后,利用 Vue3、Element Plus 与 Echarts 实现丰富交互与可视化。平台提供多条件筛选排序选车、多时间维度销量与差评榜单、车系详情展示(含评分雷达图、质量问题词云图及投诉趋势)、车系降价排行、品牌数量分布、价格区间分布等多维度可视化分析,支持用户注册登录与后台数据管理,为用户提供全面的汽车信息查询与决策支持。

4、核心代码

python 复制代码
from django.shortcuts import render
from datetime import datetime, timedelta
from .models import *
from django.http.response import JsonResponse
from itertools import groupby
from .models import *
import json
from django.http.response import HttpResponse
from django.shortcuts import render
from django.http import JsonResponse
from pyecharts import options as opts
from pyecharts.charts import Map, Grid, Bar, Line, Pie, WordCloud, Radar, Timeline
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
from pyecharts.options.charts_options import MapItem
from datetime import datetime, time
from django.core.paginator import Paginator
from django.db.models import Q, F
from pyecharts.globals import SymbolType
from django.db.models import Sum, Count, Max, Min, Avg
from collections import Counter
from requests_html import requests
from itertools import chain
from functools import lru_cache


def car_sales_rank(request):
    # 获取请求体中的数据
    body = request.json
    # 获取请求体中的月份
    month = body.get("month")
    # 定义查询条件
    q = Q()
    # 根据月份设置查询条件
    if month == "1y":
        # 获取当前日期及1年前的日期
        today = datetime.now().date()
        one_year_ago = today - timedelta(days=365)
        # 设置查询条件
        q &= Q(
            month__gte=one_year_ago.strftime("%Y%m"), month__lte=today.strftime("%Y%m")
        )
    elif month == "6m":
        # 近半年,即6个月
        today = datetime.now().date()
        half_year_ago = today - timedelta(days=365 // 2)
        # 设置查询条件
        q &= Q(
            month__gte=half_year_ago.strftime("%Y%m"), month__lte=today.strftime("%Y%m")
        )
    else:
        q &= Q(month=month)
    # 统计各个车系一年内的总销量,并按照销量进行排序和排名
    result = (
        CarSale.objects.filter(q)
        .values("series_id", "series_name")
        .annotate(total_sales=Sum("rank_value"))
        .order_by("-total_sales")
    )
    # 对结果进行排名
    result_list = list(result)
    for i, item in enumerate(result_list):
        item["sales_rank"] = i + 1
    # 分页处理数据
    pagesize = body.get("pagesize", 20)
    page_num = body.get("page", 1)
    paginator = Paginator(result_list, pagesize)  # 创建Paginator对象
    page = paginator.get_page(page_num)  # 获取指定页码的数据
    result = list(page.object_list)
    # 获取每个车系的详细信息,并将其添加到结果中
    for i in result:
        car_series = to_dict([CarSeries.objects.get(series_id=i["series_id"])])[0]
        i.update(**car_series)
    # 返回分页后的结果
    return JsonResponse({"total": paginator.count, "records": result})


def car_issue_rank(request):
    body = request.json
    stime = body.get("stime")
    type = body.get("type")
    q = Q()
    if stime == "1y":
        # 获取当前日期及1年前的日期
        today = datetime.now().date()
        one_year_ago = today - timedelta(days=365)
        q &= Q(
            stime__gte=one_year_ago.strftime("%Y-%m-%d"),
            stime__lte=today.strftime("%Y-%m-%d"),
        )
    elif stime == "6m":
        # 近半年,即6个月
        today = datetime.now().date()
        half_year_ago = today - timedelta(days=365 // 2)
        q &= Q(
            stime__gte=half_year_ago.strftime("%Y-%m-%d"),
            stime__lte=today.strftime("%Y-%m-%d"),
        )
    else:
        q &= Q(stime=stime)
    if type:
        q &= Q(type=type)
    # 统计各个车系一年内的总问题数,并按照问题数进行排序和排名
    result = (
        CarIssue.objects.filter(q)
        .values("series_id", "series_name")
        .annotate(total_issues=Sum("count"))
        .order_by("-total_issues")
    )

    # 对结果进行排名
    result_list = list(result)
    for i, item in enumerate(result_list):
        item["issues_rank"] = i + 1

    # 分页处理数据
    pagesize = body.get("pagesize", 20)
    page_num = body.get("page", 1)
    paginator = Paginator(result_list, pagesize)  # 创建Paginator对象
    page = paginator.get_page(page_num)  # 获取指定页码的数据
    result = list(page.object_list)
    for i in result:
        car_series = to_dict([CarSeries.objects.get(series_id=i["series_id"])])[0]
        counter = Counter()
        for x in CarIssue.objects.filter(q, series_id=i["series_id"]).values_list(
            "dxwt", flat=True
        ):
            counter.update(dict([(j["ctiTitle"], j["count"]) for j in x]))
        i["issues"] = counter.most_common(10)
        i.update(**car_series)
    return JsonResponse({"total": paginator.count, "records": result})


def get_detail(request):
    body = request.json
    id = body.get("id")
    o = CarSeries.objects.get(pk=id)
    o = to_dict(o, single=True)
    o["brand"] = to_dict(Brand.objects.get(brand_id=o["brand_id"]), single=True)
    return JsonResponse(o)


def car_360_color_pic(request):
    body = request.json
    id = body.get("id")
    try:
        color_pic_list = requests.get(
            f"https://www.dongchedi.com/motor/pc/car/series/car_360_color_pic?aid=1839&app_name=auto_web_pc&series_id={id}"
        ).json()["data"]["color_pic_list"]
    except:
        color_pic_list = []
    return JsonResponse(color_pic_list, safe=False)


def radar_chart(request):
    body = request.json
    id = body.get("id")
    # 从数据库中读取评分数据
    car_series = CarSeries.objects.get(series_id=id)
    color = "#f4cf63"
    # 转换数据范围
    min_score = 1
    max_score = 500
    scale = 5
    comfort_score = car_series.comfort_score / max_score * scale
    appearance_score = car_series.appearance_score / max_score * scale
    configuration_score = car_series.configuration_score / max_score * scale
    control_score = car_series.control_score / max_score * scale
    power_score = car_series.power_score / max_score * scale
    space_score = car_series.space_score / max_score * scale
    interiors_score = car_series.interiors_score / max_score * scale
    total_score = round(car_series.total_score / max_score * scale, 2)

def car_series_analysis(request):
    low_price_data = {}
    for i in range(7):
        low_price_data[str(i)] = 0
    for car_series in CarSeries.objects.all():
        if car_series.dealer_low_price is not None:
            if car_series.dealer_low_price < 10:
                low_price_data["0"] += 1
            elif car_series.dealer_low_price < 15:
                low_price_data["1"] += 1
            elif car_series.dealer_low_price < 20:
                low_price_data["2"] += 1
            elif car_series.dealer_low_price < 25:
                low_price_data["3"] += 1
            elif car_series.dealer_low_price < 30:
                low_price_data["4"] += 1
            elif car_series.dealer_low_price < 40:
                low_price_data["5"] += 1
            else:
                low_price_data["6"] += 1

    bar = (
        Bar()
        .add_xaxis(["0-10万", "10-15万", "15-20万", "20-25万", "25-30万", "30-40万", "50万以上"])
        .add_yaxis(
            "车系数量",
            [
                low_price_data["0"],
                low_price_data["1"],
                low_price_data["2"],
                low_price_data["3"],
                low_price_data["4"],
                low_price_data["5"],
                low_price_data["6"],
            ],
            bar_width=50,
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="价格范围数量分布图", pos_left="center", pos_top=0),
            legend_opts=opts.LegendOpts(is_show=False),
            xaxis_opts=opts.AxisOpts(
                name="价格范围",
                axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
            ),
            yaxis_opts=opts.AxisOpts(name="车系数量"),
        )
    )

    return HttpResponse(bar.dump_options(), content_type="aplication/json")

5、项目列表


6、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看 👇🏻获取联系方式👇🏻

相关推荐
计算机安禾2 小时前
【数据结构与算法】第10篇:项目实战:学生信息管理系统(线性表版)
开发语言·数据结构·算法·visual studio
FakeOccupational2 小时前
【电路笔记 通信】IEEE 1588精密时间协议(PTP):数学假设+时间同步链路建模+消除主从偏差算法
笔记·算法
客卿1232 小时前
最小生成树(贪心)--构造回文串(字符串 + 回文判断 + 构造)
java·开发语言·算法
88号技师2 小时前
2026年3月中科院一区SCI-赏金猎人优化算法Bounty Hunter Optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
再卷也是菜2 小时前
算法基础篇(12)Trie树
算法·字典树
小糯米6012 小时前
C++ 单调栈原理与模板
开发语言·c++·算法
常利兵2 小时前
Android 集合探秘:ArrayMap 与 SparseArray 的奇妙之旅
android·算法·哈希算法
滴滴答滴答答2 小时前
LeetCode Hot100 之 41 缺失的第一个正数
算法·leetcode·职场和发展
rgb2gray2 小时前
论文详解:基于POI与出租车轨迹的城市多中心结构静态-动态多重分形特征
人工智能·python·算法·机器学习·数据分析·可解释