机器学习-数据科学库 14 用户数据分析案例

【数据分析】用户消费行为数据分析 用户消费行为分析的意义在于帮助企业更深入地了解用户需求和行为特征,从而优化营销策略、产品设计和客户关系管理,而应用场景涵盖电子商务、零售业、金融服务、餐饮业、旅游酒店、游戏行业、健康医疗等多个领域。 阅读详情

数据准备

参考:https://github.com/CamDavidsonPilon/lifetimes/blob/master/lifetimes/datasets/CDNOW_master.txt

字段含义:

  • user_id :用户ID
  • order_dt : 购买日期
  • order_product : 购买数量
  • order_amount : 购买金额
# coding=utf8

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

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

# 读取数据
df = pd.read_csv('./CDNOW_master.txt',
                 header=None,

                 # "\s+"则表示匹配任意多个上面的字符 *
                 sep="\s+",

                 # 使用指定索引
                 names=['user_id', 'order_dt', 'order_product', 'order_amount'])
print(df.head(5))
print(df.info())

# 将 order_dt 转换成时间序列
df['order_dt'] = pd.to_datetime(df['order_dt'], format='%Y%m%d')
print(df.info())
print(df.describe())

# 类型转换:在源数据中添加一列表示月份:astype(datetime64[‘M’])
# df["month"] = df["order_dt"].dt.to_period('M')
df["month"] = df["order_dt"].values.astype("datetime64[M]")
print(df.head())
print("*" * 100)

数据分析

按月对数据分析

# 按月对数据分析

# 用户每月花费的总金额
plt.figure(figsize=(8, 5))
plt.plot(df.groupby(by='month')['order_amount'].sum())
plt.xlabel('order_dt')
plt.ylabel('sum of amount')
plt.title('用户每月花费的总金额')
plt.legend()

# 所有用户每月的产品购买数量
plt.figure(figsize=(8, 5))
plt.plot(df.groupby(by='month')['order_product'].sum())
plt.xlabel('order_dt')
plt.ylabel('sum of amount')
plt.title('所有用户每月的产品购买数量')
plt.legend()

# 所有用户每月消费的总次数
plt.figure(figsize=(8, 5))
plt.plot(df.groupby(by='month')['user_id'].sum())
plt.xlabel('order_dt')
plt.ylabel('sum of amount')
plt.title('所有用户每月消费的总次数')
plt.legend()

# 每月的消费人数
plt.figure(figsize=(8, 5))
plt.plot(df.groupby(by='month')['user_id'].nunique())
plt.xlabel('order_dt')
plt.ylabel('sum of amount')
plt.title('每月的消费人数')
plt.legend()

在这里插入图片描述

用户个体消费数据分析

# 用户个体消费数据分析

# 所有用户消费总金额和消费总购买量的统计描述
print(df['order_product'].sum())
print(df['order_amount'].sum())
print("*" * 100)

# 用户维度消费金额和消费产品数量的散点图
user_amount = df.groupby(by='user_id')['order_amount'].sum()
user_product = df.groupby(by='user_id')['order_product'].sum()
plt.figure(figsize=(8, 8))
plt.scatter(user_product, user_amount)
plt.xlabel('product')
plt.ylabel('amount')
plt.title('用户维度消费金额和消费产品数量的散点图')

# 用户维度消费总金额的分布直方图(amount在1000之内)
order_amount_1000 = df.groupby(by='user_id').sum().query('order_amount <= 1000')['order_amount']
plt.figure(figsize=(8, 8))
plt.hist(order_amount_1000, bins=50)
plt.title('用户维度消费总金额的分布直方图(amount在1000之内)')

# 用户维度消费的总数量的分布直方图(消费商品的数量在100次之内的分布)
user_product_100 = df.groupby(by='user_id').sum().query('order_product <= 100')['order_product']
plt.figure(figsize=(8, 8))
plt.hist(user_product_100, bins=30)
plt.title('用户维度消费的总数量的分布直方图(消费商品的数量在100次之内的分布)')

在这里插入图片描述

用户消费行为分析

# 用户消费行为分析

# 用户第一次消费的月份分布,和人数统计
# 月份分布
plt.figure(figsize=(8, 8))

# 用户消费的最小值就是用户首次消费的月份
# value_counts() 用来统计 Series 中不同人数出现的次数
df.groupby(by='user_id')['month'].min().value_counts().plot()
df.groupby(by='user_id')['month'].max().value_counts().plot()
plt.title('用户第一次和最后一次消费的月份分布')

# 新老客户的占比
# agg 用于将分组后的结果进行多种不同形式的聚合操作:uid 分组后,用户维度购买时间的最大最小
first_last_order_dt = df.groupby(by='user_id')['order_dt'].agg(['min', 'max'])
print(first_last_order_dt.head(5))
print("*" * 100)

# True:只消费一次=新用户  False:消费多次=老用户
print((first_last_order_dt['min'] == first_last_order_dt['max']).value_counts())

# 求出每个用户的总购买量和总消费金额and最后一次消费的时间的表格rfm
# R 表示客户最近一次交易的时间间隔
# F 表示客户购买的商品数量 F 越大,表示客户交易越频繁,反之表示客户交易不够活跃
# M 表示客户交易的金额 M 越大,表示客户价值越高,反之价值越低
rfm = df.groupby(by='user_id').sum()
rfm['R'] = df.groupby(by='user_id')['order_dt'].max()

# 时间间隔 = 所有时间的最大值 - 客户最后一次交易的最大值
rfm['R'] = df['order_dt'].max() - rfm['R']

# np.timedelta64(1,'D'): 取出days
rfm['R'] = rfm['R'] / np.timedelta64(1, 'D')
rfm.columns = ['F', 'M', 'R']


# rfm分层算法
def rfm_func(x):
    # 存储的是三个字符串形式的0或者1
    # -6.122656	-94.310426	177.778362  ==》 '0'  '0'  '1'
    level = x.map(lambda x: '1' if x >= 0 else '0')
    label = level['R'] + level.F + level.M  # '100'
    d = {
        '111': '重要价值客户',
        '011': '重要保持客户',
        '101': '重要挽留客户',
        '001': '重要发展客户',
        '110': '一般价值客户',
        '010': '一般保持客户',
        '100': '一般挽留客户',
        '000': '一般发展客户',
    }
    result = d[label]  # d['100']
    # result ==》 '一般挽留客户'
    return result


# df.apply(func) :apply是DataFrame的运算工具  可以对df中的行或列进行某种func形式的运算
rfm['label'] = rfm.apply(lambda x: x - x.mean(), axis=0).apply(rfm_func, axis=1)
print(rfm.head(5))
print("*" * 100)

在这里插入图片描述

               min        max
user_id                      
1       1997-01-01 1997-01-01
2       1997-01-12 1997-01-12
3       1997-01-02 1998-05-28
4       1997-01-01 1997-12-12
5       1997-01-01 1998-01-03
****************************************************************************************************
True     12054
False    11516
dtype: int64
  rfm = df.groupby(by='user_id').sum()
          F       M      R   label
user_id                           
1         1   11.77  545.0  一般挽留客户
2         6   89.00  534.0  一般挽留客户
3        16  156.46   33.0  重要保持客户
4         7  100.50  200.0  一般发展客户
5        29  385.61  178.0  重要保持客户
****************************************************************************************************

用户的生命周期

# 用户的生命周期

# 统计每个用户每个月的消费次数
user_month_order_count = df.pivot_table(index='user_id', values='order_dt', aggfunc='count', columns='month',
                                        fill_value=0)
print(user_month_order_count.head(5))
print("*" * 100)

# 统计出每个用户每个月是否消费,消费记录为1 否则为0
df_purchase = user_month_order_count.applymap(lambda x: 1 if x >= 1 else 0)
print(df_purchase.head(5))
print("*" * 100)


# 对每月得用户活跃成分进行用户划分
def active_status(data):
    status = []  # 某个用户每一个月的活跃度

    for i in range(18):

        # 若本月没 有消费
        if data[i] == 0:
            if len(status) > 0:
                if status[i - 1] == 'unreg':
                    status.append('unreg')
                else:
                    status.append('unactive')
            else:
                status.append('unreg')

        # 若本月消费
        else:
            if len(status) == 0:
                status.append('new')
            else:
                if status[i - 1] == 'active':
                    status.append('return')
                elif status[i - 1] == 'unreg':
                    status.append('new')
                else:
                    status.append('active')
    return status


pivoted_status = df_purchase.apply(active_status, axis=1)
print(pivoted_status.head(5))
print("*" * 100)
df_purchase_new = pd.DataFrame(data=pivoted_status.values.tolist(),
                               index=df_purchase.index,
                               columns=df_purchase.columns)
print(df_purchase_new.head(5))
print("*" * 100)

# 每月【不同活跃】用户的计数
monthly_active = df_purchase_new.apply(lambda x:pd.value_counts(x)).fillna(0).T
print(monthly_active)
               min        max
user_id                      
1       1997-01-01 1997-01-01
2       1997-01-12 1997-01-12
3       1997-01-02 1998-05-28
4       1997-01-01 1997-12-12
5       1997-01-01 1998-01-03
****************************************************************************************************
True     12054
False    11516
dtype: int64
/Users/eddie/PycharmProjects/pythonProject/main.py:121: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.
  rfm = df.groupby(by='user_id').sum()
          F       M      R   label
user_id                           
1         1   11.77  545.0  一般挽留客户
2         6   89.00  534.0  一般挽留客户
3        16  156.46   33.0  重要保持客户
4         7  100.50  200.0  一般发展客户
5        29  385.61  178.0  重要保持客户
****************************************************************************************************
《Python 机器学习库的璀璨星空》 Python 的机器学习库在机器学习领域发挥着重要的作用。它们为数据处理、模型训练和评估等提供了强大的支持,使得机器学习任务变得更加简单和高效。随着机器学习技术的不断发展,Python 的机器学习库也将不断完善和发展,为更多的机器学习应用提供支持。 阅读详情

相关推荐

机器学习数据科学库--数据分析流程,matplotlib

机器学习数据科学库--第一天数据分析流程matplotlib 数据分析流程 #mermaid-svg-Xwj0XDykfPec1fIv .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Xwj0XDykfPec1fIv .label text{fill:#333}#mermaid-svg-Xwj0XDykfPec1

WslWslYYX的博客 201

项目实战--用户消费数据分析

文章目录引入包一、数据预处理二、按月对数据分析三、用户个体消费数据分析四、用户消费行为分析五、用户的生命周期 引入包 本项目所用数据为【密码:pfj6】:CDNOW_master.txt import numpy as np import pandas as pd from pandas import DataFrame,Series import matplotlib.pyplot as plt # CDNOW_master.txt # 支持中文 plt.rcParams['font.sans-s

HG0724的博客 1万+

Python优化问题解决方案库 - insolver 0.4.14

本文还有配套的精品资源,点击获取 简介: insolver 是一个专门为Python 3设计的库,版本0.4.14,适用于所有支持Python 3的平台。该库通过 whl 文件格式简化了安装过程,并且可以通过 pip 工具轻松安装。库的具体功能虽未详细描述,但据命名推测可能与解决优化问题或提供决策分析工具有关。此外,Python作为...

weixin_34945060的博客 1198

FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated解决方法

如何解决FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function ,警告解决办法

我的个人博客 1万+

CDNOW_master.txt

用python分析消费者行为

cd-数据集

Python相关实用技巧03:14个对数据科学最有用的Python库

Python相关实用技巧03:14个对数据科学最有用的Python库1 Pandas2 NumPy3 SciPy4 Matplotlib5 Seaborn6 Plotly7 Scikit Learn8 TensorFlow9 Keras10 Statsmodels11 Spacy12 Bokeh13 Gensim14 NLTK Python一直以来都是数据科学家的宠儿。与云计算、大数据、人工智能、...

weixin_41961559的博客 1083

数据分析-77-CDNow网站用户消费行为分析(包含代码和数据)

CDNow曾经是一家在线音乐零售平台,后被德国波泰尔斯曼娱乐集团公司出资收购,其资产总价值在最辉煌时曾超过10亿美元。本文主要通过分析CDNow网站的用户购买明细来分析该网站的用户消费行为,使运营部门在营销时更加具有针对性,从而节省成本,提升效率。

翻译:最令人印象深刻的YouTube频道,可让您学习AI,机器学习和数据科学

说明 数据科学是一个多学科领域,专注于数据分析和机器学习。例如,这项工作可以提供给Web应用程序,但是数据科学家的工作是分析和预测建模。 该工作报告2020年的未来,同时看着日益战略和日益冗余岗位版显示全行业的相似之处。 对下一个未来的需求不断增长的领导者包括数据分析师和数据科学家,人工智能和机器学习专家,机器人工程师和数字转换专家。这些是不断扩大的知识领域,在社会中发挥着巨大作用。 在过去的几年中,我选择了YouTube上使用次数最多的最佳AI,机器学习和数据科学频道。 您仍然可以使用这个疯狂的2020年

AI架构师易筋 2112

别再自己写组件了!用uni-app的midButton属性5分钟搞定中间凸起TabBar(H5/小程序通用)

本文详细介绍了uni-app官方提供的midButton属性,帮助开发者5分钟内实现中间凸起的TabBar效果,无需编写繁琐的自定义组件代码。该方案兼容H5和微信小程序平台,配置简单且维护成本低,大幅提升开发效率和性能表现。

weixin_30431445的博客 348

安装VMware,出现没有虚拟网络适配器的问题

安装VMware,出现没有虚拟网络适配器的问题

Young_Harry的博客 1万+

收藏! 38个Python数据科学顶级库

这篇文章中包括的类别,我们认为这些类别考虑了通用的数据科学库,即那些可能被数据科学领域的从业人员用于广义的,非神经网络的,非研究性工作的库:数据-用于数据管理,处理和其他处理的库数学-虽然许多库都执行数学任务,但这个小型库却专门这样做机器学习-自我解释;不包括主要用于构建神经网络或用于自动化机器学习过程的库自动化机器学习-主要用于自动执行与机器学习相关的过程的库数据可视化...

数据分析 883

轴承寿命预测实战:手把手教你用IEEE PHM2012数据集训练模型(附Python代码)

本文详细介绍了如何利用IEEE PHM2012数据集构建轴承剩余寿命预测模型,从数据预处理、特征工程到LSTM模型训练与部署,提供了完整的Python代码实现。通过实战案例,帮助读者掌握预测性维护中的关键技术,提升工业设备的运行安全与效率。

weixin_29186249的博客 313

14个数据分析和机器学习项目!附数据集

大数据文摘出品来源:medium编译:张大笔茹、夏雅薇对于那些对数据,数据分析或数据科学感兴趣的人,提供一份可以利用业余时间完成的数据科学项目清单,一共14个!项目分为三种类型:可视化...

机器学习算法那些事 2399

arXiv订阅进阶玩法:除了邮件,还能用RSS和Python脚本打造你的专属论文追踪器

本文介绍了arXiv订阅的进阶玩法,教你如何通过RSS和Python脚本打造个性化的论文追踪器。突破传统邮件订阅的局限,实现实时更新、精准过滤和自动化管理,提升科研效率。特别适合需要高效追踪最新研究进展的学者和开发者。

weixin_26757925的博客 627

axi时序图_(AXI)握手协议(pvld/prdy或者valid-ready)中ready打拍技巧

内容提要ready打拍的问题用FIFO的思路去解决用Buffer的思路去解决问题提出:ready时序如何优化?在valid/ready 握手协议中,valid 与 data的时序优化比较容易理解,(不熟悉valid/ready协议或者valid打拍方法的)大家可以参考上次推送(握手协议(pvld/prdy或者valid-ready或AXI)中Valid及data打拍技巧)。 但是有时候,关键路径是...

weixin_29763641的博客 3327

Python数据分析库比较最佳实践:选择适合你的数据分析库的常用技

Dask还支持自定义计算任务,你可以编写任意的Python函数并在Dask中并行执行。# 定义一个自定义函数# 应用自定义函数通过这些示例,你可以看到Dask在处理大规模数据时的强大能力。无论是读取大文件、并行计算还是自定义计算,Dask都能提供高效的支持。

master_chenchen的博客 1202

我的二进制漏洞挖掘学习路线

漏洞挖掘也分好多方向:浏览器漏挖,虚拟化,iot,车联网,应用安全等。而且也要区分一下平台,Linux,Android,Windows,还有一些其他的系统。在基础知识拿捏以后,Windows下如OD,windbg,x64dbg。IDA,GDB要会并联调。然后需要了解一下漏洞的知识,漏洞利用的知识。可以从复现漏洞,CTF来学习,学习完之后就可以通过审计源码或者反汇编二进制程序来挖掘。然后就是练就行了,多关注一下最新安全消息,安全漏洞。

qq_36918532的博客 4945

14天数据分析与机器学习实践之Day03——可视化库matpltlib应用总结

14天数据分析与机器学习实践之Day02——可视化库matpltlib应用总结 折线图绘制 基本的图 创建画布并展示 import matplotlib.pyplot as plt plt.plot()#创建画布 plt.show()#展示 取出前12个数据 以DATE为x轴以VALUE为y轴 first_twelve = unrate[0:12] plt.plot(first_twelve['DATE'], first_twelve['VALUE']) plt.show() 将坐标轴调斜 横轴旋转

qq_45817449的博客 2296

手把手教你排查I2C通信故障:当上拉电阻配置不当会发生什么?

本文深入解析I2C通信中上拉电阻配置不当导致的常见故障,包括波形畸变和通信失败现象。通过示波器波形分析和系统化解决方案,帮助工程师快速诊断和优化I2C总线性能,特别适用于嵌入式系统和智能设备开发场景。

weixin_33725722的博客 341

ROS2入门到精通—— ROS2实战专栏(实时更新)

Nav2专栏介绍

BigDavid123的博客 2375

数据科学和 ML 领域常用的 Python 库

新媒体管家 点击上方“程序员大咖”,选择“置顶公众号” 关键时刻,第一时间送达! Python 对于数据科学家来说几乎是一项必备技能。正如你看到的那样,很多数据科学家的岗位要求具备 Python 编程的能力。这篇文章将会针对数据科学介绍几种常用的 Python 包。在与数据挖掘、机器学习以及数据分析相关的项目中,这些 Python 包通常会得到广泛应用。

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 701

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

视频教程-python数据分析与机器学习实战【2019新版】-机器学习

python数据分析与机器学习实战【2019新版】 计算机博士,专注于机器学...

weixin_29453623的博客 602

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

14张速查表,带你玩转python数据科学

Python基础、导入数据、Jupyter Notebook、Numpy基础、Matplotlib绘图、Pandas基础和进阶、Scikit-Learn、Keras当我们学一些具体操作的...

数据分析 1031

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spark 数据科学(一)

原文:zh.annas-archive.org/md5/D6F94257998256DE126905D8038FBE11 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 在这个智能时代,数据分析是维持和促进业务增长的关键。每家企业都在尝试尽可能利用他们的数据,借助各种数据科学工具和技术沿着分析成熟度曲线前进。数据科学需求的突然增加是数据科学家短缺的明显原因。很难满足市场需求,因为独角兽数据科学家是统计学、机器学习、数学建模以及编程方面的专家。 独角兽数据科学家的可用性只会随着市场需求的增加而减少

龙哥盟 733
上一篇: 机器学习-数据科学库 13 政治献金数据案例
下一篇: 机器学习中的数学基础 1
eddiechen10081
博客等级 码龄11年 1粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值