当前位置:首页 > 科技  > 软件

利用Python群组分析方法剖析客户行为

来源: 责编: 时间:2023-10-13 14:37:25 420观看
导读简介如今,企业有能力收集大量的数据。这些数据可以帮助企业制定更好的策略并了解其客户的行为。在这一点上,Cohort分析就发挥作用了。Cohort分析是一种了解客户行为或用户互动的强大工具,并为企业提供有价值的见解。在本

简介

如今,企业有能力收集大量的数据。这些数据可以帮助企业制定更好的策略并了解其客户的行为。在这一点上,Cohort分析就发挥作用了。Cohort分析是一种了解客户行为或用户互动的强大工具,并为企业提供有价值的见解。在本文中,将学习如何使用Python进行Cohort分析。mOa28资讯网——每日最新资讯28at.com

Cohort分析

Cohort分析是一种经常在市场营销、客户忠诚度、用户体验和产品开发等领域使用的数据分析技术。通过这种分析方法,我们可以详细了解特定时期内人群或群体的行为。Cohort用于识别具有相似特征或经历的人群或群体。mOa28资讯网——每日最新资讯28at.com

例如,对于电子商务业务,可以使用Cohort分析来监测不同的群体,比如客户群体、来自特定地区的群体或偏好特定产品类别的群体。通过这种分析,我们可以研究特定群体在一段时间内的行为和倾向。mOa28资讯网——每日最新资讯28at.com

应用Cohort分析

本文有一个由12个表组成的关系数据库。本文将在Python通过MS SQL从这个表中提取所需的特征。在进行必要的预处理操作后,本文将使数据适合进行分析。接下来从查看数据库开始。mOa28资讯网——每日最新资讯28at.com

本文需要两个特征。这两个特征是客户ID和订单日期。本文的目标是查看我们能够保留多少客户,并在其首次到达日期后的每个月基础上保留多长时间。mOa28资讯网——每日最新资讯28at.com

本文想要的特征包含在一个单独的表中。因此,在查询过程中,不需要从其他表中提取属性。然而,为了举例说明,假设本文将在两个表上工作,接下来使用MS SQL中的JOIN获取本文想要的特征。mOa28资讯网——每日最新资讯28at.com

SELECT * FROM ORDERS

图片图片mOa28资讯网——每日最新资讯28at.com

SELECT * FROM USERS

图片图片mOa28资讯网——每日最新资讯28at.com

SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID

图片图片mOa28资讯网——每日最新资讯28at.com

本文通过JOIN从USERS和ORDERS表中调用具有相同ID值的属性。现在,为了在Python中进行分析,本文将访问该数据库,在其中运行我们的查询,并将数据作为数据帧在我们的操作中使用。mOa28资讯网——每日最新资讯28at.com

首先,导入本文所需要的库。mOa28资讯网——每日最新资讯28at.com

import pandas as pdimport sqlalchemy as saimport urllibfrom datetime import datetime

在第二步中,本文使用urllib.parse.quote_plus函数来保护连接字符串免受环境因素的影响,并将连接信息写入这个将用于连接SQL Server数据库的字符串中。mOa28资讯网——每日最新资讯28at.com

params = urllib.parse.quote_plus("DRIVER={SQL Server};" "SERVER=DESKTOP-F3H252;" "DATABASE=E-COMMERCE;")

注:如果不知道服务器名称,可以通过查询"SELECT @@SERVERNAME"来找到它。mOa28资讯网——每日最新资讯28at.com

接下来,本文使用"SQLAlchemy (sa)"库创建与SQL Server数据库的连接。使用"sa.create_engine"函数,我们可以利用连接字符串和其他连接设置创建一个链接引擎。"odbc_connect"参数用于ODBC连接,并包含之前转换的连接字符串。mOa28资讯网——每日最新资讯28at.com

engine = sa.create_engine("mssql+pyodbc:///?odbc_cnotallow={}".format(params))

在下一步中,本文将创建一个SQL查询。我们使用查询"SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID"来获取我们想要的特征。mOa28资讯网——每日最新资讯28at.com

qry ="SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID"

我们通过"engine"对象建立数据库连接,并在"with"代码块中使用该连接。这将自动关闭连接。我们使用"con.execute(qry)"运行SQL查询并获取结果集(rs)。最后,我们将结果集转换为Pandas DataFrame。mOa28资讯网——每日最新资讯28at.com

with engine.connect() as con:    rs = con.execute(qry)    df = pd.DataFrame(rs)

图片图片mOa28资讯网——每日最新资讯28at.com

我们知道没有缺失数据,但在这一点上,让我们检查并消除它。mOa28资讯网——每日最新资讯28at.com

df.isnull().sum()
ID 0DATE_ 0dtype: int64

由于我们将按月进行工作,所以小时数对我们来说并不重要,所以我们首先要删除小时数,然后再删除天数。首先,我们将日期列(DATE_)转换为日期时间格式,然后只获取日期。mOa28资讯网——每日最新资讯28at.com

df['DATE_'] = pd.to_datetime(df['DATE_'])df['DATE_'] = df['DATE_'].dt.date

图片图片mOa28资讯网——每日最新资讯28at.com

本文的下一步行动是删除天数。接下来为此定义一个lambda函数。希望保留年份和月份的值。datetime(x.year, x.month, 1)将使用年份和月份信息创建一个新的日期对象,其中包含该月的第一天。mOa28资讯网——每日最新资讯28at.com

get_year_month = lambda x: datetime(x.year, x.month, 1)

接下来使用这个函数创建一个新的变量,并将新数据存储在'DATE_MONTH'列中。mOa28资讯网——每日最新资讯28at.com

df['DATE_MONTH'] = df['DATE_'].apply(get_year_month)

现在,本文将根据客户ID对要执行的流程进行分组,并通过创建'COHORT_MONTH'变量在这一列中保留每个客户的首次到达日期。mOa28资讯网——每日最新资讯28at.com

user_first_date = df.groupby('ID')['DATE_MONTH']df['COHORT_MONTH'] = user_first_date.transform('min')

图片图片mOa28资讯网——每日最新资讯28at.com

当我们查看所获得的值时,如果对第一个订单日期和其他订单日期进行评估,就可以很容易地找到差异。我们可以通过创建一个新的'COHORT_INDEX'变量,将差异保留在这一列中。mOa28资讯网——每日最新资讯28at.com

years_diff = df['DATE_MONTH'].dt.year - df['COHORT_MONTH'].dt.yearmonths_diff = df['DATE_MONTH'].dt.month -df['COHORT_MONTH'].dt.monthdf['COHORT_INDEX'] = years_diff * 12 + months_diff + 1

接下来计算每个首次到达日期的活跃客户的月度数量。通过分组,本文创建了一个名为cohort_data的数据帧,其中包含了每个月首次到达的唯一客户数量。mOa28资讯网——每日最新资讯28at.com

grouping_count = df.groupby(['COHORT_MONTH', 'COHORT_INDEX'])cohort_data = grouping_count['ID'].apply(pd.Series.nunique)cohort_data = cohort_data.reset_index()cohort_data.head()

图片图片mOa28资讯网——每日最新资讯28at.com

本文将cohort_data数据帧整理到数据透视表中,并创建一个名为cohort_user_counts的新数据帧。该数据帧将包含每个群体的月活跃客户数量。mOa28资讯网——每日最新资讯28at.com

本文将计算每个客户的活跃百分比。通过将每个月群体中的客户数除以初始客户数来实现此目的。mOa28资讯网——每日最新资讯28at.com

cohort_sizes = cohort_user_counts.iloc[:,0]retention = cohort_user_counts.divide(cohort_sizes, axis=0)retention.index = retention.index.strftime('%m-%Y')

图片图片mOa28资讯网——每日最新资讯28at.com

最后,本文将在热图上可视化retention数据帧。mOa28资讯网——每日最新资讯28at.com

sns.set(style = 'white')plt.figure(figsize = (15, 6))plt.title('Cohort: Retention rate by month')sns.heatmap(            retention            ,cmap = plt.cm.Reds            ,annot = True            ,fmt = '.0%'            )plt.xlabel("Ongoing months"plt.ylabel("First arrival date")plt.show()

图片图片mOa28资讯网——每日最新资讯28at.com

如上所述,图表中的百分比表达的是活跃率。从中可以推断出的内容应该回答了我们可以保留客户多长时间的问题。mOa28资讯网——每日最新资讯28at.com

在这篇文章中,我们提到了Cohort分析,并制作了一个可以轻松使用的应用程序。mOa28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-13337-0.html利用Python群组分析方法剖析客户行为

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 性能工程实践

下一篇: 如何解决Maven依赖冲突?

标签:
  • 热门焦点
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top