【python数据分析】对淘商品类母婴购物数据进行分析(含完整源码)

news2024/12/29 1:24:50

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

又到了学Python时刻~


一、数据集

​ 今天我们来看一个来着阿里云天池的数据集:淘母婴购物数据,有两个csv文件:

1、mum_baby.csv

它包含了953个孩子的生日和性别信息,这些信息是由淘或tian猫的消费者提供的。

2、mum_baby_trade_history.csv

该表包含29971条淘用户的历史交易信息。

二、分析方向

1.什么商品类别销量最佳?

2.用户为之购买商品的婴儿年龄、性别分布?

3.销量与月份关系?

4.用户复购情况?

三、数据预处理

以时间段较长的奶粉为例.

对配方奶粉的分段,主要是根据国际食品法典委员会制定的cac来进行划分。

婴幼儿奶粉现在大范围上基本分为一段、二段、三段,部分婴幼儿奶粉可能会分为四段、五段。

奶粉分段及适用年龄:

​ 第1段婴幼儿奶粉适合0~6个月的宝宝;

​ 第2段婴幼儿奶粉适合6~12个月的宝宝;

​ 第3段婴幼儿奶粉适合1周岁~3周岁的宝宝;

​ 第4段奶粉适合3周岁~7周岁的孩子。

7周岁最多为365*7=2555天,那么对于天数大于2560天的天数视为无效数据,删除行。

PS:完整源码或数据集如有需要的小伙伴可以加下方的群去找管理员免费领取

import pandas as pd

mum_baby = pd.read_csv('.\data\mum_baby.csv')
trade_history = pd.read_csv('.\data\mum_baby_trade_history.csv')

# 计算订单产生时小孩的天数
# 匹配mum_baby中user_id对应的trade_history的user_id
tample = mum_baby.merge(trade_history, how="left", on='user_id').fillna(0)

tample['birthday'] = pd.to_datetime(tample['birthday'].astype(str))
tample['day'] = pd.to_datetime(tample['day'].astype(str))
age_days = tample['day'] - tample['birthday'] 
tample.loc[:, 'age_days'] = age_days  # 计算订单产生时小孩的天数
print(tample.age_days)
# 把age_days 只保留数字部分 
j = 0
for i in age_days:
    tample.loc[j, 'age_days'] = i.days
    # tample['age_days'][j] = i.days   警告:SettingWithCopyWarning:  A value is trying to be set on a copy of a slice from a DataFrame
    j += 1
# age_days为object类型  要改为int类型  不然describe无法统计年龄天数的最值
tample.age_days = pd.DataFrame(tample.age_days, dtype=int)

# tample.describe().to_excel(r'.\result\describe.xlsx')  
# 对于age的天数负数以及最大天数为10326天、购买数量最大值达到160天,可以做处理,也可以认为是正常数据不做处理
资源、代码、安装包等加企鹅裙:261823976##
tample[tample['age_days'] > 2560].sort_values('age_days').to_excel(r'.\data\age_days_gt7year.xlsx')
tample[tample['age_days'] < 0].sort_values('age_days').to_excel(r'.\data\age_days_lt0year.xlsx')

# print(tample[tample['age_days'] < 0].describe())
# 一般认为怀孕了再准备母婴用品会比较常见 这里 我们就以-300天以上为正常  去掉低于-300天的购买数据
# print(tample[tample['age_days'] > 2560]) #一共24行
# print(tample[tample['age_days'] < 0]) #143行
# print(tample[tample['age_days'] > 2560].index)
tample.drop(tample[tample['age_days'] > 2560].index, inplace=True)  # 删除大于2560天的行 在原始对象上修改
tample.drop(tample[tample['age_days'] < -300].index, inplace=True)  # 删除低于-300天的行
# 查看购买数量   七七八八的加起来50以内还算正常   达到160偏差有点不一般  还是删了吧
# tample.sort_values('buy_mount', ascending=False).to_csv(r'.\data\new_trade_history.csv')
tample.drop(tample[tample['buy_mount'] > 50].index, inplace=True)
print(tample.describe())
tample.to_csv(r'.\data\new_trade_history.csv')

四、数据可视化

导入包和数据

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

trade_history = pd.read_csv(r'.\data\new_trade_history.csv')
mum_baby_trade_history = pd.read_csv(r'.\data\mum_baby_trade_history.csv')

消费者行为分析

print(mum_baby_trade_history.groupby('cat1').sum())  # 查看根类别cat1 #[6 rows x 7 columns]
result1 = pd.pivot_table(mum_baby_trade_history, index='cat1', values='buy_mount', aggfunc=np.sum)
plt.figure(figsize=(7, 5))
plt.bar(x=['28', '38', '50008168', '50014815', '50022520', '122650008'],
        height=result1['buy_mount'])
plt.title("cat1类别销量")
plt.show()

由图可知,商品编号为28的销量最高,而50014815次之,而122650008的销量最低,应对此现状提高或减少生产量或者加大宣传力度。

不同性别用户的销售情况

data = pd.pivot_table(trade_history, index='gender', values='buy_mount', aggfunc=np.sum)
print(data)
plt.figure(figsize=(5, 5))
plt.pie(['718', '544', '43'],
        labels=['女', '男', '未知'],
        colors=['r', 'b', 'g'],
        autopct='%.2f%%')
plt.title("性别与购买数量的销售关系")
plt.show()

由图可知,婴幼儿为女孩的销售量较女孩更大一些,而未出生购买商品的用户占比很小,所以应该加大用户家婴幼儿是女孩的推广力度以及产品制造。

不同性别购买商品种类的关系

资源、代码、安装包等加企鹅裙:261823976##
data = pd.pivot_table(trade_history, index='cat1',
                         columns='gender',
                         values='buy_mount',
                         aggfunc=np.sum)
plt.figure(figsize=(12, 5))
plt.subplot(221)
plt.bar(x=['28', '38', '50008168', '50014815', '50022520', '122650008'],
        height=data[0], color='r')
plt.subplot(222)
plt.bar(x=['28', '38', '50008168', '50014815', '50022520', '122650008'],
        height=data[1], color='b')
plt.subplot(223)
plt.bar(x=['28', '38', '50008168', '50014815', '50022520', '122650008'],
        height=data[2], color='g')
plt.xlabel("商品种类")
plt.ylabel("销售数量")
plt.show()

销量与月份关系

mum_baby_trade_history["day"] = mum_baby_trade_history['day'].apply(lambda x:datetime.datetime.strptime(str(x),"%Y%m%d"))
mum_baby_trade_history['Month'] = mum_baby_trade_history.day.astype('datetime64[M]')  # 设置成月份形式
print(mum_baby_trade_history)
data_month = mum_baby_trade_history.groupby('Month', as_index=False)  # 按月份分类
data_month.buy_mount.sum()  # 按月份汇总
df = data_month.buy_mount.sum()  # 新建汇总列表
plt.figure(figsize=(20, 5))
plt.plot(df["Month"], df["buy_mount"])
plt.show()

分析波峰:在每年的10到11月份左右会有一个大波峰,每年的5月以及9月左右会有一个小波峰,在这段时间销量较同期会有一个明显的涨幅

推测1:节日因素,在5月有劳动节,母亲节;9月有中秋节;而是10月到11月左右有国庆节、万圣节、立冬、感恩节等节日,平台在这些节日可能绘有促销打折,这时随着价格降低需求量会增加,同时销售量也会增加。

推测2:双十一打折力度高,淘宝双十一是从2009年开始便存在的大型购物促销狂欢日,而又伴随着即将到来的春节假期,顾客可能进行囤货,结合两个因素导致需求量大幅上升,所以在11月前会出现一个大型的销量波峰。

结论:在5月与9月以及11月需要加大供货量,保证供需平衡。

分析波谷:每年的1月左右会出现一个明显的销量波谷,说明这段时间的销量较同期低。

推测:1月份正值春节,店铺休息,而开着的店铺肯定会抬高物价,而用户在11月进行囤货所以导致1月份的需求量减小,出现销量波谷。
结论:1月销量惨淡,需要考虑减少进货量的问题,适当降低物价拓宽销售渠道加大宣传力度。

用户复购率分析

data_du = mum_baby_trade_history[mum_baby_trade_history.duplicated('user_id')]  # 查看复购数据
print(data_du.info())
<class 'pandas.core.frame.DataFrame'>
Int64Index: 27 entries, 6527 to 29192
Data columns (total 7 columns):
 #   Column      Non-Null Count  Dtype 
---  ------      --------------  ----- 
 0   user_id     27 non-null     int64 
 1   auction_id  27 non-null     int64 
 2   cat_id      27 non-null     int64 
 3   cat1        27 non-null     int64 
 4   property    25 non-null     object
 5   buy_mount   27 non-null     int64 
 6   day         27 non-null     int64 
资源、代码、安装包等加企鹅裙:261823976##
dtypes: int64(6), object(1)
memory usage: 1.7+ KB
None

sale_fu = pd.pivot_table(data_du,index='cat1',values='buy_mount',aggfunc=np.sum)
print(sale_fu)
          buy_mount
cat1               
28                8
38                4
50008168         19
50014815          2
plt.figure(figsize=(5,5))
plt.bar(x=['50014815','38','28','50008168'],
        height=['2','4','8','19'])
ax = plt.gca()
ax.set_xlabel("商品分类")
ax.set_ylabel("销量")
plt.show()

共29971条订单记录而复购率仅为0.09%,用户粘性差,可能由于多种原因共同导致,其中可能包括产品质量差,客服服务态度差,售后保障差等多种原因。

商家必须要仔细查找更多原因来保证后续提高销售质量,提高用户的复购率。

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

足球视频AI(四)——队伍与裁判人员分类

一、基础概念 足球比赛中人员为&#xff1a;A队11人、B队11人、裁判&#xff0c;其中我们暂时不研究守门员。 需要将球场中的人员分类&#xff0c;并呈现在2D看板中。 1.1识别目标&#xff1a; 1&#xff09;球场中的白队 2&#xff09;球场中的蓝队 3&#xff09;球场中的…

剑指offer----C语言版----第九天

目录 1. 剪绳子 1.1 题目描述 1.2 基础知识 1.2.1 动态规划 1.2.2 贪婪算法 1.3 思路一&#xff1a;动态规划 1.4 思路二&#xff1a;贪婪算法 1.5 思路一的优化 1. 剪绳子 原题链接&#xff1a;剑指 Offer 14- I. 剪绳子 - 力扣&#xff08;LeetCode&#xff09;http…

无约束优化:Hessian-Free Optimization 拟牛顿类算法(BFGS,L-BFGS)

文章目录无约束优化&#xff1a;Hessian-Free Optimization 拟牛顿类算法&#xff08;BFGS&#xff0c;L-BFGS&#xff09;为什么要用拟牛顿算法割线方程严格凸且光滑函数的BFGS算法非凸但光滑函数的BFGS算法L-BFGS算法非凸非光滑函数的BFGS算法参考文献无约束优化&#xff1a;…

LInux僵尸进程的解决方法

文章目录僵尸进程是如何出现的&#xff1f;如何防止僵尸进程产生&#xff1f;使用wait函数使用waitpid函数阻塞等待非阻塞等待——轮询僵尸进程出现后如何解决&#xff1f;僵尸进程是如何出现的&#xff1f; 一个进程在退出后&#xff0c;操作系统会释放该进程对应的资源&…

网络舆情监测管理制度及处置机制,网络舆情监测服务项目实时方案?

舆情监测通常包括搜集、分析和报告舆论信息的过程。搜集信息的途径包括网络新闻、社交媒体、博客、论坛等&#xff0c;分析信息的方法包括自然语言处理、数据挖掘、模糊属性决策分析等。接下来TOOM舆情监测小编带您简单了解网络舆情监测管理制度及处置机制&#xff0c;网络舆情…

奈奎斯特采样定理(Nyquist)

采样定理在1928年由美国电信工程师H.奈奎斯特首先提出来的&#xff0c;因此称为奈奎斯特采样定理。1933年由苏联工程师科捷利尼科夫首次用公式严格地表述这一定理&#xff0c;因此在苏联文献中称为科捷利尼科夫采样定理。1948年信息论的创始人C.E.香农对这一定理加以明确地说明…

VirtualBox+Vagrant快速搭建linux虚拟环境

VirtualBoxVagrant快速搭建linux虚拟环境 1.下载安装VirtualBox 下载 Virtual Box 官网: https://www.virtualbox.org/ 2.BIOS 里修改设置开启虚拟化设备支持(f2, f10) 参考: https://jingyan.baidu.com/article/ab0b56305f2882c15afa7dda.html 3.安装 Virtual Box&#xff…

【自学Python】Windows Python交互式运行

Windows Python交互式运行 Windows Python交互式运行教程 安装好 Python 之后&#xff0c;Python 都会提供一个 Python 命令行工具&#xff0c;就叫 python。 python 命令行工具不仅能用于运行 Python 程序&#xff0c;也可作为一个交互式解释器&#xff0c;即开发者可以在该…

9种 分布式ID生成方式

一、为什么要用分布式ID&#xff1f; 在说分布式ID的具体实现之前&#xff0c;我们来简单分析一下为什么用分布式ID&#xff1f;分布式ID应该满足哪些特征&#xff1f; 1、什么是分布式ID&#xff1f; 拿MySQL数据库举个栗子&#xff1a; 在我们业务数据量不大的时候&#…

AcWing算法提高课:区间DP

两种实现方式 循环式 一般对于一维的DP问题可以应用。 for(len 1; len < n; len)for(l 1; l len-1 < n; l)r l len - 1;//枚举方案数记忆化搜索式 一般在二维DP中使用 循环也倒是可以&#xff0c;但是层数太多&#xff0c;所以使用记忆化进行实现。 常见策略 …

深入解读Netty 底层核心源码,全面分析Netty特新

前言 Netty 是一款基于 NIO&#xff08;非阻塞 I/O&#xff09;开发的网络框架&#xff0c;与传统 BIO 相比&#xff0c;它的并发性能得到了很大的提高&#xff0c;而且更加节省资源。Netty 不仅封装了 NIO 操作的很多细节&#xff1b;在设计上还基于灵活、可扩展的事件驱动模…

java学习day68(乐友商城)RabbitMQ及数据同步

今日目标&#xff1a; 了解常见的MQ产品 了解RabbitMQ的5种消息模型 会使用Spring AMQP 利用MQ实现搜索和静态页的数据同步 1.RabbitMQ 1.1.搜索与商品服务的问题 目前我们已经完成了商品详情和搜索系统的开发。我们思考一下&#xff0c;是否存在问题&#xff1f; 商品的…

Qt样式(qss)的几套配色方案

背景&#xff1a;之前写过有关qss的博客&#xff0c;记录了如何使用qt手册&#xff0c;以及在项目中如何使用qss的体验。经过实践&#xff0c;我归纳了自己需要的qss使用方法&#xff0c;使之尽量高效&#xff0c;容易维护。Qt样式&#xff08;qss&#xff09;手册小结&#xf…

工业数字孪生技术在钢铁企业中的应用展示

目前随着网络技术的发展&#xff0c;数字孪生技术已逐步应用于智慧工厂、智慧城市等领域。钢铁生产作为典型的工业流程制造场景&#xff0c;具备工艺复杂、物料交叉、生产节奏紧凑等特点。借助数字孪生技术仿真、虚实融合等能力&#xff0c;对钢铁生产过程的各个环节进行指导与…

SpringBoot+VUE前后端分离项目学习笔记 - 【14 SpringBoot和Vue实现用户登录】

前端代码 Login.vue 注意&#xff1a;el-form必须写 :model 否则无法使用表单校验功能 <el-form-item> 不能少 <template><div class"wrapper"><div style"margin: 200px auto; background-color: #fff; width: 350px; height: 300px; pa…

魔兽世界私服架设 服务器架设简易教程

今天早晨明杰终于把魔兽世界的私服搭建成功可以运行了。挺happy。记录一下搭建的全过程&#xff1a;1.先下载私服服务器端&#xff1a;从mangoscn.com下载大芒果ftp://www.mangoscn.com/TCCN-3.2.2-Trinity5749.exe从这个地址下载不需要注册&#xff0c;如果从mangoscn.com的网…

Python+Yolov5反光衣黄色马甲特征识别监测快速锁定目标人物体

程序示例精选 PythonYolov5反光衣识别 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 Yolov5比较Yolov4,Yolov3等其他识别框架&#xff0c;速度快&#xff0c;代码结构简单&#xff0c;识别效率高&#xff0…

计算机网络进阶 ---- MGRE ---- NHRP ---- 详解

一、MGRE&#xff08;多点GRE&#xff09;&#xff1a; 属于 NBMA 网络类型&#xff1b;在所有要连通的网络之间仅需要构建一个MA网段即可&#xff1b;且仅可以存在一个 固定的 IP地址&#xff0c;看作中心站点&#xff1b;其他分支站点可以是动态的 IP地址&#xff0c;节省成…

从recat源码角度看setState流程

setState setState() 将对组件 state 的更改排入队列批量推迟更新&#xff0c;并通知 React 需要使用更新后的 state 重新渲染此组件及其子组件。其实setState实际上不是异步&#xff0c;只是代码执行顺序不同&#xff0c;有了异步的感觉。 使用方法 setState(stateChange | u…

助力生产质量检验,基于YOLOV5实现香烟质量缺陷检测

生产质量环境的检验始终是一个热门的应用场景&#xff0c;在之前一些项目和文章中我也做过一些相关的事情&#xff0c;比如PCB电路板相关的&#xff0c;如下&#xff1a;《助力质量生产&#xff0c;基于目标检测模型MobileNetV2-YOLOv3-Lite实现PCB电路板缺陷检测》本质的目的就…