【汽车销售数据】2015~2023年各厂商各车型的探索 数据分析可视化

数据处理的思路:

1 各表使用情况:

  • 汽车分厂商每月销售表,该表主要分析展示top10销量的厂商销量、占比变化情况(柱形图、饼图);
  • 中国汽车分车型每月销售量表,该表主要分析展示top20销量的车型销量变化情况以及平均售价(散点图,折线图,柱形图);
  • 中国汽车总体销量表,该表主要分析展示整体销量及变化的趋势(折线图、柱形图)

2 模块使用情况

  • 此次数据集相关可视化展示,均使用pyecharts绘制

1 包导入

In [1]:

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Pie, Line, Scatter, Timeline, Grid
from pyecharts.options import GridOptsimport warnings
warnings.filterwarnings("ignore")

2 分析中国汽车分厂商每月销售表

In [2]:

df_manufacturer = pd.read_excel('/home/mw/input/car3784/中国汽车分厂商每月销售表.xlsx')
df_manufacturer.head()
年份月份排名厂商LOGO厂商销量占销量份额
0202311https://i.img16888.com/dealer/flogo/57329.gif比亚迪13331710.29%
1202312https://i.img16888.com/dealer/flogo/57379.gif长安汽车900676.95%
2202313https://i.img16888.com/dealer/flogo/57412.gif上汽大众780006.02%
3202314https://i.img16888.com/dealer/flogo/57420.gif一汽-大众700045.41%
4202315https://i.img16888.com/dealer/flogo/57605.gif吉利汽车674795.21%

In [3]:

df_manufacturer.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11104 entries, 0 to 11103
Data columns (total 7 columns):
年份        11104 non-null int64
月份        11104 non-null int64
排名        11104 non-null int64
厂商LOGO    11104 non-null object
厂商        11099 non-null object
销量        11104 non-null int64
占销量份额     11104 non-null object
dtypes: int64(4), object(3)
memory usage: 607.3+ KB

In [4]:

# 空值直接删除
df_manufacturer = df_manufacturer.dropna()

In [5]:

# 先组合一个date日期字段,便于后续的可视化
df_manufacturer['日期'] = df_manufacturer['年份'].astype(str) + '-' + df_manufacturer['月份'].astype(str)

In [6]:

df_manufacturer_top10 = df_manufacturer[df_manufacturer['排名']<11]
df_manufacturer_top10 = df_manufacturer_top10.sort_values(by=['日期','排名'])

In [7]:

df_manufacturer_top10['占销量份额'] = df_manufacturer_top10['占销量份额'].apply(lambda x:x[:-1]).astype('float')

In [8]:

# 数据分别获取
dates = df_manufacturer_top10['日期'].unique().tolist()
groups = {date:[] for date in dates}
sales = {date:[] for date in dates}
percentage = {date:[] for date in dates}
for d in dates:date = dsales[date] = df_manufacturer_top10[df_manufacturer_top10['日期']==d]['销量'].tolist()groups[date] = df_manufacturer_top10[df_manufacturer_top10['日期']==d]['厂商'].tolist()percentage[date] = df_manufacturer_top10[df_manufacturer_top10['日期']==d]['占销量份额'].tolist()

In [9]:

def create_bar(i):bar = Bar()bar.add_xaxis(groups[dates[i]])bar.add_yaxis("",sales[dates[i]])bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True))bar.set_global_opts(title_opts=opts.TitleOpts(title="每月top10厂商销量"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),)return bar

In [10]:

def create_pie(i):pie = Pie()pie.add("", [list(z) for z in zip(groups[dates[i]], percentage[dates[i]])])pie.set_global_opts(title_opts=opts.TitleOpts(title="每月top10厂商销量占比"),legend_opts=opts.LegendOpts(orient="vertical", pos_bottom="5%", pos_left="left"))pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}%"))return pie

In [11]:

timeline = Timeline()
timeline.add_schema(orient="vertical",is_auto_play=True,  # 设置自动播放play_interval=1000,  # 播放间隔(毫秒)is_loop_play=True,  # 是否循环播放pos_right="2%",width="70",height="500",label_opts=opts.LabelOpts(is_show=True,position='left')
)
for i in range(len(dates)):bar = create_bar(i)timeline.add(bar, dates[i])timeline.render_notebook()

  • 上述x轴没变,不知道为啥,而且用组合图饼图会无法显示出错,这里分开展示。

In [12]:

timeline = Timeline()
timeline.add_schema(orient="vertical",is_auto_play=True,  # 设置自动播放play_interval=1000,  # 播放间隔(毫秒)is_loop_play=True,  # 是否循环播放pos_right="2%",width="70",height="500",label_opts=opts.LabelOpts(is_show=True,position='left')
)
for i in range(len(dates)):pie = create_pie(i)timeline.add(pie, dates[i])timeline.render_notebook()

3 分析中国汽车分车型每月销售量表

In [13]:

df = pd.read_excel('/home/mw/input/car3784/中国汽车分车型每月销售量.xlsx')

In [14]:

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 49344 entries, 0 to 49343
Data columns (total 7 columns):
年份        49344 non-null int64
月份        49344 non-null int64
排名        49344 non-null int64
车型        49318 non-null object
厂商        49318 non-null object
销量        49344 non-null int64
售价(万元)    49344 non-null object
dtypes: int64(4), object(3)
memory usage: 2.6+ MB

In [15]:

# 空值直接删除
df = df.dropna()

In [16]:

# 先组合一个date日期字段,便于后续的可视化
df['日期'] = df['年份'].astype(str) + '-' + df['月份'].astype(str)

In [17]:

# 售价拆分
df['售价max'] = df['售价(万元)'].apply(lambda x: float(x.split('-')[1]))
df['售价min'] = df['售价(万元)'].apply(lambda x: float(x.split('-')[0]))
df['均价'] = (df['售价max']+df['售价min'])/2

In [34]:

# 先看下整体销量车型的排列,top20
df_mode_sales = df.groupby('车型').agg({'销量':'sum','售价max':'mean','售价min':'mean','均价':'mean'})[['销量','售价max','售价min','均价']].sort_values('销量',ascending=False).reset_index()
df_mode_sales.head()
车型销量售价max售价min均价
0RAV4荣放403266726.3817.5821.980
1轩逸375278717.499.9813.735
2朗逸373455815.199.4012.295
3哈弗H6348728215.709.8912.795
4五菱宏光34463165.994.605.295

In [19]:

bar = Bar()
bar.add_xaxis(df_mode_sales['车型'].tolist()[:20])
bar.add_yaxis("",df_mode_sales['销量'].tolist()[:20])
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
bar.set_global_opts(title_opts=opts.TitleOpts(title="各车型累计销量"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),)
bar.render_notebook()

In [39]:

# 上述有售价为不公布的,我们也直接删掉
df_mode_sales = df_mode_sales[df_mode_sales['均价']>0]

In [41]:

x_data = df_mode_sales['销量'].tolist()
y_data = df_mode_sales['均价'].tolist()
names = df_mode_sales['车型'].tolist()

In [43]:

scatter = Scatter()
scatter.add_xaxis(x_data)
scatter.add_yaxis("销量与均价", y_data,label_opts=opts.LabelOpts(is_show=False),symbol_size=8)
scatter.set_global_opts(xaxis_opts=opts.AxisOpts(name="销量"),yaxis_opts=opts.AxisOpts(name="均价")
)
scatter.render_notebook()

  • 国内车型的 均价级基本处于30w以下,部分车型虽然价格较高,但是销量却不低。

In [67]:

line = Line()
line.add_xaxis(names[:20])
line.add_yaxis("均价", y_data[:20], label_opts=opts.LabelOpts(is_show=False))
line.set_global_opts(xaxis_opts = opts.AxisOpts(is_show=False),yaxis_opts=opts.AxisOpts(name="均价"),legend_opts=opts.LegendOpts(pos_left="40%"))bar = Bar()
bar.add_xaxis(names[:20])
bar.add_yaxis("销量", x_data[:20], label_opts=opts.LabelOpts(is_show=False), yaxis_index=1)
bar.set_global_opts(yaxis_opts=opts.AxisOpts(name="销量", position="right"),)
grid = Grid()
grid.add(line, grid_opts=opts.GridOpts())
grid.add(bar, grid_opts=opts.GridOpts())
grid.render_notebook()

  • 整体销量看,RAV4荣芳的合计销量最大;
  • 从均价看,宝马5系虽然均价较高,但是销量还是比较考前的;
  • 对比RAV4荣放和五菱宏光,虽然两者整体销量差异不大,但是均价差异却很大,说明消费者购买车辆,价格只是其中考虑的一部分。

4 分析中国汽车总体销量表

In [87]:

data = pd.read_excel('/home/mw/input/car3784/中国汽车总体销量.xlsx')

In [88]:

data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 201 entries, 0 to 200
Data columns (total 3 columns):
时间    201 non-null datetime64[ns]
销量    201 non-null int64
同比    201 non-null object
dtypes: datetime64[ns](1), int64(1), object(1)
memory usage: 4.8+ KB

In [89]:

data['时间'] = data['时间'].dt.date

In [90]:

data = data.sort_values(by='时间')

In [91]:

line = Line()
line.add_xaxis(data['时间'].tolist())
line.add_yaxis("销量", data['销量'].tolist(),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
line.set_global_opts(yaxis_opts=opts.AxisOpts(name="销量"),datazoom_opts=[opts.DataZoomOpts(type_="inside"),  opts.DataZoomOpts(type_="slider")])
line.render_notebook()

In [94]:

data['月'] = pd.to_datetime(data['时间']).dt.month
data_month = data.groupby('月').mean().sort_values('销量',ascending=False)
data_month
销量
121.921240e+06
111.829474e+06
91.730767e+06
101.730715e+06
11.722805e+06
31.666897e+06
61.522088e+06
51.486374e+06
41.482906e+06
81.479686e+06
71.377379e+06
21.146462e+06
  • 汽车销量整体呈上升趋势;
  • 每年的1-8月是淡季,9-12月份是旺季,12月份是销量最好的月份;
  • 2020年2月,汽车销量受疫情影响比较大;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+uniapp的图书馆座位预约小程序(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

MongoDB-数据库文档操作(2)

任务描述 文档数据在 MongoDB 中的查询和删除。 相关知识 本文将教你掌握&#xff1a; 查询文档命令&#xff1b;删除文档命令。 查询文档 我们先插入文档到集合 stu1 &#xff1a; document([{ name:张小华, sex:男, age:20, phone:12356986594, hobbies:[打篮球,踢足球…

【RT-DETR有效改进】轻量级视觉变换器RepViT改进特征提取网络(轻量化网络)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

【生态适配】亚信安慧AntDB数据库与契约锁完成兼容互认

日前&#xff0c;亚信安慧AntDB数据库与上海亘岩网络科技有限公司&#xff08;简称:契约锁&#xff09;研发的契约锁电子签章产品完成兼容互认。经过双方团队的严格测试&#xff0c;亚信安慧AntDB数据库与契约锁&#xff08;V4&#xff09;完全兼容&#xff0c;整体运行稳定高效…

Docker-数据卷网络

docker数据卷 docker volume ls #查看有哪些数据卷 docker volume inspect mysql-db #查看具体数据卷的元信息 docker container run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORDTrue -v mysql-db:/var/lib/mysql mysql #会在docker 的卷下面新建一个mysqldb用于数据持久…

架构篇02-架构设计的历史背景

文章目录 机器语言&#xff08;1940 年之前&#xff09;汇编语言&#xff08;20 世纪 40 年代&#xff09;高级语言&#xff08;20 世纪 50 年代&#xff09;第一次软件危机与结构化程序设计&#xff08;20 世纪 60 年代~20 世纪 70 年代&#xff09;第二次软件危机与面向对象&…

使用Python+pygame实现贪吃蛇小游戏

使用Pythonpygame贪吃蛇小游戏 使用第三方库pygame&#xff0c;关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 给出两种实现。 第一种 运行效果如下&#xff1a; 游戏源码如下&#xff1a; import pygame import sy…

STM32——IIC知识总结及实战

1 IIC概念及结构体 IIC&#xff1a;Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步 串行 半双工通信总线。 结构图 2 IIC协议时序 ① 起始信号 当 SCL 为高电平期间&#xff0c;SDA 由高到低的跳变。起始信号是一种电平跳变时序信号&#xff0c;而…

【EI会议征稿通知】2024年第三届能源互联网及能源交互技术国际会议(EIEIT 2024)

2024年第三届能源互联网及能源交互技术国际会议(EIEIT 2024) 2024 3rd International Conference on the Energy Internet and Energy Interactive Technology 随着EIEIT前2届的成功举办&#xff0c;我们很荣幸地宣布&#xff0c;2024年第三届能源互联网及能源交互技术国际学术…

通过Vscode 简单创建一个vue3+element的项目

首先确保安装的nodejs是18版本以上 确保你安装了最新版本的 Node.js&#xff0c;并且你的当前工作目录正是打算创建项目的目录。在命令行中运行以下命令 VSCode打开终端 输入构建项目命令&#xff0c;个人推荐如果有cnpm使用cnpm npm create vuelatest cnpm create vuelate…

YOLOv5改进 | 检测头篇 | ASFFHead自适应空间特征融合检测头(全网首发)

一、本文介绍 本文给大家带来的改进机制是利用ASFF改进YOLOv5的检测头形成新的检测头Detect_ASFF,其主要创新是引入了一种自适应的空间特征融合方式,有效地过滤掉冲突信息,从而增强了尺度不变性。经过我的实验验证,修改后的检测头在所有的检测目标上均有大幅度的涨点效果,…

AI与区块链的完美交融创新时代的双重引擎

每个投资者都梦想早日进入“下一个亚马逊、苹果或比特币”&#xff0c;以追求代际财富。 然而&#xff0c;这些机会很少而且相距甚远&#xff0c;而且正如每一个虔诚的加密货币本地人都知道的那样&#xff0c;这条道路上常常布满了失败的项目、失信的承诺和波动。 但在 2023 …

flink1.15 维表join guava cache和mysql方面优化

优化前 mysql响应慢,导致算子中数据输出追不上输入,导致显示cpu busy:100% 优化后效果两个图对应两个时刻: - - -- 优化前 select l.id,JSON_EXTRACT(r.msg,$$.key1) as msgv (select id,uid from tb1 l where id?) join (select uid,msg from tb2) r on l.uidr.uid;-- 优化…

STM32+HAL库驱动ADXL345传感器(SPI协议)

STM32HAL库驱动ADXL345传感器&#xff08;SPI协议&#xff09; ADXL345传感器简介实物STM32CubeMX配置SPI配置片选引脚配置串口配置 特别注意&#xff08;重点部分&#xff09;核心代码效果展示 ADXL345传感器简介 ADXL345 是 ADI 公司推出的基于 iMEMS 技术的 3 轴、数字输出加…

Flink(十三)【Flink SQL(上)】

前言 最近在假期实训&#xff0c;但是实在水的不行&#xff0c;三天要学完SSM&#xff0c;实在一言难尽&#xff0c;浪费那时间干什么呢。SSM 之前学了一半&#xff0c;等后面忙完了&#xff0c;再去好好重学一遍&#xff0c;毕竟这玩意真是面试必会的东西。 今天开始学习 Flin…

专业140+总410+哈尔滨工业大学803信号与系统和数字逻辑电路考研经验哈工大电子信息(信息与通信工程-信通)

一年的努力付出终于有了收获&#xff0c;今年专业课140&#xff0c;总分410顺利上岸哈工大803电子信息&#xff08;信息与通信-信通&#xff09;&#xff0c;回顾总结了自己这一年的复习&#xff0c;有得有失&#xff0c;希望对大家复习有所帮助。 数学 时间安排&#xff1a;…

“五星卡”上新!合合信息“外国人永久居留身份证”识别产品助力金融机构提升服务效率

外国人永久居留身份证&#xff08;简称“永居证”&#xff09;&#xff0c;是国家移民管理局对符合条件的外国人批准其在境内永久居留后&#xff0c;为其签发的法定身份证件。2023年12月&#xff0c;国家移民管理局正式启用签发更趋近于居民身份证技术体系的新一版永居证&#…

【Flutter 开发实战】Dart 基础篇:List 详解

嗨&#xff0c;各位朋友们&#xff0c;欢迎来到这篇博客&#xff01;今天我们将一起踏入 Dart 语言的神奇世界&#xff0c;深入了解 Dart 中的 List 类型。不用担心&#xff0c;我会尽可能用最通俗易懂的语言&#xff0c;让你对 List 有一个更深刻的理解。 Dart 中的 List Li…

SegVol: Universal and Interactive Volumetric Medical Image Segmentation

Abstract 精确的图像分割为临床研究提供了有意义且结构良好的信息。尽管在医学图像分割方面取得了显著的进展&#xff0c;但仍然缺乏一种能够分割广泛解剖类别且易于用户交互的基础分割模型。 本文提出了一种通用的交互式体医学图像分割模型——SegVol。通过对90k个未标记的C…

kibana查看和展示es数据

本文来说下使用kibana查看和展示es数据 文章目录 数据准备查询所有文档示例kibana查看和展示es数据 数据准备 可以使用es的命令或者java程序来往&#xff0c;es进行新增数据 查询所有文档示例 在 apifox 中&#xff0c;向 ES 服务器发 GET请求 &#xff1a;http://localhost:92…