千家信息网

怎么用Python可视化图显示数据某化妆品企业销售情况

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"怎么用Python可视化图显示数据某化妆品企业销售情况",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Python可视化图显示数据某
千家信息网最后更新 2026年10月31日怎么用Python可视化图显示数据某化妆品企业销售情况

本篇内容主要讲解"怎么用Python可视化图显示数据某化妆品企业销售情况",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Python可视化图显示数据某化妆品企业销售情况"吧!

业务分析流程

1、 场景(诊断现状)

对象:用户;销售
关注点:找到影响销售的增长因素
目标:发现问题&提出解决方案

2、需求拆解

分析销售趋势,找到影响企业营收增长的商品或区域

按月份销售趋势图(整体)
商品销售额对比(一级、二级,找出最低、最高)
区域销售额对比(下钻:区、省,找出最低、最高)

探索不同商品的销售状况,为企业的商品销售,提出策略建议

不同月份的各个产品的销售额占比情况
产品相关分析

分析用户特征、购买频率、留存率等

购买频率分布
复购率(重复购买用户数量(两天都有购买过算重复)/用户数量)
同期群分析(按月)

3、代码实现

获取数据(excel)

为某化妆品企业 2019 年 1 月-2019 年 9 月每日订单详情数据和企业的商品信息数据,包括两个数据表,销售订单表和商品信息表。其中销售订单表为每个订单的情况明细,一个订单对应一次销售、一个订单可包含多个商品。

import pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mplmpl.rcParams['font.family'] = 'SimHei'import numpy as npimport warningswarnings.filterwarnings("ignore")data = pd.read_excel('C:/Users/cherich/Desktop/日化.xlsx',encoding='gbk')data.head()

data_info = pd.read_excel('C:/Users/cherich/Desktop/日化.xlsx',encoding='gbk',sheet_name='商品信息表')data_info

数据清洗和加工

data = data.dropna()# 订购数量结尾有字符'个'data['订购数量'] = data['订购数量'].apply(lambda x:str(x)[:-1] if str(x)[-1] == '个' else x)data['订购数量'] = data['订购数量'].astype(int)# 订购数量结尾有字符'元'data['订购单价'] = data['订购单价'].apply(lambda x:str(x)[:-1] if str(x)[-1] == '元' else x)data['订购单价'] = data['订购单价'].astype(int)# 日期里有特殊字符 2019#3#11def proess_date(df):    pos = str(df).find('#')    if pos!= -1:        df = str(df).split('#')        return df[0]+'-'+df[1]+'-'+df[2]    else:        return df# res = proess_date(df ='2019#3#11')data['订单日期'] = data['订单日期'].apply(proess_date)data['订单日期'] = data['订单日期'].apply(lambda x:str(x).replace('年','-').replace('月','-') if '年' in str(x) else x )data['订单日期'] = pd.to_datetime(data['订单日期']) #data.info()data = data[data.duplicated()==False]data['所在省份'].nunique()data['月份'] = data['订单日期'].apply(lambda x:str(x).split('-')[1])data

数据可视化

# 两张表数据合并total_data = pd.merge(data,data_info,on='商品编号',how='left')total_data

groups = data.groupby('月份')x = [each[0] for each in groups]y = [each[1].金额.sum() for each in groups]z = [each[1].金额.count() for each in groups]money_mean = data.金额.sum()/9order_mean = data.金额.count()/9plt.figure(figsize=(18, 10), dpi=80)plt.subplot(221)plt.plot(x, y,linewidth=2)plt.axvspan('07', '08', color='#EE7621', alpha=0.3)plt.axhline(money_mean, color='#EE7621', linestyle='--',linewidth=1)plt.title("每月销售额趋势图",color='#4A708B',fontsize=24)plt.ylabel("金额/(亿)",fontsize=16)plt.subplot(222)plt.plot(x, z, linewidth=2, color = '#EE7621')plt.axvline('07', color='#4A708B', linestyle='--',linewidth=1)plt.axhline(order_mean, color='#4A708B', linestyle='--',linewidth=1)plt.title("每月订单量趋势图",color='#4A708B',fontsize=24)plt.ylabel("订单/(单)",fontsize=16)plt.show()

图表说明:从整体来看,销售额和订单量从4月开始大幅度上升,均高于均值;8月份开始呈下降趋势,处于均值水平。

groups_category= total_data.groupby(['月份','商品大类'])category1 = []category2 = []for i,j in groups_category:#     print(i,j.月份.count())    if i[1]=='彩妆':        category1.append(j.金额.sum())    else:        category2.append(j.金额.sum())labels = xxticks = np.arange(len(labels))width = 0.5p = np.arange(len(labels))fig, ax = plt.subplots(figsize=(18,8))rects1 = ax.bar(p - width/2, category1,width, label='彩妆',color='#FFEC8B')rects2 = ax.bar(p + width/2, category2, width, label='护肤品',color='#4A708B')ax.set_ylabel('销售额/(亿)')ax.set_title('每月护肤品和彩妆的销售额对比图(大类)')ax.set_xticks(xticks)ax.set_xticklabels(labels)ax.legend()plt.show()

图表说明:护肤品需求满足大多数人,明显高于彩妆。并且5月-8月是护肤品需求旺季。相比彩妆的变化不明显。

groups_categorys= total_data.groupby('商品小类')x = [each[0] for each in groups_categorys]y = [each[1].金额.sum() for each in groups_categorys]fig = plt.figure(figsize=(18,8),dpi=80)plt.title('各个品类的销售额对比图',color='#4A708B',fontsize=24)plt.ylabel('销售额(元)',fontsize=15)colors = ['#6699cc','#4A708B','#CDCD00','#DAA520','#EE7621','#FFEC8B','#CDCD00','#4A708B','#6699cc','#DAA520','#4A708B','#FFEC8B']for i, group_name in enumerate(groups_categorys):    lin1 =plt.bar(group_name[0], group_name[1].金额.sum(),width=0.8,color=colors[i])    for rect in lin1:        height = rect.get_height()        plt.text(rect.get_x()+rect.get_width()/2, height+1, int(height),ha="center",                 fontsize=12)plt.xticks(fontsize=15)plt.grid()plt.show()

图表说明:面膜的销售额第一,其次是面霜、爽肤水。销售额最低的是蜜粉,眼影。

total_data = total_data.dropna()total_data['所在区域'] = total_data['所在区域'].apply(lambda x:str(x).replace('男区','南区').replace('西 区','西区'))groups_area= total_data.groupby(['所在区域','商品小类'])results = {} for i,j  in groups_area:     money = int(j.金额.sum())    if i[0] in results.keys():        results[i[0]][i[1]] = money         else:        results[i[0]] = {}           for cate in category_names:            results[i[0]][cate] = 0        results[i[0]]['口红'] = moneyresults= {key_data:list(values_data.values()) for key_data,values_data in results.items()}def survey1(results, category_names):    labels = list(results.keys())    data = np.array(list(results.values()))    data_cum = data.cumsum(axis=1)    category_colors = plt.get_cmap('RdYlGn')(        np.linspace(0.15, 0.85, data.shape[1]))    fig, ax = plt.subplots(figsize=(25,8))    ax.invert_yaxis()    ax.xaxis.set_visible(False)    ax.set_xlim(0, np.sum(data, axis=1).max())    for i, (colname, color) in enumerate(zip(category_names, category_colors)):        widths = data[:, i]        starts = data_cum[:, i] - widths        ax.barh(labels, widths, left=starts, height=0.5,                label=colname, color=color)        xcenters = starts + widths / 2        r, g, b, _ = color        text_color = 'white' if r * g * b < 0.5 else 'darkgrey'        for y, (x, c) in enumerate(zip(xcenters, widths)):            ax.text(x, y, str(int(c)), ha='center', va='center',color=text_color)    ax.legend(ncol=len(category_names), bbox_to_anchor=(0, 1),              loc='lower left', fontsize='small')    return fig, axsurvey1(results, category_names)plt.show()

图表说明:东部地区占市场份额的35%左右,份额最低的是西部地区。

area_names = list(total_data.商品小类.unique())groups_priv= total_data.groupby(['所在省份','商品小类'])results = {} for i,j  in groups_priv:     money = int(j.金额.sum())    if i[0] in results.keys():        results[i[0]][i[1]] = money         else:        results[i[0]] = {}           for cate in category_names:            results[i[0]][cate] = 0        results[i[0]]['口红'] = moneyresults= {key_data:list(values_data.values()) for key_data,values_data in results.items()}def survey2(results, category_names):    labels = list(results.keys())    data = np.array(list(results.values()))    data_cum = data.cumsum(axis=1)    category_colors = plt.get_cmap('RdYlGn')(        np.linspace(0.15, 0.85, data.shape[1]))    fig, ax = plt.subplots(figsize=(25,20))    ax.invert_yaxis()    ax.xaxis.set_visible(False)    ax.set_xlim(0, np.sum(data, axis=1).max())    for i, (colname, color) in enumerate(zip(category_names, category_colors)):        widths = data[:, i]        starts = data_cum[:, i] - widths        ax.barh(labels, widths, left=starts, height=0.5,                label=colname, color=color)        xcenters = starts + widths / 2    ax.legend(ncol=len(category_names), bbox_to_anchor=(0, 1),              loc='lower left', fontsize='small')    return fig, axsurvey2(results, area_names)plt.show()

图表说明:江苏销售额第一,其次是广东省;销售额最低的是宁夏、内蒙、海南

import numpy as npimport matplotlib.pyplot as pltcategory_names = list(total_data.商品小类.unique())groups_small_category= total_data.groupby(['月份','商品小类'])results = {} for i,j  in groups_small_category:     money = int(j.金额.sum())    if i[0] in results.keys():        results[i[0]][i[1]] = money         else:        results[i[0]] = {}           for cate in category_names:            results[i[0]][cate] = 0        results[i[0]]['口红'] = moneyresults= {key_data:list(values_data.values()) for key_data,values_data in results.items()}def survey(results, category_names):    labels = list(results.keys())    data = np.array(list(results.values()))    data_cum = data.cumsum(axis=1)    category_colors = plt.get_cmap('RdYlGn')(        np.linspace(0.15, 0.85, data.shape[1]))    fig, ax = plt.subplots(figsize=(25,8))    ax.invert_yaxis()    ax.xaxis.set_visible(False)    ax.set_xlim(0, np.sum(data, axis=1).max())    for i, (colname, color) in enumerate(zip(category_names, category_colors)):        widths = data[:, i]        starts = data_cum[:, i] - widths        ax.barh(labels, widths, left=starts, height=0.5,                label=colname, color=color)        xcenters = starts + widths / 2#         r, g, b, _ = color#         text_color = 'white' if r * g * b < 0.5 else 'darkgrey'#         for y, (x, c) in enumerate(zip(xcenters, widths)):#             ax.text(x, y, str(int(c)), ha='center', va='center')    ax.legend(ncol=len(category_names), bbox_to_anchor=(0, 1),              loc='lower left', fontsize='small')    return fig, axsurvey(results, category_names)plt.show()

图表说明:眼霜、爽肤水、面膜:4,5,6,7,8月份需求量最大;粉底、防晒霜、隔离霜、睫毛膏、蜜粉1,2,3月份需求量最大。

data_user_buy=total_data.groupby('客户编码')['订单编码'].count()data_user_buyplt.figure(figsize=(10,4),dpi=80)plt.hist(data_user_buy,color='#FFEC8B')plt.title('用户购买次数分布',fontsize=16)plt.xlabel('购买次数')plt.ylabel('用户数')plt.show()

图表说明:大部分用户购买次数在10次-35次之间,极少部分用户购买次数80次以上

date_rebuy=total_data.groupby('客户编码')['订单日期'].apply(lambda x:len(x.unique())).rename('rebuy_count')date_rebuyprint('复购率:',round(date_rebuy[date_rebuy>=2].count()/date_rebuy.count(),4))

total_data['时间标签'] = total_data['订单日期'].astype(str).str[:7]total_data = total_data[total_data['时间标签']!='2050-06']total_data['时间标签'].value_counts().sort_index()total_data = total_data.sort_values(by='时间标签')month_lst = total_data['时间标签'].unique()final=pd.DataFrame()final#引入时间标签for i in range(len(month_lst)-1):    #构造和月份一样长的列表,方便后续格式统一    count = [0] * len(month_lst)    #筛选出当月订单,并按客户昵称分组    target_month = total_data.loc[total_data['时间标签']==month_lst[i],:]    target_users = target_month.groupby('客户编码')['金额'].sum().reset_index()    #如果是第一个月份,则跳过(因为不需要和历史数据验证是否为新增客户)    if i==0:        new_target_users = target_month.groupby('客户编码')['金额'].sum().reset_index()    else:        #如果不是,找到之前的历史订单        history = total_data.loc[total_data['时间标签'].isin(month_lst[:i]),:]        #筛选出未在历史订单出现过的新增客户        new_target_users = target_users.loc[target_users['客户编码'].isin(history['客户编码']) == False,:]    #当月新增客户数放在第一个值中    count[0] = len(new_target_users)    #以月为单位,循环遍历,计算留存情况    for j,ct in zip(range(i + 1,len(month_lst)),range(1,len(month_lst))):        #下一个月的订单        next_month = total_data.loc[total_data['时间标签'] == month_lst[j],:]        next_users = next_month.groupby('客户编码')['金额'].sum().reset_index()        #计算在该月仍然留存的客户数量        isin = new_target_users['客户编码'].isin(next_users['客户编码']).sum()        count[ct] = isin    #格式转置    result = pd.DataFrame({month_lst[i]:count}).T    #合并    final = pd.concat([final,result])final.columns = ['当月新增','+1月','+2月','+3月','+4月','+5月','+6月','+7月','+8月']result = final.divide(final['当月新增'],axis=0).iloc[:]result['当月新增'] = final['当月新增']result.round(2)

到此,相信大家对"怎么用Python可视化图显示数据某化妆品企业销售情况"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

销售 订单 商品 金额 客户 销售额 月份 数据 日期 编码 数量 时间 标签 用户 企业 图表 情况 最低 区域 彩妆 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 南京欣网互联网络科技有限公司 上海互联网科技有限公司 互联网 的科技创新 互联网科技媒体 鑫亿盛互联网科技 科技互联网公司logo 深圳卡尔迅互联网科技有限公司怎么样 字节跳动和互联网科技 杭州壁岐互联网科技有限公司 迪庆互联网科技招生 阿里互联网科技企业 明优互联网科技有限公司 特约风豹互联网科技为什么扣费 徐州市互联网科技有限公司 保险科技服务互联网营销体系 广州百诚互联网科技有限公司官网 互联网界的黑科技 马化腾互联网科技教学 科技美学互联网 艺术 互联网科技园 睿民互联网科技 广西互联网科技公司 互联网科技公司的市场部门 互联网金融科技公司干啥的 知域互联网科技有限公司大骗子 注册互联网科技公司经营范围大全 互联网在线教育科技创业 锡山区互联网智能科技产品供应 玉溪新华互联网科技怎么选
0