基于python新能源汽车数据分析可视化系统 懂车帝 Scrapy爬虫 Django框架 Vue框架 大数据项目(源码+文档)✅
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅点击查看作者主页,了解更多项目!
🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅
2、最全计算机专业毕业设计选题大全(建议收藏)✅
1、项目介绍
技术栈:
Python语言、Django框架 、MySQL数据库、Vue框架、Scrapy爬虫、Echarts可视化、懂车帝网数据、HTML
这款汽车信息网站是基于多项技术和框架设计的全面的汽车信息展示及查询系统。其中,采用了Python Django框架和Scrapy爬虫技术实现数据的抓取和处理,结合MySQL数据库进行数据存储和管理,利用Vue3、Element-Plus、ECharts以及Pinia等前端技术实现了丰富的数据可视化展示和用户交互功能。
该系统主要包含以下几个模块:
1.Scrapy爬虫:使用Scrapy框架抓取了“懂车帝”网站的汽车及销量数据,以及“车质网”的汽车投诉数据,并将这些数据存储进MySQL数据库中,为后续的展示和查询提供了数据基础。
- 条件选车模块:通过用户输入关键词、选择品牌、价格、燃料类型、座位、车型等条件,实现对车系的筛选,并提供了按总分、价格、舒适性、外观、配置、控制、动力、空间、内饰等维度对筛选结果的排序,并支持自动翻页功能。
- 销量榜单模块:根据近一年、近半年以及每个月的车系销量数据进行统计,并展示排名,为用户提供参考。
- 差评榜单模块:根据近一年、近半年以及每个月的车系问题投诉数据进行统计,并展示排名,同时可以筛选质量问题、服务问题、其他问题,为用户提供更加精准的信息。
- 可视化分析模块:包括车系降价排行榜柱状图可视化(官方价减去经销商价格得到降差价)、汽车品牌数量TOP分布图(分析前30个品牌的车系数量的分布)、价格范围数量分布图(对分布在0-10万 10-15万 15-20万 20-25万 25-30万 30-40万 50万以上价格范围的车系数量进行分析),为用户提供更加直观的数据呈现。
- 车系详情页面:介绍了品牌、车系名、经销商报价、厂商报价、近一年销量排名、投诉量排名等基本信息,并展示了评分雷达图分析面板,分析车系的舒适性、外观、配置、控制、动力、空间、内饰六个维度,同时展示汽车数据面板和外观图片,以及该车型的所有投诉问题标签。使用ECharts展示了每个月的质量问题关键词、三种问题的每月投诉量走势图、每月车系销量走势图、每月销量排名走势图。
- 后台管理模块:可以对所有数据进行增删改查的管理,方便管理员对数据进行维护和管理。
- 用户登陆注册:用户可以通过注册登陆功能,实现个人信息的管理和保存。
综上所述,该汽车信息网站具有多项功能,不仅提供了全面的汽车信息查询和展示功能,同时也通过数据可视化的方式为用户提供了更加丰富的数据分析和决策支持,是一款集数据处理、UI设计、前端交互、后台管理等于一体的全面性汽车信息系统。
2、项目界面
(1)汽车详情信息页面
(2)汽车数据分析—销量走势、销量排名曲线、投诉走势等等
(3)首页----按条件选车
(4)数据可视化分析----降价排行榜、汽车品牌分布、价格分布分析
(5)销量榜单分析
(6)差评榜单—质量、服务、其他
(7)汽车详情页面
(8)注册登录
(9)后台数据管理
3、项目说明
项目功能模块介绍
1. 汽车详情信息页面
- 功能:展示汽车的详细信息,包括车辆参数、配置、图片等。
- 技术实现:通过 Django 框架从 MySQL 数据库中查询汽车的详细信息,并通过 Vue 框架在前端展示。
2. 汽车数据分析
- 功能:
- 展示汽车销量走势、销量排名曲线。
- 分析投诉走势等数据。
- 技术实现:使用 Scrapy 爬虫从懂车帝网等平台采集数据,存储到 MySQL 数据库中。通过 Django 后端处理数据,结合 Echarts 进行可视化展示。
3. 首页——按条件选车
- 功能:用户可以根据品牌、价格、车型等条件筛选汽车。
- 技术实现:前端使用 Vue 框架实现筛选功能,后端通过 Django 框架从数据库中查询符合条件的汽车数据。
4. 数据可视化分析
- 功能:
- 展示降价排行榜。
- 分析汽车品牌分布和价格分布。
- 技术实现:利用 Echarts 进行数据可视化,将复杂的数据以直观的图表形式展示给用户。
5. 销量榜单分析
- 功能:展示各品牌、各车型的销量榜单。
- 技术实现:通过 Django 后端从数据库中提取销量数据,并通过 Vue 前端展示。
6. 差评榜单
- 功能:展示汽车的质量、服务等方面的差评情况。
- 技术实现:从数据库中提取用户评价数据,通过 Echarts 进行可视化展示。
7. 汽车详情页面
- 功能:展示汽车的详细信息,包括配置、参数、用户评价等。
- 技术实现:结合 Django 和 Vue 框架,从数据库中查询并展示汽车的详细信息。
8. 注册登录
- 功能:用户可以注册账号并登录,保护用户数据和隐私。
- 技术实现:使用 Django 的用户认证系统,结合 Vue 前端实现安全的注册和登录功能。
9. 后台数据管理
- 功能:管理员可以管理汽车数据、用户数据、评价数据等。
- 技术实现:通过 Django 框架搭建后台管理系统,实现数据的增、删、改、查等操作。
4、核心代码
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_cachedef to_dict(l, exclude=tuple(), single=False):# 将数据库模型 变为 字典数据 的工具类函数def transform(v):if isinstance(v, datetime):return v.strftime("%Y-%m-%d %H:%M:%S")return vdef _todict(obj):j = {k: transform(v)for k, v in obj.__dict__.items()if not k.startswith("_") and k not in exclude}return jif single:return _todict(l)return [_todict(i) for i in l]def car_rank(request):body = request.jsonid = body.get("id")return _car_rank(id)@lru_cache()
def _car_rank(id):# 获取当前日期及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"))result = (CarSale.objects.filter(q).values("series_id", "series_name").annotate(total_sales=Sum("rank_value")).filter(total_sales__gt=0).order_by("-total_sales"))sales_rank = next((ifor i, e in enumerate(result,start=1,)if e["series_id"] == int(id)),-1,)# ---------# 获取当前日期及1年前的日期q = Q(stime__gte=one_year_ago.strftime("%Y-%m-%d"),stime__lte=today.strftime("%Y-%m-%d"),)result = (CarIssue.objects.filter(q).values("series_id", "series_name").annotate(total_issues=Sum("count")).filter(total_issues__gt=0).order_by("-total_issues"))issue_rank = next((ifor i, e in enumerate(result,start=1,)if e["series_id"] == int(id)),-1,)return JsonResponse(dict(sales_rank=sales_rank, issue_rank=issue_rank))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.jsonstime = 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.jsonid = 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.jsonid = 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)
🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目代码以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅
点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻