新能源汽车可视化大屏数据系列之八渲染中间页面显示数据

举报
tea_year 发表于 2024/12/24 12:02:57 2024/12/24
【摘要】 新能源汽车大屏可视化实训技术通过集成Django、Vue和ECharts、DataV等技术,实现了对新能源汽车数据的全面展示与分析。系统利用爬虫技术获取各大品牌的销售数据,存储于MySQL数据库中,并通过ECharts进行多维度的可视化展示,包括车系销量排名、投诉信息、降价排行等。该技术不仅提升了数据的直观性和可操作性,还为市场研究、企业决策提供了重要支持,推动了新能源汽车行业的智能化发展。

任务:

         将数据库的数据,渲染到大屏的中间屏部分

操作步骤:

        1.修改"big-screen-vue-datav-master\src\views"下的Center.vue,修改代码如下所示:

    <div class="up">

      <div class="bg-color-black item">
        <p class="ml-3 colorBlue fw-b fs-xl" style="text-align: center">车辆总数据</p>
        <div style="text-align: center">{{this.result.x1}}条</div>
      </div>
      <div class="bg-color-black item">
        <p class="ml-3 colorBlue fw-b fs-xl" style="text-align: center">销售量最多汽车</p>
        <div style="text-align: center">{{this.result.x2}}</div>
      </div>
      <div class="bg-color-black item">
        <p class="ml-3 colorBlue fw-b fs-xl" style="text-align: center">车辆最高销售额</p>
        <div style="text-align: center">{{this.result.x3}}</div>
      </div>
      <div class="bg-color-black item">
        <p class="ml-3 colorBlue fw-b fs-xl" style="text-align: center">销售最多车型</p>
        <div style="text-align: center">{{this.result.x4}}</div>
      </div>
      <div class="bg-color-black item">
        <p class="ml-3 colorBlue fw-b fs-xl" style="text-align: center">车型最多品牌</p>
        <div style="text-align: center">{{this.result.x5}}</div>
      </div>
      <div class="bg-color-black item">
        <p class="ml-3 colorBlue fw-b fs-xl" style="text-align: center">车辆平均价格</p>
        <div style="text-align: center">{{this.result.x6}}万</div>
      </div>

    </div>

         2.在carProject(你的django项目)下,修改urls.py文件,用于设置项目的url地址

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/',include('myapp.urls'))
]

        3.在myapp项目下(或myApp),添加urls.py,代码如下

# 导入相关的类库文件
from django.urls import path

from myapp import views

urlpatterns=[
    path("center/",views.center,name="center"),
]

       4.在myapp项目下,修改views.py文件

from django.shortcuts import render
from django.http import JsonResponse,HttpResponse
from .utils import  getCenterData,getPublicData

# Create your views here.
def center(request):
    if request.method == 'GET':
        getCenterData.getBaseData()
        return JsonResponse()


      5.在myapp项目,添加utils目录,该目录下创建getPublicData.py文件

from  myApp.models import *

#定义获取所有的数据
def getAllCars():
    return CarInfo.objects.all()


        在myapp项目的utils下创建和getCenterData.py文件,代码如下:

#导包
import  json
import time

from numpy.ma.extras import average

from .getPublicData import *

#定义函数
def getBaseData():
    cars=getAllCars()
    sumCar=len(cars)
    highVolume=cars[0].saleVolume
    topCar=cars[0].carName
    print(sumCar,highVolume,topCar)

         6.运行项目carProject

D:\pythondemo\carproject22\.venv\Scripts\python.exe D:\pythondemo\carproject22\manage.py runserver localhost:8000 
Performing system checks...

Watching for file changes with StatReloader
System check identified no issues (0 silenced).
December 24, 2024 - 12:02:25
Django version 4.2.17, using settings 'carproject22.settings'
Starting development server at http://localhost:8000/
Quit the server with CTRL-BREAK.


然后在地址栏输入网址:http://localhost:8000/myapp/center,回车,浏览器可能会报错,不用管!

出现下面箭头所示的内容提示表示成功!

7.车型最多的数据、车型最多品牌数据、平均价格获取

#车型:复合数据过滤;最开始车型列表为空,判断第一个“小型车”,没有-1,则设置carModels['小型车']=1
    #否则carModels['小型车']+1  =2
    carModels={}
    for car in cars:
        if carModels.get(car.carModel,-1) == -1:
           carModels[str(car.carModel)]=1
        else:
            carModels[str(car.carModel)]+=1
    print(carModels)
    #排序
    carModels=sorted(carModels.items(),key=lambda x:x[1],reverse=True)
    print(carModels[0][0])
#车型最多的品牌
    carBrands={}
    maxBrand=0
    mostBrand=''
    for car in cars:
        if carBrands.get(car.brand,-1) == -1:
            carBrands[str(car.brand)]=1
        else:
            carBrands[str(car.brand)]+=1

    #打印测试
    print(carBrands)
    # carBrands = sorted(carBrands.items(), key=lambda x: x[1], reverse=True)
    # print(carBrands[0][0])
    for k,v in carBrands.items():
        if v>maxBrand:
            maxBrand=v
            mostBrand=k
    print(mostBrand)

    # 平均价格;理解json.loads()函数;sumCar*2 算了2次; 保留2位小数;
    sumPrice=0
    for car in cars:
        x=json.loads(car.price)[0]+json.loads(car.price)[1]
        sumPrice+=x
    avgPrice=sumPrice/(sumCar*2)
    avgPrice=round(avgPrice,2)
    print(avgPrice)

综合效果如下所示:

486 56156 海鸥
{'小型车': 11, '微型车': 20, '中型车': 54, '紧凑型SUV': 113, '紧凑型车': 68, '中大型SUV': 51, '中型SUV': 73, '中大型车': 32, '小型SUV': 19, '大型SUV': 5, '微面': 6, '中大型MPV': 18, '中型MPV': 5, '紧凑型MPV': 10, '大型MPV': 1}
紧凑型SUV
{'比亚迪': 35, '五菱汽车': 21, '吉利汽车': 13, '理想汽车': 8, '小米汽车': 1, '长安': 17, '奇瑞': 17, '吉利银河': 7, '红旗': 14, 'AITO': 6, '哈弗': 11, '奔腾': 6, '埃安': 8, '零跑汽车': 7, '极氪': 9, '智界': 2, '捷途': 16, '领克': 13, '岚图': 6, '深蓝汽车': 8, '长安欧尚': 7, '小鹏汽车': 9, '北京': 5, '广汽传祺': 18, '魏牌': 2, '方程豹': 4, '奇瑞新能源': 5, '蔚来': 8, '东风纳米': 2, '名爵': 6, '智己汽车': 4, '坦克': 7, '乐道': 2, '长安启源': 6, 'iCAR': 2, 'ARCFOX极狐': 6, '欧拉': 2, '北京汽车': 3, '蓝电': 2, '东风奕派': 4, '星途': 9, '江铃集团新能源': 3, '阿维塔': 3, '东风风行': 4, '知豆': 2, '昊铂': 2, 'SRM鑫源': 2, '宝骏': 6, '江淮钇为': 2, '荣威': 7, '东风风神': 4, '启辰': 5, '凯翼': 4, '北汽制造': 1, '212': 2, '曹操汽车': 2, '上汽大通MAXUS': 2, '吉利几何': 1, '享界': 1, '极越': 2, '凌宝汽车': 1, '哪吒汽车': 1, '江淮瑞风': 1, '极石汽车': 1, '思皓': 1, '大众': 14, '本田': 8, '丰田': 12, '奥迪': 6, '奔驰': 5, '别克': 8, '宝马': 7, '日产': 4, '捷达': 3, '腾势': 2, '福特': 4, '凯迪拉克': 2, '沃尔沃': 2, '雪佛兰': 1, '马自达': 3, 'smart': 2, '林肯': 2, '现代': 1, '北京汽车制造厂': 1, '起亚': 1}
比亚迪
17.98


总结:

最后三个功能的完善,需要借助python的技术点比较多!

  • 增加注释和文档:

    • 添加更多注释来解释每一步的操作,以提高代码的可读性和维护性。
  • 异常处理:

    • 增加异常处理机制,例如在解析 JSON 数据时捕获可能的异常,确保程序的健壮性。
  • 优化性能:

    • 如果数据量很大,可以考虑使用更高效的数据结构和算法来提高性能。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。