天猫双十一美妆销售数据分析-Python数据分析项目

文章目录

    • 项目介绍
      • 关键词
    • 一、读取数据
    • 一、读取数据
    • 二、数据清洗
      • 2.1 重复数据处理
      • 2.2 缺失值处理
      • 2.3 提取表格中有用信息并新增为列
    • 三、数据探索
      • 3.1 各品牌SKU数
      • 3.2 品牌总销量和总销售额
      • 3.3 各类别的销售量、销售额情况
      • 3.4 各品牌热度
      • 3.5 各品牌价格
      • 3.6 男性护肤品销量情况
      • 3.7 分析时间与销量的关系,体现购买高峰期
    • 总结
    • 建议

项目介绍

数据为天猫双十一女性美妆的数据集,围绕产品及其销量和评论撰写。数据具有7个特征,可以从多个维度解析文本。 由于是真实的商业数据,所以做了匿名处理,数据集中对店名的引用被处理为产品的品牌名以保护店家隐私。

数据包括27599行和7个特征变量。每一行对应一个产品的销售情况,包括以下变量:

update_time 统计时间

id 产品编号

title 产品名称

price 交易价格

sale_count 销量

comment_count 评论数量

店名 店铺名称

可参考的探索方向:

购买化妆品的客户的关注度(评论数)是多少?各产品销量分布情况? 哪些产品的卖得最好,哪些牌子最受欢迎,哪些化妆品是大家最需要的? 不同商家之间的差异,及促销打折力度? 模拟定价系统及推荐系统?

关键词

  • pandas数据处理、matplotlib、数据可视化、数据探索分析

一、读取数据

在这里插入图片描述

一、读取数据

import pandas as pd
import numpy as npdata = pd.read_csv('双十一淘宝美妆数据.csv')
data.head()
update_timeidtitlepricesale_countcomment_count店名
02016/11/14A18164178225CHANDO/自然堂 雪域精粹纯粹滋润霜50g 补水保湿 滋润水润面霜139.026719.02704.0自然堂
12016/11/14A18177105952CHANDO/自然堂凝时鲜颜肌活乳液120ML 淡化细纹补水滋润专柜正品194.08122.01492.0自然堂
22016/11/14A18177226992CHANDO/自然堂活泉保湿修护精华水(滋润型135ml 补水控油爽肤水99.012668.0589.0自然堂
32016/11/14A18178033846CHANDO/自然堂 男士劲爽控油洁面膏 100g 深层清洁 男士洗面奶38.025805.04287.0自然堂
42016/11/14A18178045259CHANDO/自然堂雪域精粹纯粹滋润霜(清爽型)50g补水保湿滋润霜139.05196.0618.0自然堂
# 查看各字段信息
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 27598 entries, 0 to 27597
Data columns (total 7 columns):#   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  0   update_time    27598 non-null  object 1   id             27598 non-null  object 2   title          27598 non-null  object 3   price          27598 non-null  float644   sale_count     25244 non-null  float645   comment_count  25244 non-null  float646   店名             27598 non-null  object 
dtypes: float64(3), object(4)
memory usage: 1.5+ MB
# 分店铺统计
data['店名'].value_counts()

二、数据清洗

2.1 重复数据处理

# 对重复数据做删除处理
print(data.shape)
data = data.drop_duplicates(inplace=False)
print(data.shape)
# 此处虽然删除了重复值,但索引未变,因此应用以下方法进行重置索引
print(data.index)
data = data.reset_index(drop=True)
print('新索引:',data.index)
Int64Index([    0,     1,     2,     3,     4,     5,     6,     7,     8,9,...27588, 27589, 27590, 27591, 27592, 27593, 27594, 27595, 27596,27597],dtype='int64', length=27512)
新索引: RangeIndex(start=0, stop=27512, step=1)

2.2 缺失值处理

# 查看缺失值
data.isnull().any()
update_time      False
id               False
title            False
price            False
sale_count        True
comment_count     True
店名               False
dtype: bool

有两列数据存在缺失值:sale_count, comment_count

# 查看数据结构
data.describe()
pricesale_countcomment_count
count27512.0000002.516200e+0425162.000000
mean363.4235121.231605e+041121.741197
std614.8761535.241236e+045277.781581
min1.0000000.000000e+000.000000
25%99.0000002.780000e+0221.000000
50%205.0000001.443000e+03153.000000
75%390.0000006.353000e+03669.000000
max11100.0000001.923160e+06202930.000000
# 查看sale_count列的众数
mode_01 = data.sale_count.mode()
print(mode_01)# 查看comment_count列的众数
mode_02 = data.comment_count.mode()print(mode_02)

此处两列的众数均为0,且由标签数据含义可知销售量和评论数有可能存在为0的情况,因此使用0来填充缺失值

# 填充缺失值
data = data.fillna(0)
# 对空值行数求和
data.isnull().sum()

2.3 提取表格中有用信息并新增为列

# 结巴分词库
import jieba 
# jieba.load_userdict('addwords.txt')
title_cut = []
for i in data.title:j = jieba.lcut(i)title_cut.append(j)# 对标题进行分词,新增item_name_cut列
data['item_name_cut'] = title_cut
data[['title','item_name_cut']].head()
titleitem_name_cut
0CHANDO/自然堂 雪域精粹纯粹滋润霜50g 补水保湿 滋润水润面霜[CHANDO, /, 自然, 堂, , 雪域, 精粹, 纯粹, 滋润霜, 50g, ,…
1CHANDO/自然堂凝时鲜颜肌活乳液120ML 淡化细纹补水滋润专柜正品[CHANDO, /, 自然, 堂, 凝, 时鲜, 颜肌活, 乳液, 120ML, , 淡…
2CHANDO/自然堂活泉保湿修护精华水(滋润型135ml 补水控油爽肤水[CHANDO, /, 自然, 堂, 活泉, 保湿, 修护, 精华, 水, (, 滋润, 型…
3CHANDO/自然堂 男士劲爽控油洁面膏 100g 深层清洁 男士洗面奶[CHANDO, /, 自然, 堂, , 男士, 劲爽, 控油, 洁面膏, , 100g…
4CHANDO/自然堂雪域精粹纯粹滋润霜(清爽型)50g补水保湿滋润霜[CHANDO, /, 自然, 堂, 雪域, 精粹, 纯粹, 滋润霜, (, 清爽型, ),…
# 给商品添加分类
basic_config_data = """护肤品    套装    套装                            
护肤品    乳液类    乳液    美白乳    润肤乳    凝乳    柔肤液'    亮肤乳    菁华乳    修护乳
护肤品    眼部护理    眼霜    眼部精华    眼膜                    
护肤品    面膜类    面膜                                                    
护肤品    清洁类    洗面    洁面    清洁    卸妆    洁颜    洗颜    去角质    磨砂                        
护肤品    化妆水    化妆水    爽肤水    柔肤水    补水露    凝露    柔肤液    精粹水    亮肤水    润肤水    保湿水    菁华水    保湿喷雾    舒缓喷雾
护肤品    面霜类    面霜    日霜    晚霜    柔肤霜    滋润霜    保湿霜    凝霜    日间霜    晚间霜    乳霜    修护霜    亮肤霜    底霜    菁华霜
护肤品    精华类    精华液    精华水    精华露    精华素                                        
护肤品    防晒类    防晒霜    防晒喷雾                                                
化妆品    口红类    唇釉    口红    唇彩                                            
化妆品    底妆类    散粉    蜜粉    粉底液    定妆粉     气垫    粉饼    BB    CC    遮瑕    粉霜    粉底膏    粉底霜        
化妆品    眼部彩妆    眉粉    染眉膏    眼线    眼影    睫毛膏                                    
化妆品    修容类    鼻影    修容粉    高光    腮红                                        
其他    其他    其他"""# 将字符串basic_config_data 转为字典 category_config_map
category_config_map = {}
for config_line in basic_config_data.split('\n'):basic_cateogry_list = config_line.strip().strip('\n').strip('    ').split('    ')main_category = basic_cateogry_list[0]sub_category = basic_cateogry_list[1]unit_category_list = basic_cateogry_list[2:-1]for unit_category in unit_category_list:if unit_category and unit_category.strip().strip('    '):category_config_map[unit_category] = (main_category,sub_category)category_config_map
def func1(row):sub_type = ''   #子类别main_type = '' #主类别exist = False# 遍历item_name_cut 里每个词语for temp in row:# 如果词语包含在category_config_map里面,打上子类和主类标签if temp in category_config_map:sub_type = category_config_map.get(temp)[1]main_type = category_config_map.get(temp)[0]exist = Truebreakif not exist:sub_type= '其他'main_type = '其他'return [sub_type, main_type]
# 将子类别sub_type新增为一列
data['sub_type'] = data['item_name_cut'].map(lambda r:func1(r)[0])
# 将主类别main-type新增为一列
data['main_type'] = data['item_name_cut'].map(lambda r:func1(r)[1])
data.head()
update_timeidtitlepricesale_countcomment_count店名item_name_cutsub_typemain_type
02016/11/14A18164178225CHANDO/自然堂 雪域精粹纯粹滋润霜50g 补水保湿 滋润水润面霜139.026719.02704.0自然堂[CHANDO, /, 自然, 堂, , 雪域, 精粹, 纯粹, 滋润霜, 50g, ,…面霜类护肤品
12016/11/14A18177105952CHANDO/自然堂凝时鲜颜肌活乳液120ML 淡化细纹补水滋润专柜正品194.08122.01492.0自然堂[CHANDO, /, 自然, 堂, 凝, 时鲜, 颜肌活, 乳液, 120ML, , 淡…乳液类护肤品
22016/11/14A18177226992CHANDO/自然堂活泉保湿修护精华水(滋润型135ml 补水控油爽肤水99.012668.0589.0自然堂[CHANDO, /, 自然, 堂, 活泉, 保湿, 修护, 精华, 水, (, 滋润, 型…化妆水护肤品
32016/11/14A18178033846CHANDO/自然堂 男士劲爽控油洁面膏 100g 深层清洁 男士洗面奶38.025805.04287.0自然堂[CHANDO, /, 自然, 堂, , 男士, 劲爽, 控油, 洁面膏, , 100g…清洁类护肤品
42016/11/14A18178045259CHANDO/自然堂雪域精粹纯粹滋润霜(清爽型)50g补水保湿滋润霜139.05196.0618.0自然堂[CHANDO, /, 自然, 堂, 雪域, 精粹, 纯粹, 滋润霜, (, 清爽型, ),…面霜类护肤品
# 将“是否男士专用”新增为一列
gender = []
for i in range(len(data)):if '男' in data.item_name_cut[i]:gender.append('是')elif '男士' in data.item_name_cut[i]:gender.append('是')elif '男生' in data.item_name_cut[i]:gender.append('是')else:gender.append('否')# 将“是否男士专用”新增为一列
data['是否男士专用'] = gender
data.head()
update_timeidtitlepricesale_countcomment_count店名item_name_cutsub_typemain_type是否男士专用
02016/11/14A18164178225CHANDO/自然堂 雪域精粹纯粹滋润霜50g 补水保湿 滋润水润面霜139.026719.02704.0自然堂[CHANDO, /, 自然, 堂, , 雪域, 精粹, 纯粹, 滋润霜, 50g, ,…面霜类护肤品
12016/11/14A18177105952CHANDO/自然堂凝时鲜颜肌活乳液120ML 淡化细纹补水滋润专柜正品194.08122.01492.0自然堂[CHANDO, /, 自然, 堂, 凝, 时鲜, 颜肌活, 乳液, 120ML, , 淡…乳液类护肤品
22016/11/14A18177226992CHANDO/自然堂活泉保湿修护精华水(滋润型135ml 补水控油爽肤水99.012668.0589.0自然堂[CHANDO, /, 自然, 堂, 活泉, 保湿, 修护, 精华, 水, (, 滋润, 型…化妆水护肤品
32016/11/14A18178033846CHANDO/自然堂 男士劲爽控油洁面膏 100g 深层清洁 男士洗面奶38.025805.04287.0自然堂[CHANDO, /, 自然, 堂, , 男士, 劲爽, 控油, 洁面膏, , 100g…清洁类护肤品
42016/11/14A18178045259CHANDO/自然堂雪域精粹纯粹滋润霜(清爽型)50g补水保湿滋润霜139.05196.0618.0自然堂[CHANDO, /, 自然, 堂, 雪域, 精粹, 纯粹, 滋润霜, (, 清爽型, ),…面霜类护肤品
# 新增销售额、购买日期(天)为一列
# 销售额=销售量*价格
data['销售额'] = data.sale_count*data.price# 新增购买日期为一列
# 转换时间格式
data['update_time'] = pd.to_datetime(data['update_time'])data[['update_time']].head()
update_time
02016-11-14
12016-11-14
22016-11-14
32016-11-14
42016-11-14
# 将时间设置为新的index
data = data.set_index('update_time')# 新增时间“天”为一列
data['day'] = data.index.day# 删除中文分词的一列
del data['item_name_cut']
# 查看最终数据表格
data.head()
idtitlepricesale_countcomment_count店名sub_typemain_type是否男士专用销售额day
update_time
2016-11-14A18164178225CHANDO/自然堂 雪域精粹纯粹滋润霜50g 补水保湿 滋润水润面霜139.026719.02704.0自然堂面霜类护肤品3713941.014
2016-11-14A18177105952CHANDO/自然堂凝时鲜颜肌活乳液120ML 淡化细纹补水滋润专柜正品194.08122.01492.0自然堂乳液类护肤品1575668.014
2016-11-14A18177226992CHANDO/自然堂活泉保湿修护精华水(滋润型135ml 补水控油爽肤水99.012668.0589.0自然堂化妆水护肤品1254132.014
2016-11-14A18178033846CHANDO/自然堂 男士劲爽控油洁面膏 100g 深层清洁 男士洗面奶38.025805.04287.0自然堂清洁类护肤品980590.014
2016-11-14A18178045259CHANDO/自然堂雪域精粹纯粹滋润霜(清爽型)50g补水保湿滋润霜139.05196.0618.0自然堂面霜类护肤品722244.014
# 保存清理好的数据为Excel格式
data.to_excel('./clean_beautymakeup.xlsx',sheet_name='clean_data')

三、数据探索

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inlinedata.columns

3.1 各品牌SKU数

plt.rcParams['font.sans-serif']=['SimHei']  #指定默认字体  
plt.rcParams['axes.unicode_minus']=False  #解决负号'-'显示为方块的问题plt.figure(figsize=(12,7))
# 计算各店铺的商品数量
data['店名'].value_counts().sort_values(ascending=False).plot.bar(width=0.8,alpha=0.6,color='b')plt.title('各品牌SKU数',fontsize=18)
plt.ylabel('商品数量',fontsize=14)
plt.show()

在这里插入图片描述

悦诗风吟的商品数量最多,其次为佰草集、欧莱雅

3.2 品牌总销量和总销售额

fig,axes = plt.subplots(1,2,figsize=(12,10))ax1 = data.groupby('店名').sale_count.sum().sort_values(ascending=True).plot(kind='barh',ax=axes[0],width=0.6)
ax1.set_title('品牌总销售量',fontsize=12)
ax1.set_xlabel('总销售量')ax2 = data.groupby('店名')['销售额'].sum().sort_values(ascending=True).plot(kind='barh',ax=axes[1],width=0.6)
ax2.set_title('品牌总销售额',fontsize=12)
ax2.set_xlabel('总销售额')plt.subplots_adjust(wspace=0.4)
plt.show()

在这里插入图片描述

相宜本草的销售量和销售额都是最高的。销量第二至第五,分别为美宝莲、悦诗风吟、妮维雅、欧莱雅;销售额第二至第五,分别为欧莱雅、佰草集、美宝莲、悦诗风吟。 宝莲、悦诗风吟、欧莱雅都在销量、销售额前五中。

3.3 各类别的销售量、销售额情况

fig,axes = plt.subplots(1,2,figsize=(18,12))data1 = data.groupby('main_type')['sale_count'].sum()
ax1 = data1.plot(kind='pie',ax=axes[0],autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
pctdistance=0.8, # 设置百分比标签与圆心的距离
labels= data1.index,
labeldistance = 1.05, # 设置标签与圆心的距离
startangle = 60, # 设置饼图的初始角度
radius = 1.2, # 设置饼图的半径
counterclock = False, # 是否逆时针,这里设置为顺时针方向
wedgeprops = {'linewidth': 1.2, },# 设置饼图内外边界的属性值
textprops = {'fontsize':16, 'color':'k','rotation':80}, # 设置文本标签的属性值
)
ax1.set_title('主类别销售量占比',fontsize=20)data2 = data.groupby('sub_type')['sale_count'].sum()
ax2 = data2.plot(kind='pie',ax=axes[1],autopct='%.1f%%', 
pctdistance=0.8, 
labels= data2.index,
labeldistance = 1.05,
startangle = 230, 
radius = 1.2, 
counterclock = False, 
wedgeprops = {'linewidth': 1.2, },
textprops = {'fontsize':16, 'color':'k','rotation':80}, 
)ax2.set_title('子类别销售量占比',fontsize=20)# 设置坐标标签
ax1.set_xlabel(..., fontsize=16,labelpad=38.5)
ax1.set_ylabel(..., fontsize=16,labelpad=38.5)
ax2.set_xlabel(..., fontsize=16,labelpad=38.5)
ax2.set_ylabel(..., fontsize=16,labelpad=38.5)
plt.subplots_adjust(wspace=0.4)
plt.show()

在这里插入图片描述

从主类别销售量占比情况来看,护肤品的销量远大于化妆品;

从子类别销售量占比情况来看,底妆类、口红类在化妆品中销量最多,清洁类、化妆水、面霜类在护肤品中销量最多。

plt.figure(figsize=(18,8))
sns.barplot(x='店名',y='sale_count',hue='main_type',data=data,saturation=0.75,ci=0)
plt.title('各品牌各总类的总销量', fontsize=20)
plt.ylabel('销量',fontsize=16)
plt.xlabel('店名',fontsize=16)
plt.text(0,78000,'注:此处也可使用堆叠图,对比效果更直观',verticalalignment='top', horizontalalignment='left',color='gray', fontsize=10)
# 设置刻度字体大小plt.xticks(fontsize=16,rotation=45)
plt.yticks(fontsize=16)
plt.show()

在这里插入图片描述

plt.figure(figsize=(18,8))
sns.barplot( x = '店名',
y = '销售额',hue = 'main_type',data =data,saturation = 0.75,ci=0,)
plt.ylabel('销售额',fontsize=16)
plt.xlabel('店名',fontsize=16)
plt.title('各品牌各总类的总销售额',fontsize=20)
# 设置刻度字体大小
plt.xticks(fontsize=16,rotation=45)
plt.yticks(fontsize=16)
plt.show()

在这里插入图片描述

各品牌的化妆品、护肤品销量、销售情况均不一样,这与品牌的定位有关, 有的品牌主打化妆品,化妆品会表现好很多,如蜜丝佛陀等。主打护肤品的品牌,护肤品的销量销售额会表现好很多,如欧莱雅、佰草集等。 有的品牌如美宝莲、兰蔻、悦诗风吟,化妆品和护肤品的销售、销售额都还不错。

plt.figure(figsize = (16,6))
sns.barplot( x = '店名',
y = 'sale_count',hue = 'sub_type',data =data,saturation = 0.75,ci=0)
plt.title('各品牌各子类的总销量')
plt.ylabel('销量')
plt.show()

在这里插入图片描述

plt.figure(figsize = (14,6))
sns.barplot( x = '店名',
y = '销售额',hue = 'sub_type',data =data,saturation = 0.75,ci=0)
plt.title('各品牌各子类的总销售额')
plt.ylabel('销售额')
plt.show()

在这里插入图片描述

3.4 各品牌热度

plt.figure(figsize = (12,6))
data.groupby('店名').comment_count.mean().sort_values(ascending=False).plot(kind='bar',width=0.8)
plt.title('各品牌商品的平均评论数')
plt.ylabel('评论数')
plt.show()

在这里插入图片描述

plt.figure(figsize=(18,12))x = data.groupby('店名')['sale_count'].mean()
y = data.groupby('店名')['comment_count'].mean()
s = data.groupby('店名')['price'].mean()
txt = data.groupby('店名').id.count().indexsns.scatterplot(x=x,y=y,size=s,hue=s,sizes=(100,1500),data=data)for i in range(len(txt)):plt.annotate(txt[i],xy=(x[i],y[i]))plt.ylabel('热度')
plt.xlabel('销量')plt.legend(loc='upper left')
plt.show()

在这里插入图片描述

由上图所示:

越靠上的品牌热度越高,越靠右的品牌销量越高,颜色越深圈越大价格越高

热度与销量呈现一定的正相关; 美宝莲热度第一,销量第二,妮维雅热度第二,销量第四,两者价格均相对较低; 价格低的品牌热度和销量相对较高,价格高的品牌热度和销量相对较低,说明价格在热度和销量中有一定影响;

3.5 各品牌价格

#查看价格的箱型图
plt.figure(figsize=(18,10))
sns.boxplot(x='店名',y='price',data=data)
plt.ylim(0,3000)#如果不限制,就不容易看清箱型,所以把Y轴刻度缩小为0-3000
plt.show()

在这里插入图片描述

data.groupby('店名').price.sum()
avg_price=data.groupby('店名').price.sum()/data.groupby('店名').price.count()
avg_price
fig = plt.figure(figsize=(12,6))
avg_price.sort_values(ascending=False).plot(kind='bar',width=0.8,alpha=0.6,color='b',label='各品牌平均价格')
y = data['price'].mean()
plt.axhline(y,0,5,color='r',label='全品牌平均价格')
plt.ylabel('各品牌平均价格')
plt.title('各品牌产品的平均价格',fontsize=24)
plt.legend(loc='best')
plt.show()

在这里插入图片描述

娇兰、SKII、雪花秀、雅诗兰黛、兰蔻、资生堂这几个国际大牌的产品价格很高,产品平均价格都在500以上,都是一线大牌;

兰芝、倩碧、玉兰油、植村秀、佰草集、薇姿、雅漾的平均价格在300-400元左右,其中佰草集是最贵的国货品牌;

美加净作为国货品牌,性价比高,平均价格最低,妮维雅的平均价格第二低,在100元左右;

全品牌平均价格低于400元,除了前五个国际大牌其余品牌的平均价格都低于全品牌平均价格;

plt.figure(figsize=(18,10))x = data.groupby('店名')['sale_count'].mean()
y = data.groupby('店名')['销售额'].mean()
s = avg_price
txt = data.groupby('店名').id.count().indexsns.scatterplot(x=x,y=x,size=s,sizes=(100,1500),marker='v',alpha=0.5,color='b',data=data)for i in range(len(txt)):plt.annotate(txt[i],xy=(x[i],y[i]),xytext = (x[i]+0.2, y[i]+0.2))  #在散点后面增加品牌信息的标签plt.ylabel('销售额')
plt.xlabel('销量')plt.legend(loc='upper left')
plt.show()

在这里插入图片描述

由上图所示,越靠上代表销售额越高,越靠左代表销量越高,图形越大代表平均价格越高

销售量和销售额呈现正相关;

相宜本草、美宝莲、蜜丝佛陀销量和销售额位居前三,且平均价格居中;

说明销量销售额与价格有很重要的联系;

3.6 男性护肤品销量情况

gender_data=data[data['是否男士专用']=='是']
gender_data_1=gender_data[(gender_data.main_type =='护肤品')| (gender_data.main_type=='化妆品')]
plt.figure(figsize = (12,6))
sns.barplot(x='店名',y='sale_count',hue='main_type',data =gender_data_1,saturation=0.75,ci=0,)
plt.show()

在这里插入图片描述

f,[ax1,ax2]=plt.subplots(1,2,figsize=(12,6))
gender_data.groupby('店名').sale_count.sum().sort_values(ascending=True).plot(kind='barh',width=0.8,ax=ax1)
ax1.set_title('男士护肤品销量排名')gender_data.groupby('店名').销售额.sum().sort_values(ascending=True).plot(kind='barh',width=0.8,ax=ax2)
ax2.set_title('男士护肤品销售额排名')plt.subplots_adjust(wspace=0.4)
plt.show()

在这里插入图片描述

男士购买的大多是护肤品;

妮维雅是男生护肤品中销量遥遥领先的品牌,第二第三分别为欧莱雅、相宜本草;

3.7 分析时间与销量的关系,体现购买高峰期

from matplotlib.pyplot import MultipleLocator
plt.figure(figsize = (12,6))
day_sale=data.groupby('day')['sale_count'].sum()
day_sale.plot()
plt.grid(linestyle="-.",color="gray",axis="x",alpha=0.5)
x_major_locator=MultipleLocator(1)  #把x轴的刻度间隔设置为1,并存在变量里
ax=plt.gca()  #ax为两条坐标轴的实例
ax.xaxis.set_major_locator(x_major_locator)
#把x轴的主刻度设置为1的倍数
plt.xlabel('日期(11月)',fontsize=12)
plt.ylabel('销量',fontsize=12)
plt.show()

总结

美妆类别中护肤品销量远大于化妆品,其中清洁类、化妆水、面霜等基础护肤类销量最高;

男士购买美妆集中在护肤品类,其中妮维雅品牌是最受男士喜爱的品牌;

价格和热度对销售量有关联,平价基础产品是大多数消费者的选择;

由于商家在双十一提前预热,巨大的优惠力度和为了避免网络高峰,不少消费者选择提前消费,销量高峰出现在双十一前几天;双十一后3天商家持续打折优惠,消费者还保有购物余热,但远不如双十一之前。

建议

消费者对产品价格和热度关注度较高,品牌可以适当调整产品价格并通过诸如网络社交平台的方式提高品牌热度;

对于男性消费者,品牌可以定向推荐平价基础护肤产品,在销量中可以看到也有一部分男性购买化妆品,品牌可以在护肤品中适当捆绑化妆品产品带动消费;

消费者购买欲望并不集中在双十一当天,商家可以提前预热加大优惠力度刺激消费者提前消费,避免网络高峰。

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

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

相关文章

Vuex的模块化管理

1&#xff1a;定义一个单独的模块。由于mutation的第二个参数只能提交一个对象&#xff0c;所以这里的ThisLog是个json串。 2&#xff1a;在Vuex中的index.js中引入该模块 3&#xff1a;在别的组件中通过...mapState调用模块保存的State的值。 4&#xff1a;用...mapMutations修…

基于php医院预约挂号系统

摘 要 随着信息时代的来临&#xff0c;过去的管理方式缺点逐渐暴露&#xff0c;对过去的医院预约挂号管理方式的缺点进行分析&#xff0c;采取计算机方式构建医院预约挂号系统。本文通过阅读相关文献&#xff0c;研究国内外相关技术&#xff0c;开发并设计一款医院预约挂号系统…

【逆向思考 】【拓扑排序】1591. 奇怪的打印机 II

本文涉及的知识点 逆向思考 拓扑排序 LeetCode1591. 奇怪的打印机 II 给你一个奇怪的打印机&#xff0c;它有如下两个特殊的打印规则&#xff1a; 每一次操作时&#xff0c;打印机会用同一种颜色打印一个矩形的形状&#xff0c;每次打印会覆盖矩形对应格子里原本的颜色。 一…

活动回顾丨掘金海外,探寻泛娱乐社交APP出海新风口

3月中旬,Flat Ads携手声网、XMP在广州成功举办“泛娱乐社交APP出海新风口——广州站”的主题线下沙龙活动。 多位大咖与泛娱乐社交APP赛道的行业伙伴汇聚一堂。本次活动邀请到Flat Ads 市场VP 王若策、声网娱乐视频产品负责人 陈际陶、XMP资深产品运营专家 屈俊星等多位行业大…

材料物理 笔记-4

原内容请参考哈尔滨工业大学何飞教授&#xff1a;https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》&#xff08;哈尔滨工业大学出版社&#xff09; 离…

Stable Diffusion扩散模型【详解】小白也能看懂!!

文章目录 1、Diffusion的整体过程2、加噪过程2.1 加噪的具体细节2.2 加噪过程的公式推导 3、去噪过程3.1 图像概率分布 4、损失函数5、 伪代码过程 此文涉及公式推导&#xff0c;需要参考这篇文章&#xff1a; Stable Diffusion扩散模型推导公式的基础知识 1、Diffusion的整体…

OpenHarmony实战:小型系统移植概述

驱动主要包含两部分&#xff0c;平台驱动和器件驱动。平台驱动主要包括通常在SOC内的GPIO、I2C、SPI等&#xff1b;器件驱动则主要包含通常在SOC外的器件&#xff0c;如 LCD、TP、WLAN等 图1 OpenHarmony 驱动分类 HDF驱动被设计为可以跨OS使用的驱动程序&#xff0c;HDF驱动框…

MySQL安装卸载-Linux

目录 1.概述 2.安装 2.1.上传 2.2.解压 ​​​​​​​2.3.安装 ​​​​​​​2.4.启动服务 ​​​​​​​2.5.查询临时密码 ​​​​​​​2.6.修改临时密码 ​​​​​​​2.7.创建用户 ​​​​​​​2.8.分配权限 ​​​​​​​2.9.重新链接 3.卸载 3.1.停…

Redis 全景图(3)--- Redis 应用于缓存

前言 这是关于 Redis 全景图的最后一篇文章。因为一次写太多会限流&#xff0c;我也是没办法&#xff0c;才分成三篇文章来写。这篇文章是关于 Redis 应用于缓存的。 其实为什么要讲这个话题呢&#xff1f; Redis 应用在很多地方呀&#xff0c;为什么一定要挑着这个话题来讲呢…

日常生活中使用的 4 个核心开发工具

长话短说 本文列出了 2024 年我作为开发人员在日常生活中最常用的 4 个工具。✅ 这些工具旨在提高您的编辑技能、终端导航、笔记以及在应用程序容器化之外使用 Docker。另外&#xff0c;最后我还给大家准备了一个小惊喜。 如果您没有使用本文中至少提到的 1-2 个工具&#xf…

JavaSE-10笔记【多线程1(+2024新)】

文章目录 1.进程与线程2.并发与并行3.线程的调度模型4.实现线程4.1 第一种方式&#xff1a;继承Thread4.2 第二种方式&#xff1a;实现Runnable接口4.3 t.start()和t.run()的本质区别&#xff1f;4.4 线程常用的三个方法 5.线程的生命周期&#xff08;把生命周期图背会&#xf…

redis事务(redis features)

redis支持事务&#xff0c;也就是可以在一次请求中执行多个命令。redis中的事务主要是通过MULTI和EXEC这两个命令来实现的。 MULTI命令用来开启一个事务&#xff0c;事务开启之后&#xff0c;所有的命令就都会被放入到一个队列中&#xff0c;最后通过一个EXEC命令来执行事务中…

jsp实现增删改查——(三)用Echarts图表统计学生信息

学生信息CRUD——Echarts显示生活费 目录结构 创建一个js文件夹&#xff0c;将echarts.min.js放到里面。 功能实现 与之前我们写的jsp文件&#xff08;含有html代码、Java代码&#xff09;不同的是&#xff0c;实现Echarts对生活费的显示&#xff0c;需要调用echarts.min.js…

OpenHarmony实战:CMake方式组织编译的库移植

以double-conversion库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取double-conversion源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述double-conversion/cmake/CMake组织编译使用到的模板double-conversion/double-conversion/源…

界面控件Kendo UI for jQuery 2024 Q1亮点 - 新的ToggleButton组件

Telerik & Kendo UI 2024 Q1 版本于2024年初发布&#xff0c;在此版本中将AI集成到了UI组件中&#xff0c;在整个产品组合中引入AI Prompt组件以及10多个新的UI控件、支持Angular 17、多个数据可视化功能增强等。 P.S&#xff1a;Kendo UI for jQuery提供了在短时间内构建…

C++核心编程——4.2(2)对象的初始化和清理

4.2.5 深拷贝与浅拷贝 浅拷贝&#xff1a;编译器提供的简单的赋值拷贝操作 深拷贝&#xff1a;在堆区重新申请空间&#xff0c;进行拷贝操作 示例&#xff1a; class Person { public://无参&#xff08;默认&#xff09;构造函数Person() {cout << "无参构造函数…

基于Uni-app的体育场馆预约系统的设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

电商技术揭秘六:前端技术与用户体验优化

文章目录 引言一、前端技术在电商中的重要性1.1 前端技术概述1.2 用户体验与前端技术的关系 二、响应式设计与移动优化2.1 响应式设计的原则2.2 移动设备优化策略2.3 响应式设计的工具和框架 三、交互设计与用户体验提升3.1 交互设计的重要性3.2 用户体验的量化与优化3.3 通过前…

asf是什么格式的文件?用手机怎么打开?

由于手机操作系统和硬件的限制&#xff0c;大部分手机并不直接支持asf文件的播放。因此&#xff0c;如果你想在手机上打开asf文件&#xff0c;你可能需要先将文件转换为手机支持的格式&#xff0c;如MP4。可以通过使用一些视频转换软件来实现&#xff0c;比如野葱视频转换器。 …

RuoYi-Vue若依框架-集成mybatis-plus报错Unknown column ‘search_value‘ in ‘field list‘

报错信息 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column search_value in field list ### The error may exist in com/ruoyi/sales/mapper/ZcSpecificationsMapper.java (best guess) ### The error may involve defaultParameter…