14-美妆数据分析

ops/2025/1/22 20:30:35/


前言

美妆数据分析可以帮助企业更好地理解市场趋势、客户偏好和产品表现

import pandas as pd
import numpy as np

一、数据清洗

data = pd.read_csv(r'C:\Users\B\Desktop\美妆数据.csv',encoding='gbk')
data.head()data.info()data = data.drop_duplicates(inplace=False)
data.reset_index(drop=True)
data.indexdata.isnull().mean()data['销量'].mode()
data['评论数'].mode()data = data.fillna(0)
data.isnull().sum()# data.drop_duplicates(inplace=True)
data.describe()

二、使用步骤

1.标题切分

代码如下(示例):

import jiebalst = []
for i in data['标题']:j = jieba.lcut(i)lst.append(j)
data['标题切分'] = lstdata[['标题','标题切分']].head()basic_config_data = """护肤品    套装    套装                            
护肤品    乳液类    乳液    美白乳    润肤乳    凝乳     亮肤乳    菁华乳    修护乳
护肤品    眼部护理    眼霜    眼部精华    眼膜                    
护肤品    面膜类    面膜                                                    
护肤品    清洁类    洗面    洁面    清洁    卸妆    洁颜    洗颜    去角质    磨砂                        
护肤品    化妆水    化妆水    爽肤水    柔肤水    补水露    凝露    柔肤液    精粹水    亮肤水    润肤水    保湿水    菁华水    保湿喷雾    舒缓喷雾
护肤品    面霜类    面霜    日霜    晚霜    柔肤霜    滋润霜    保湿霜    凝霜    日间霜    晚间霜    乳霜    修护霜    亮肤霜    底霜    菁华霜
护肤品    精华类    精华液    精华水    精华露    精华素                                        
护肤品    防晒类    防晒霜    防晒喷雾                                                
化妆品    口红类    唇釉    口红    唇彩                                            
化妆品    底妆类    散粉    蜜粉    粉底液    定妆粉     气垫    粉饼    BB    CC    遮瑕    粉霜    粉底膏    粉底霜    
化妆品    眼部彩妆    眉粉    染眉膏    眼线    眼影    睫毛膏                                    
化妆品    修容类    鼻影    修容粉    高光    腮红                                        
其他    其他    其他"""category_config_map = {}
for config_line in basic_config_data.split('\n'):basic_cateogry_list = config_line.strip().strip('\n').strip('    ').split('    ')
#     print(basic_cateogry_list)main_category = basic_cateogry_list[0]   # 主类别      
#     print(main_category)sub_category = basic_cateogry_list[1]   # 子类别      unit_category_list = basic_cateogry_list[2:]   # 从第3个元素开始到最后是商品for unit_category in unit_category_list:if unit_category and unit_category.strip().strip('    '):   category_config_map[unit_category.strip()] = (main_category,sub_category) category_config_mapdef find_cates(row):for item in row:if item in category_config_map:return category_config_map[item]   # 如果是商品,则返回主类别和子类别return ('其他','其他')data['主类别'] = data['标题切分'].map(lambda r:find_cates(r)[0])
data['子类别'] = data['标题切分'].map(lambda r:find_cates(r)[1])data.reset_index(inplace=True)# 判断是否是男士专用 
gender = []
for i in range(len(data)):if '男' in data['标题切分'][i]:gender.append('是')elif '男士' in data['标题切分'][i]:gender.append('是')elif '男生' in data['标题切分'][i]:  gender.append('是')else:gender.append('否')
data['是否男士专用'] = gender
data.head()data['购买时间'] = pd.to_datetime(data['购买时间'])
data = data.set_index('购买时间')
data.head()data['天'] = data.index.day
datadel data['标题切分']
data.to_excel('美妆数据-已清洗.xlsx')

2.数据分析

1)各品牌分布

代码如下(示例):

import matplotlib.pyplot as plt
import seaborn as snsplt.rcParams['font.family']='SimHei'
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.size']=13# figsize 设置画布大小   alpha透明度
data['店名'].value_counts().plot.bar(width=0.8,color='g',alpha=0.6,figsize=(10,6))plt.title('各品牌数')
plt.ylabel('品牌数')
plt.show()

2)各品牌的销量和销售额

dd = data.groupby('店名')[['销量','销售额']].sum().sort_values(by='销售额')
ddfig,ax1 = plt.subplots(figsize=(15,6))
color = 'tab:green'
ax1.bar(dd.index,dd['销售额'],color=color,label='销售额')
ax1.set_xlabel('品牌')
ax1.set_ylabel('销售额',color=color)
ax1.set_xticklabels(dd.index,rotation=45)# 折线图
color2 = 'tab:red'
ax2 = ax1.twinx()
ax2.plot(dd.index,dd['销量'],color=color2,label='销量',marker='D')
ax2.set_ylabel('销量',color=color2)
fig.legend()

3)主类别 子类别销量分析

import plotly.express as px
import numpy as np# 旭日图
fig = px.sunburst(data,path=['主类别','子类别'],values='销量',color='子类别',hover_data=['销量']
)fig.show()

4)评论数 

data.groupby('店名')['评论数'].mean().sort_values(ascending=False).plot(kind='bar',width=0.8,color='g',alpha=0.6,figsize=(12,6))

5)品牌-销量-价格-评论数分析

plt.figure(figsize=(15,8))
x = data.groupby('店名')['销量'].mean()
y = data.groupby('店名')['评论数'].mean()
s = data.groupby('店名')['交易价格'].mean()
txt = data.groupby('店名')['产品编号'].count().index  # 求分组对应的索引
# print(txt)sns.scatterplot(x=x,y=y,size=s,  # 点的大小sizes = (100,1500), # 点的范围data = data,hue=s     # 按交易价格来分颜色
)
for i in range(len(txt)):plt.annotate(txt[i],xy=(x[i],y[i]))plt.show()

总结


http://www.ppmy.cn/ops/152270.html

相关文章

docker运行长期处于activating (start)

当systemctl start docker启动docker卡住长时间无响应,使用systemctl status docker查看docker运行状态发现activating (start) since 二 1998-01-06 00:43:48 CST; 38min ago,这个状态表示启动中,还未启动完成active (running),可以尝试以下操作&#x…

蓝桥杯 单词重排

问题描述 解题思路 这个问题可以通过计算排列数来解决。由于字符串 "LANQIAO" 由7个不同的字母组成,我们可以使用排列公式 P(n,n)n! 来计算,其中 n 是字母的数量。但是,由于字符串中存在重复的字母,我们需要对重复的字…

【Spring Boot】Spring原理:Bean的作用域和生命周期

目录 Spring原理 一. 知识回顾 1.1 回顾Spring IOC1.2 回顾Spring DI1.3 回顾如何获取对象 二. Bean的作用域三. Bean的生命周期 Spring原理 一. 知识回顾 在之前IOC/DI的学习中我们也用到了Bean对象,现在先来回顾一下IOC/DI的知识吧! 首先Spring I…

金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践

导读:中信银行信用卡中心每日新增日志数据 140 亿条(80TB),全量归档日志量超 40PB,早期基于 Elasticsearch 构建的日志云平台,面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此…

使用Docker构建Node.js应用的详细指南

引言 Docker平台允许开发者将应用程序打包并运行为容器。容器是一个在共享操作系统上运行的隔离进程,提供了一种比虚拟机更轻量级的替代方案。尽管容器并不是新事物,但它们提供的好处——包括进程隔离和环境标准化——随着越来越多的开发者使用分布式应…

MySQL表创建分区键

DISTRIBUTED BY (user_id) 是在某些分布式数据库系统中用于定义表分区策略的语法,特别是与 Greenplum、PostgreSQL(结合 Citus 扩展)或 Apache Hive 等系统相关。它指定了如何根据特定列(如 user_id)来分布数据到不同的…

【蓝桥杯】43693.日期问题

题目描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用…

Apache Hive 聚合函数与 OVER 窗口函数:从基础到高级应用

在大数据时代,Apache Hive 是处理和分析海量数据的强大工具。Hive 提供了丰富的聚合函数和强大的 OVER 窗口函数,能够帮助我们高效地进行数据分析。本文将综合介绍 Hive 的聚合函数和 OVER 窗口函数,结合实际使用场景和代码示例,帮…