Python实现的新能源汽车销售数据分析与可视化系统

摘要

       随着人们环保意识的不断提高和政府的大力支持,新能源汽车市场逐渐壮大并引起了人们的广泛关注。为了分析新能源汽车的销售情况,本系统整体使用Django+Vue框架来链接前后端,以Python编程语言为基础,使用爬虫技术收集各大品牌新能源汽车销售数据,将销售数据存储在MySQL数据库,再使用ECharts技术对新能源汽车销售数据进行可视化展示。通过分析新能源汽车的车系销量排名、车系投诉信息、车系降价排行榜、汽车品牌数量分布、价格范围、具体车辆投诉信息、具体车辆投诉量走势以及具体车辆销量走势等,最终完成对新能源汽车市场的全面了解,为新能源汽车购买者、新能源汽车厂家提供有价值的参考依据。


1 技术

  • 爬虫
  • MySQL
  • Django+Vue框架
  • ECharts可视化技术

  • 1.1 爬虫

    爬取过程中首先定位懂车帝网站的url:https://www.dongchedi.com/,使用start_requests方法从dataset/allBrands.json文件中加载所有品牌信息,过滤出具有brand_name字段的品牌,对每个品牌,生成一个Scrapy请求,并将品牌信息作为meta数据传递给回调函数。

    class DcdSpider(scrapy.Spider):
        name = "dcd"
        url = "https://www.dongchedi.com/auto/library-brand/{}"
    
        def start_requests(self):
            with open("dataset/allBrands.json", encoding="utf-8") as f:
                allBrands = json.load(f)
            allBrands = filter(lambda x: x["info"].get("brand_name"), allBrands)
            for brand in allBrands:
                yield scrapy.Request(
                    self.url.format(brand["info"]["brand_id"]),
                    callback=self.parse,
                    meta=dict(brand=brand),
                )

    1.2 MySQL

    MySQL作为一个成熟的关系型数据库管理系统,提供高效、可靠、稳定的数据存储和管理服务,非常适合用于存储和管理原始数据。可以将MySQL作为数据存储的后端。

    部分表结构如图所示:

    (1)品牌信息表:主要保存了车辆品牌的信息,包括品牌ID、品牌图片、品牌名称、拼音首字母、上架系列数量。这些信息对于理解汽车特性至关重要。

    (2)销量信息表:主要保存新能源汽车销量的信息,包括ID、车系ID、车系名称、月份、全国销量排名、全国销量、上月销量。这些信息对于用户查看热销车辆以及购买车辆提供了数据基础。

    (3)投诉信息表:主要保存新能源汽车的相关投诉信息,包括ID、车系名、车系id、问题类型、开始时间、结束时间、问题、车款年份、问题总数、问题标签,这些信息对于查看新能源汽车存在的问题提供了信息基础。

    1.3 Django+Vue框架

    本系统的前端页面采用Vue框架,在index.vue中定义多个filter-panel来过滤用户需要的信息,展示前端页面;后端采用Django框架,利用其强大的用户认证系统,用它实现用户注册、用户登录等功能。Django框架的特点有功能完善、要素齐全,有强大的数据库访问组件,并且有完整的错误信息提示,在开发调试过程中如果出现问题可快速定位问题,Django框架先通过url请求来访问路由系统,视图函数处理请求,database数据库操作数据生成对应页面返回给用户。

    manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行。manage.py接受的是Django提供的内置命令。运行manage.py文件,启动系统后端。

    manage.py代码如下所示:

    import os
    import sys
    
    
    def main():
        """Run administrative tasks."""
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "car_analyse_system.settings")
        try:
            from django.core.management import execute_from_command_line
        except ImportError as exc:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            ) from exc
    
        execute_from_command_line(sys.argv)
    
    
    if __name__ == "__main__":
        main()

    后端界面:

    前端界面:

    1.4 ECharts可视化技术

    ECharts全称为Enterprise Charts,是百度旗下的一个数据可视化工具,这是一个开源的,基于Web的跨平台框架,它不仅兼容当下许多不同类型的浏览器,而且还支持交互式的可视化图表的快速构建。本系统使用Python的数据可视化库Pyecharts对新能源汽车的车系降价情况、汽车品牌数量分布、价格区间范围数量分布、投诉信息、车辆销量排行进行绘制图表。

    (1)车系降价排行榜

    bar = (
        Bar()
        .add_xaxis(series_names)
        .add_yaxis("官方价与经销商报价的差值",
            price_diff_values,
            label_opts=opts.LabelOpts(formatter="{b}"),)
        .reversal_axis()
        .set_global_opts(
            title_opts=opts.TitleOpts(title="车系降价排行榜", pos_left="center", pos_top=0),
    legend_opts=opts.LegendOpts(is_show=False),)

    (2)汽车品牌数量TOP分布

    chart = (
        Pie()
        .add(
            "",
            list(zip(brands, counts)),
            label_opts=opts.LabelOpts(formatter="{b}: {d}%"),
            radius=["40%", "75%"],
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="汽车品牌数量TOP分布图", pos_left="center", pos_top=0),
            legend_opts=opts.LegendOpts(type_="scroll", pos_left=0, orient="vertical"),))

    (3)质量问题

    for month in months:
            # 创建词云图对象
            wordcloud_chart = WordCloud()
            for type, name in [(1, "质量问题")]:
                dxwt = (
                    CarIssue.objects.filter(series_id=id, type=type, stime=month)
                    .values_list("dxwt", flat=True)
                    .order_by("-stime")
                    .first()
    )
    words = [(i["ctiTitle"], i["count"]) for i in dxwt]

    (4)投诉量走势

    line_chart.set_global_opts(
        title_opts=opts.TitleOpts(title="投诉量走势图", pos_bottom=0, pos_left="center"),
        xaxis_opts=opts.AxisOpts(
            name="月份",
            axispointer_opts=opts.AxisPointerOpts(is_show=True),),
        yaxis_opts=opts.AxisOpts(
            name="投诉量",
            axislabel_opts=opts.LabelOpts(formatter="{value}"),),
        legend_opts=opts.LegendOpts(is_show=True, selected_map={"其他问题": False}),)

    (5)车辆销量走势

    line_chart.set_global_opts(
        title_opts=opts.TitleOpts(title="销量走势图", pos_bottom=0, pos_left="center"),
        xaxis_opts=opts.AxisOpts(
            name="月份",
            axispointer_opts=opts.AxisPointerOpts(is_show=True),
        ),
        yaxis_opts=opts.AxisOpts(
            name="销量",
            axislabel_opts=opts.LabelOpts(formatter="{value} 辆"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
        visualmap_opts=opts.VisualMapOpts(max_=max_),
    )

    (6)销量榜单

    (7)差评榜单

    (8)雷达图


    2 功能模块

    依据系统的功能性需求,本次系统总体功能设计在既能简化新能源汽车销售数据销售分析的繁琐流程,对新能源汽车销售数据分析提供了一个强大的平台支撑,又能保证销售数据分析的可信度,为新能源汽车厂家内部提供决策服务的前提下进行设计。本系统的功能设计总共分为前端和后端两部分。前端通过登录与注册、条件选车、销量榜单、差评榜单、可视化分析五大模块完成对销售数据信息的分析与展示,帮助购买者了解新能源汽车;后端通过登录、数据管理、用户信息管理三大模块来完成管理员对新能源汽车销售数据的收集以及对用户信息的授权与修改。

    前端功能模块图如图所示:

    后端功能模块图如图所示:


    3 总结

    研究的成果展示了新能源汽车销量相关数据在不同时间段的变化情况。对数据的爬取和整理,让我们获得了准确的统计数据,又通过适当的数据预处理和数据分析,得到整洁而直观的数据格式,并利用柱状图、折线图和词云图等可视化工具,直观地展示了这些数据的趋势和特征,根据数据发现,总体来说新能源汽车呈现出持续增长的趋势,不断蚕食燃油车市场而且蚕食程度逐年递增。

    作者:李圈圈啊

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python实现的新能源汽车销售数据分析与可视化系统

    发表回复