【汽车销售数据】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 | 厂商 | 销量 | 占销量份额 |
| 0 | 2023 | 1 | 1 | https://i.img16888.com/dealer/flogo/57329.gif | 比亚迪 | 133317 | 10.29% |
| 1 | 2023 | 1 | 2 | https://i.img16888.com/dealer/flogo/57379.gif | 长安汽车 | 90067 | 6.95% |
| 2 | 2023 | 1 | 3 | https://i.img16888.com/dealer/flogo/57412.gif | 上汽大众 | 78000 | 6.02% |
| 3 | 2023 | 1 | 4 | https://i.img16888.com/dealer/flogo/57420.gif | 一汽-大众 | 70004 | 5.41% |

4 2023 1 5 https://i.img16888.com/dealer/flogo/57605.gif 吉利汽车 67479 5.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 | 均价 |
| 0 | RAV4荣放 | 4032667 | 26.38 | 17.58 | 21.980 |
| 1 | 轩逸 | 3752787 | 17.49 | 9.98 | 13.735 |
| 2 | 朗逸 | 3734558 | 15.19 | 9.40 | 12.295 |
| 3 | 哈弗H6 | 3487282 | 15.70 | 9.89 | 12.795 |

4 五菱宏光 3446316 5.99 4.60 5.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

| | 销量 |
| 月 | |
| 12 | 1.921240e+06 |
| 11 | 1.829474e+06 |
| 9 | 1.730767e+06 |
| 10 | 1.730715e+06 |
| 1 | 1.722805e+06 |
| 3 | 1.666897e+06 |
| 6 | 1.522088e+06 |
| 5 | 1.486374e+06 |
| 4 | 1.482906e+06 |
| 8 | 1.479686e+06 |
| 7 | 1.377379e+06 |

2 1.146462e+06
  • 汽车销量整体呈上升趋势;
  • 每年的1-8月是淡季,9-12月份是旺季,12月份是销量最好的月份;
  • 2020年2月,汽车销量受疫情影响比较大;
相关推荐
倔强青铜三17 分钟前
苦练Python第23天:元组秘籍与妙用
人工智能·python·面试
Norvyn_741 分钟前
LeetCode|Day18|20. 有效的括号|Python刷题笔记
笔记·python·leetcode
chao_7891 小时前
更灵活方便的初始化、清除方法——fixture【pytest】
服务器·自动化测试·python·pytest
心情好的小球藻1 小时前
Python应用进阶DAY9--类型注解Type Hinting
开发语言·python
都叫我大帅哥1 小时前
LangChain加载HTML内容全攻略:从入门到精通
python·langchain
惜.己2 小时前
使用python读取json数据,简单的处理成元组数组
开发语言·python·测试工具·json
都叫我大帅哥3 小时前
Python的Optional:让你的代码优雅处理“空值”危机
python
曾几何时`5 小时前
基于python和neo4j构建知识图谱医药问答系统
python·知识图谱·neo4j
写写闲篇儿7 小时前
Python+MongoDB高效开发组合
linux·python·mongodb
杭州杭州杭州8 小时前
Python笔记
开发语言·笔记·python