品牌营销策划岗位职责,网络优化怎么自己做网站,郑州怎么做外贸公司网站,在线 建站单页面网站带后台大家好#xff0c;如今的企业有能力收集大量的数据#xff0c;这些数据可以帮助企业制定更好的策略并了解其客户的行为。Cohort分析可以在其中发挥作用#xff0c;Cohort分析是一种了解客户行为或用户互动的强大工具#xff0c;并为企业提供有价值的见解#xff0c;本文中…大家好如今的企业有能力收集大量的数据这些数据可以帮助企业制定更好的策略并了解其客户的行为。Cohort分析可以在其中发挥作用Cohort分析是一种了解客户行为或用户互动的强大工具并为企业提供有价值的见解本文中将介绍如何使用Python进行Cohort分析。
Cohort分析
Cohort分析是一种经常在市场营销、客户忠诚度、用户体验和产品开发等领域使用的数据分析技术。通过这种分析方法我们可以详细了解特定时期内人群或群体的行为Cohort用于识别具有相似特征或经历的人群或群体。
例如对于电子商务业务可以使用Cohort分析来监测不同的群体比如客户群体、来自特定地区的群体或偏好特定产品类别的群体。通过这种分析我们可以研究特定群体在一段时间内的行为和倾向。
应用Cohort分析
本文有一个由12个表组成的关系数据库将在Python通过MS SQL从这个表中提取所需的特征。进行必要的预处理操作后将使用数据适合进行分析。
分析中需要两个特征分别是客户ID和订单日期目标是查看能够保留多少客户并在其首次到达日期后的每个月基础上保留多长时间。
我们所想要的特征包含在一个单独的表中因此在查询过程中不需要从其他表中提取属性。为了举例说明假设将在两个表上工作接下来使用MS SQL中的JOIN获取本文想要的特征。
SELECT * FROM ORDERSSELECT * FROM USERSSELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID O.ID通过JOIN从USERS和ORDERS表中调用具有相同ID值的属性为了在Python中进行分析将访问该数据库在其中运行我们的查询并将数据作为数据帧在我们的操作中使用。
首先导入本文所需要的库
import pandas as pd
import sqlalchemy as sa
import urllib
from datetime import datetime在第二步中使用urllib.parse.quote_plus函数来保护连接字符串免受环境因素的影响并将连接信息写入这个将用于连接SQL Server数据库的字符串中。
params urllib.parse.quote_plus(DRIVER{SQL Server};SERVERDESKTOP-F3H252;DATABASEE-COMMERCE;)注如果不知道服务器名称可以通过查询SELECT SERVERNAME来找到它。 接下来使用SQLAlchemy (sa)库创建与SQL Server数据库的连接使用sa.create_engine函数我们可以利用连接字符串和其他连接设置创建一个链接引擎。odbc_connect参数用于ODBC连接并包含之前转换的连接字符串。
engine sa.create_engine(mssqlpyodbc:///?odbc_connect{}.format(params))在下一步中将创建一个SQL查询使用查询SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID O.ID来获取我们想要的特征。
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。
with engine.connect() as con:rs con.execute(qry)df pd.DataFrame(rs)df.isnull().sum()ID 0
DATE_ 0
dtype: int64
由于我们将按月进行工作所以小时数对我们来说并不重要所以我们首先要删除小时数然后再删除天数。首先我们将日期列DATE_转换为日期时间格式然后只获取日期。
df[DATE_] pd.to_datetime(df[DATE_])
df[DATE_] df[DATE_].dt.date下一步行动是删除天数接下来为此定义一个lambda函数希望保留年份和月份的值。datetime(x.year, x.month, 1)将使用年份和月份信息创建一个新的日期对象其中包含该月的第一天。
get_year_month lambda x: datetime(x.year, x.month, 1)接下来使用这个函数创建一个新的变量并将新数据存储在DATE_MONTH列中。
df[DATE_MONTH] df[DATE_].apply(get_year_month)将根据客户ID对要执行的流程进行分组并通过创建COHORT_MONTH变量在这一列中保留每个客户的首次到达日期。
user_first_date df.groupby(ID)[DATE_MONTH]
df[COHORT_MONTH] user_first_date.transform(min)当我们查看所获得的值时如果对第一个订单日期和其他订单日期进行评估就可以很容易地找到差异可以通过创建一个新的COHORT_INDEX变量将差异保留在这一列中。
years_diff df[DATE_MONTH].dt.year - df[COHORT_MONTH].dt.year
months_diff df[DATE_MONTH].dt.month -df[COHORT_MONTH].dt.month
df[COHORT_INDEX] years_diff * 12 months_diff 1接下来计算每个首次到达日期的活跃客户的月度数量通过分组创建名为cohort_data的数据帧其中包含了每个月首次到达的唯一客户数量。
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()进而将cohort_data数据帧整理到数据透视表中并创建一个名为cohort_user_counts的新数据帧该数据帧将包含每个群体的月活跃客户数量计算每个客户的活跃百分比通过将每个月群体中的客户数除以初始客户数来实现此目的。
cohort_sizes cohort_user_counts.iloc[:,0]
retention cohort_user_counts.divide(cohort_sizes, axis0)
retention.index retention.index.strftime(%m-%Y)最后在热图上可视化retention数据帧
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()如上所述图表中的百分比表达的是活跃率从中可以推断出的内容回答了可以保留客户多长时间的问题。