【汽车销售数据】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 GridOpts

import 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 = d
    sales[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月,汽车销量受疫情影响比较大;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UML-顺序图

提示&#xff1a;用例图从参与者的角度出发&#xff0c;描述了系统的需求&#xff08;用例图&#xff09;&#xff1b;静态图定义系统中的类和对象间的静态关系&#xff08;类图、对象图和包图&#xff09;&#xff1b;状态机模型描述系统元素的行为和状态变化流程&#xff08;…

计算机体系结构基础复习

1. 计算机系统可划分为哪几个层次,各层次之间的界面是什么? 你认为这样划分层次的意义何在? 答&#xff1a; 计算机系统可划分为四个层次&#xff0c;分别是&#xff1a;应用程序、 操作系统、 硬件系统、 晶体管四个大的层次。 注意把这四个层次联系起来的三个界面。各层次…

css 怎么绘制一个带圆角的渐变色的边框

1&#xff0c;可以写两个样式最外面的div设置一个渐变的背景色。里面的元素使用纯色。但是宽高要比外面元素的小。可以利用里面的元素设置padding这样挡住部分渐变色。漏出来的渐变色就像边框一样。 <div class"cover-wrapper"> <div class"item-cover…

春节回家前,请一定给你的电脑装上KKView远程控制软件

马上春节了&#xff0c;电脑不能带回家&#xff0c;有时候要处理点意外的事情&#xff0c;怎么办&#xff1f;只要走之前&#xff0c;给你电脑装上KKView远程控制软件&#xff0c;就可以随时随地用手机或电脑控制你的工作电脑&#xff0c;远程办公、传文件、看摄像头都没问题。…

人脸识别为何老是不过?是什么原因导致的?

人脸识别可能无法通过的原因有很多&#xff0c;以下是可能的一些原因&#xff1a; 1. 非常规面部表情&#xff1a;如果你做出了与常规面部表情不同的表情&#xff0c;如张大嘴巴或瞪大眼睛等&#xff0c;可能会干扰人脸识别系统的准确性。 2. 光线条件&#xff1a;人脸识别系统…

30 3D导航栏

效果演示 实现了一个导航栏&#xff0c;其中包含了五个图标&#xff0c;每个图标都有一个悬浮的文字标签&#xff0c;当鼠标悬停在图标上时&#xff0c;文字标签会旋转并向上移动&#xff0c;同时底部会出现一个阴影效果。整个导航栏的背景颜色为浅灰色。 Code <ul><…

js(JavaScript)数据结构之堆(Heap)

什么是数据结构&#xff1f; 下面是维基百科的解释&#xff1a; 数据结构是计算机存储、组织数据的方式。数据结构意味着接口或封装&#xff1a;一个数据结构可被视为两个函数之间的接口&#xff0c;或者是由数据类型联合组成的存储内容的访问方法封装。 我们每天的编码中都会…

docker安装部署Elasticsearch(ES)以及相关配置

Elasticsearch简介 mysql用作持久化存储&#xff0c;ES用作检索 基本概念&#xff1a;index库>type表>document文档 index索引&#xff08;相当于MySQL的数据库&#xff09; 动词&#xff1a;相当于mysql的insert 名词&#xff1a;相当于mysql的db Type类型&#xff…

Spring Cloud整体架构解析

Spring Cloud整体架构 本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 Spring Cloud的中文名我们就…

Flask架构--路由和蓝图

学习视频&#xff1a;第二章&#xff1a;路由和蓝图 1 Flask查询路由的方式_哔哩哔哩_bilibili 参考&#xff1a;Flask框架之路由与蓝图的使用_flask 路由和蓝图-CSDN博客 1.路由的概念&#xff1a; 用于将http请求与特定的python函数相匹配。定义路由后&#xff0c;flask程…

电子学会C/C++编程等级考试2023年09月(六级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:生日相同 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。 时间限制:1000 内存限制:65536 输入 第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一…

利用XSS漏洞打cookie

目录 1、为什么要打cookie&#xff1f; 2、怎样利用XSS来打cookie&#xff1f; 3、利用Bluelotus_xssReceiver平台来打cookie 4、利用beef-xss平台来打cookie 上一篇给大家介绍了xss漏洞的基础知识&#xff0c;在本篇章将会介绍和演示一下利用xss漏洞打cookie的演示&#x…

【用法总结】LiveData组件要点

1、如何实现和生命周期的关联&#xff1f; 调用observe()方法时&#xff0c;第一个参数传入LifecycleOwner对象&#xff0c;而LifecycleOwner能通过getLifecycle()方法获取到lifecycle对象&#xff0c;然后执行lifecycle.addObserver()添加LiveData中数据&#xff08;mData&am…

1116: 删除元素(数组)

题目描述 输入一个递增有序的整型数组A有n个元素&#xff0c;删除下标为i的元素&#xff0c;使其仍保持连续有序。注意&#xff0c;有效下标从0开始。 定义如下两个函数分别实现删除元素操作和数组输出操作。 void del(int a[], int n, int i); /*删除数组a中下标为i的元素*…

Matlab怎样合并两个矩阵(怎样合并多个矩阵)为一个矩阵

1.合并两个矩阵 a [1 2 3;4 5 6] b [7 8 9;1 2 3] c [a,b] %按行&#xff08;横向&#xff09;合并 c [a;b] %按列&#xff08;纵向&#xff09;合并 2.合并多个矩阵 clc clear temp dir([D:\文件夹\,*.txt]); N length(temp);for i 1:N %先读取文件内所有文件 …

将PDF发票转换为excel、xml结构化数据的完美解决方案

随着电子发票的普及&#xff0c;越来越多的企业和个人开始使用PDF格式的电子发票。然而&#xff0c;有时我们需要将电子发票转换为XML格式以便于处理和分析。本文将介绍如何将收到的PDF发票下载为excel、xml文件。首先&#xff0c;我们需要明确一点&#xff0c;PDF是一种基于图…

(菜鸟自学)搭建虚拟渗透实验室——安装Ubantu 8.10 靶机

安装Ubantu 8.10 靶机 新建虚拟机 选择Ubuntu系统 网络适配器模式选用桥接模式 镜像选用ubuntu8.10版本 点击“开启此虚拟机”以开始安装Ubuntu Linux系统 安装ubuntu 首先需要选择安装时的语言&#xff0c;这里选择“中文&#xff08;简体&#xff09;” 选择“安装…

DAY8--learning english

一、积累 1.haunt Why Ghost dont haunt chinese. 为什么鬼不会出现在中国人旁边? 2.confess i have a confession to make ... I actally a blind. 我要坦白一件事……我其实是个盲人。 3.brake Press S button to brake, or to reverse if the vehicle has stopped, 按住…

QT上位机开发(动画效果)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 不管是仿真&#xff0c;还是对真实环境的一比一模拟&#xff0c;动画都是非常好的一种呈现方式。目前在qt上面&#xff0c;实现动画主要有两种方法…

STM32存储左右互搏 SPI总线FATS读写FRAM MB85RS2M

STM32存储左右互搏 SPI总线FATS读写FRAM MB85RS2M 在中低容量存储领域&#xff0c;除了FLASH的使用&#xff0c;&#xff0c;还有铁电存储器FRAM的使用&#xff0c;相对于FLASH&#xff0c;FRAM写操作时不需要预擦除&#xff0c;所以执行写操作时可以达到更高的速度&#xff0…