当前位置: 首页 > news >正文

电商双十一美妆数据分析(代码)

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

import jieba

# 数据读取

df = pd.read_csv('双十一_淘宝美妆数据.csv')

# 数据清洗

# 处理重复值

data = df.drop_duplicates(inplace=False)

data = data.reset_index(inplace=False, drop=True)

# 处理缺失值

data['sale_count'].fillna(0, inplace=True)

data['comment_count'].fillna(0, inplace=True)

 

# 特征工程

# 对title进行分词

sub_title = []

for each in data['title']:

    k = jieba.lcut(each)

    sub_title.append(k)

data['sub_title'] = sub_title

 

# 划分主类别和子类别

basic_data = {

    "乳液": ("护肤品", "乳液类"),

    "柔肤水": ("护肤品", "化妆水"),

    "精华素": ("护肤品", "精华类"),

    "面霜": ("护肤品", "面霜类"),

    "洁面乳": ("护肤品", "清洁类"),

    "唇膏": ("化妆品", "口红类"),

    "蜜粉": ("化妆品", "底妆类"),

    "眼影": ("化妆品", "眼部妆"),

    "修容粉": ("化妆品", "修容类")

}

main_type = []

sub_type = []

for i in range(len(data)):

    cat = []

    sub_cat = []

    for j in data['sub_title'][i]:

        if j in basic_data:

            cat.append(basic_data[j][0])

            sub_cat.append(basic_data[j][1])

            break

    if not cat:

        main_type.append('其他')

        sub_type.append('其他')

    else:

        main_type.append(cat[0])

        sub_type.append(sub_cat[0])

data['main_type'] = main_type

data['sub_type'] = sub_type

 

# 判断是否男士专用

sex = []

for i in range(len(data)):

    if '男士' in data['sub_title'][i]:

        sex.append('是')

    elif 'man' in data['sub_title'][i]:

        sex.append('是')

    elif '男性' in data['sub_title'][i]:

        sex.append('是')

    else:

        sex.append('否')

data['是否男士专用'] = sex

 

# 新增销售额列

data['销售额'] = data['price'] * data['sale_count']

 

# 数据分析及可视化

# 各店铺商品数量、总销量、总销售额、平均单价

plt.figure(figsize=(16, 12))

plt.subplot(2, 2, 1)

data['店名'].value_counts().sort_values().plot(kind='barh')

plt.title('各店铺商品数量', fontsize = 15)

plt.ylabel('店名', fontsize = 15)

plt.xlabel('数量', fontsize = 15)

 

plt.subplot(2, 2, 2)

data.groupby('店名')['sale_count'].sum().sort_values().plot(kind='barh')

plt.title('各店铺总销量', fontsize = 15)

plt.ylabel('店名', fontsize = 15)

plt.xlabel('销量', fontsize = 15)

 

plt.subplot(2, 2, 3)

data.groupby('店名')['销售额'].sum().sort_values().plot(kind='barh')

plt.title('各店铺总销售额', fontsize = 15)

plt.ylabel('店名', fontsize = 15)

plt.xlabel('销售额', fontsize = 15)

 

plt.subplot(2, 2, 4)

(data['销售额'] / data['sale_count']).groupby(data['店名']).mean().sort_values().plot(kind='barh')

plt.title('各店铺商品平均单价', fontsize = 15)

plt.ylabel('店名', fontsize = 15)

plt.xlabel('平均单价', fontsize = 15)

plt.tight_layout()

 

# 不同价格区间店铺销售额占比

avg_price = data.groupby('店名')['销售额'].sum() / data.groupby('店名')['sale_count'].sum()

A = avg_price[(avg_price <= 100) & (avg_price > 0)]

B = avg_price[(avg_price <= 200) & (avg_price > 100)]

C = avg_price[(avg_price <= 300) & (avg_price > 200)]

D = avg_price[avg_price > 300]

sum_sale_A = data[data['店名'].isin(A.index)]['销售额'].sum()

sum_sale_B = data[data['店名'].isin(B.index)]['销售额'].sum()

sum_sale_C = data[data['店名'].isin(C.index)]['销售额'].sum()

sum_sale_D = data[data['店名'].isin(D.index)]['销售额'].sum()

 

plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)

labels = ['均价0-100元', '均价100-200元', '均价200-300元', '均价300元以上']

sizes = [sum_sale_A, sum_sale_B, sum_sale_C, sum_sale_D]

plt.pie(sizes, labels=labels, autopct='%1.1f%%')

plt.title('不同价格区间店铺销售额占比')

 

plt.subplot(1, 2, 2)

bars = plt.bar(labels, [np.mean(sum_sale_A), np.mean(sum_sale_B), np.mean(sum_sale_C), np.mean(sum_sale_D)])

for bar in bars:

    height = bar.get_height()

    plt.annotate('{:.2f}'.format(height),

                 xy=(bar.get_x() + bar.get_width() / 2, height),

                 xytext=(0, 3), # 3 points vertical offset

                 textcoords="offset points",

                 ha='center', va='bottom')

plt.title('不同类别店铺平均销售额')

plt.tight_layout()

 

# 各大类、小类销量和销售额占比

plt.figure(figsize=(12, 12))

plt.subplot(2, 2, 1)

data.groupby('main_type')['sale_count'].sum().plot(kind='pie', autopct='%1.1f%%')

plt.title('各大类销量占比')

 

plt.subplot(2, 2, 2)

data.groupby('main_type')['销售额'].sum().plot(kind='pie', autopct='%1.1f%%')

plt.title('各大类销售额占比')

 

plt.subplot(2, 2, 3)

data.groupby('sub_type')['sale_count'].sum().plot(kind='pie', autopct='%1.1f%%')

plt.title('各小类销量占比')

 

plt.subplot(2, 2, 4)

data.groupby('sub_type')['销售额'].sum().plot(kind='pie', autopct='%1.1f%%')

plt.title('各小类销售额占比')

plt.tight_layout()

 

# 各店铺各大类、小类销量和销售额情况

# 先去除总销量为0的店铺

data1 = data.drop(index = data[data['sale_count'] == 0].index)

data1 = data1.reset_index(inplace=False, drop=True)

 

plt.figure(figsize=(16, 12))

plt.subplot(2, 2, 1)

sns.barplot(x='店名', y='sale_count', hue='main_type', data=data1)

plt.title('各店铺各大类的销售量', fontsize = 15)

plt.ylabel('销量', fontsize = 15)

plt.xticks(rotation=45)

 

plt.subplot(2, 2, 2)

sns.barplot(x='店名', y='销售额', hue='main_type', data=data1)

plt.title('各店铺各大类的销售额', fontsize = 15)

plt.ylabel('销售额', fontsize = 15)

plt.xticks(rotation=45)

 

plt.subplot(2, 2, 3)

sns.barplot(x='店名', y='sale_count', hue='sub_type', data=data1)

plt.title('各店铺各小类的销售量', fontsize = 15)

plt.ylabel('销量', fontsize = 15)

plt.xticks(rotation=45)

 

plt.subplot(2, 2, 4)

sns.barplot(x='店名', y='销售额', hue='sub_type', data=data1)

plt.title('各店铺各小类的销售额', fontsize = 15)

plt.ylabel('销售额', fontsize = 15)

plt.xticks(rotation=45)

plt.tight_layout()

 

# 男士专用和非男士专用相关分析

plt.figure(figsize=(16, 16))

plt.subplot(2, 2, 1)

data.loc[data['是否男士专用'] == '是'].groupby('main_type')['sale_count'].sum().plot(kind='pie', autopct='%1.1f%%')

plt.title('男士专用中各类销量占比')

 

plt.subplot(2, 2, 2)

data.loc[data['是否男士专用'] == '否'].groupby('main_type')['sale_count'].sum().plot(kind='pie', autopct='%1.1f%%')

plt.title('非男士专用中各类销量占比')

 

plt.subplot(2, 2, 3)

data.groupby('是否男士专用')['sale_count'].sum().plot(kind='pie', autopct='%1.1f%%')

plt.title('男士专用销量占总销量')

 

plt.subplot(2, 2, 4)

data.groupby('是否男士专用')['销售额'].sum().plot(kind='pie', autopct='%1.1f%%')

plt.title('男士专用销售额占总销售额')

plt.tight_layout()

 

# 各店铺男士专用商品销量

male_data = data.loc[data['是否男士专用'] == '是']

plt.figure(figsize=(12, 8))

sns.barplot(x='店名', y='sale_count', data=male_data)

plt.title('各店男士专用商品销量', fontsize = 15)

plt.ylabel('销量', fontsize = 15)

plt.tight_layout()

 

# 时间相关分析(假设update_time是时间字段且为datetime类型,如果不是需先转换)

# data['update_time'] = pd.to_datetime(data['update_time'])

# plt.figure(figsize=(16, 12))

# plt.subplot(2, 1, 1)

# data.groupby('update_time')['sale_count'].sum().plot()

# plt.title('每天的销量')

# plt.ylabel('销量')

# plt.grid(True)

 

# plt.subplot(2, 1, 2)

# data.groupby('update_time')['销售额'].sum().plot()

# plt.title('每天的销售额')

# plt.ylabel('销售额')

# plt.grid(True)

# plt.tight_layout()

 

# 评论数相关分析(假设只是简单看各店铺评论数情况)

plt.figure(figsize=(16, 6))

plt.subplot(1, 2, 1)

data.groupby('店名')['comment_count'].sum().sort_values().plot(kind='barh')

plt.title('各店铺总评论数', fontsize = 15)

plt.ylabel('店名', fontsize = 15)

plt.xlabel('评论数', fontsize = 15)

 

plt.subplot(1, 2, 2)

(data['comment_count'] / data['sale_count']).groupby(data['店名']).mean().sort_values().plot(kind='barh')

plt.title('各店铺平均多少一条评论', fontsize = 15)

plt.ylabel('店名', fontsize = 15)

plt.xlabel('平均评论数', fontsize = 15)

plt.tight_layout()

 

plt.show()

代码中的数据分析及可视化

 

  • 店铺综合指标:分析并可视化各店铺商品数量、总销量、总销售额、平均单价。
  • 价格区间分析:划分价格区间,分析不同区间店铺销售额占比及平均销售额。
  • 类别销售占比:分析各大类、小类的销量和销售额占比。
  • 店铺类别销售情况:展示各店铺各大类、小类的销量和销售额情况
  • 男士专用分析:分析男士专用和非男士专用商品在销量和销售额方面的占比,以及各店铺男士专用商品销量
  • 时间及评论数分析:代码中时间分析部分因数据类型不确定(假设需  update_time  为  datetime  类型 )未完整实现,评论数部分分析了各店铺总评论数和平均评论数情况。

 

相关文章:

  • 【笔记】当个自由的书籍收集者从canvas得到png转pdf
  • win11指定Microsoft Print To PDF的输出路径(电子书djvu转pdf输出路径)
  • java每日精进 5.07【框架之数据权限】
  • Zsh + iTerm2搭配使用教学,非常舒服,macOS
  • java CompletableFuture 异步编程工具用法2
  • SpringBoot学生宿舍管理系统开发实现
  • 中间件-RocketMQ
  • IPFS集群部署
  • 【JS逆向基础】并发爬虫
  • Linux复习笔记(一)基础命令和操作
  • 技术分享:Franka机器人新方案——双臂数据采集与适应性安装,带你探索具身智能的奥秘
  • C# NX二次开发:曲线和点位相关UFUN函数详解
  • 15_sysfsLinux内核模块
  • 在 R 中,清除包含 NA(缺失值)的数据
  • AOP封装进行批量的数据查询并填充
  • 探索智能体的记忆:类型、策略和应用
  • MySQL优化-MySQL常用查询命令
  • MATLAB三维可视化技术解析
  • 引用的使用
  • 什么是跨域,如何解决跨域问题
  • 婚姻登记“全国通办”首日观察:数据多跑路,群众少跑腿
  • 巴军事行动致印度70%电网瘫痪
  • 上报集团社长李芸:发挥媒体优势,让中非民心在数字时代更深层互联互通
  • 欧洲理事会前主席米歇尔受聘中欧国际工商学院特聘教授,上海市市长龚正会见
  • 国防部:正告菲方停止以任何方式冲撞中方核心利益
  • 上海“随申兑”服务平台有哪些功能?已归集800余个惠企政策