用MPV车型销量数据做销量堆积面积图

通过这个案例来了解堆积面积图。

首先我们把数据先进行读取,注意数据的路径,有两种路径绝对路径和相对路径,个人根据自己的代码路径进行选择,一般的报错就是路径的问题。

import pandas as pd
data_mpv_sale = pd.read_excel('MPV销量数据2012-2021(1).xlsx')
data_mpv_sale

 由于数据比较多,我们需要进行数据去重,数据去重这一步是不可省略的,后面如果有报错的话可能就是数据没有去重,"数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选。这一步是大多数人都要去做的,代码如下:

data_mpv_sale2 = data_mpv_sale.drop_duplicates(subset=['采集时间','排名'],keep='last')
data_mpv_sale2 = data_mpv_sale2.sort_values(by=['采集时间','排名'])
data_mpv_sale2

数据去重后对数据进行加工,加工的目的是为了后面能够更加方便的使用代码,代码如下:

data_mpv_sale3 = data_mpv_sale2[data_mpv_sale2['采集时间']>'2017']
data_mpv_sale3['车型'] 
data_mpv_sale3['车型_厂商'] = data_mpv_sale3['车型'] + '_' + data_mpv_sale3['厂商']
data_mpv_sale3

先复制一个表格对象,再进行时间数据加工,代码如下:

data_mpv_sale4 = data_mpv_sale3.copy() # 复制一个表格对象
data_mpv_sale4['年份'] = data_mpv_sale4['采集时间'].agg(lambda x:int(x[:4]))
data_mpv_sale4['月份'] = data_mpv_sale4['采集时间'].agg(lambda x:int(x[-2:]))
def jidu(month):
    if month<=3:
        return 1
    elif month<=6:
        return 2
    elif month<=9:
        return 3
    else:
        return 4
data_mpv_sale4['季度']  = data_mpv_sale4.loc[:,'月份'].agg(jidu)
data_mpv_sale4['年份_季度'] = data_mpv_sale4['年份'].agg(lambda x:str(x)+'年') + data_mpv_sale4['季度'].agg(lambda x:str(x)+'季度')
data_mpv_sale4

得到的结果如下,如果报错就根据报错的信息进行仔细观察自己的代码是否有误。

 重新聚合车辆季度销量,把前面的厂商、季度和销量进行聚合,这样就能够

sale_season = data_mpv_sale4.groupby(by=['车型_厂商','年份_季度'])['销量'].sum()
sale_season

定位销量头部车型:

sale_total20 = data_mpv_sale4.groupby(by=['车型_厂商'])['销量'].sum().sort_values(ascending=False)[:10].index.values
sale_total20

最后重组数据结构,这里先用for循环对时间进行定义,再把车辆的季度销量信息存储下来,最后就是堆积面积图的相关代码,设计面积图的大小后把前面的数据给输入进来就可以得到最终的结果了,要注意函数的格式不能随便的进行空格和缩进,如果有报错就检查一下看看格式有没有问题:

# 定义时间列表
year = [2017,2018,2019,2020,2021]
season = [1,2,3,4]
list_time = []
for y in year:
    for s in season:
        if y==2021 and s>=3:
            break
        else:
            list_time.append(f'{y}年{s}季度')
list_time
# 定义字典存储20辆车的季度销量信息
sale_dict = {}
for c in sale_total20:
    sale_dict.setdefault(c,[]) # 创建键:c,值:[]
    for t in list_time:
        if t in sale_season[c].index:
            sale_dict[c].append(int(sale_season[c][t]))
        else:
            sale_dict[c].append(0) # 没有销量记录的季度需要手动填入0
sale_dict
import pyecharts.options as opts
from pyecharts.charts import Line

c = (
    Line(init_opts=opts.InitOpts(width='800px',height='400px'))
    .add_xaxis(xaxis_data=list_time)
    
    .set_global_opts(
#         title_opts=opts.TitleOpts(title="2017-2021年MPV销量前10名车型走势"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), # 配置提示框
        yaxis_opts=opts.AxisOpts(
            type_="value",
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
        datazoom_opts=opts.DataZoomOpts(), # 配置滑动条
    )
)

for name,sale_list in sale_dict.items():
    c.add_yaxis(
        series_name=name, # 序列名称,由车型名称定义
        stack="总量", # 设置堆积图
        y_axis=sale_list, # 销量数据
        areastyle_opts=opts.AreaStyleOpts(opacity=0.5), # 设置面积图
        label_opts=opts.LabelOpts(is_show=False),
        is_smooth = True, # 显示平滑曲线
    )
c.render_notebook()
# c.render('2017-2021年MPV销量前10名车型走势.html')

最后结果如下:

 通过这个案例我了解到堆积面积图的优点和如何去使用堆积面积图,堆积面积图可以直观地展示多个变量之间的比例和趋势;可以同时展示多个变量的总和和每个变量的贡献程度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值