网站被搜索引擎收录,wordpress需要ftp登录,上市公司中 哪家网站做的好,专业做灰色关键词排名每个电子商务数据分析师必须掌握的一项数据聚类技能
如果你是一名在电子商务公司工作的数据分析师#xff0c;从客户数据中挖掘潜在价值#xff0c;来提高客户留存率很可能就是你的工作任务之一。
然而#xff0c;客户数据是巨大的#xff0c;每个客户的行为都不一样。20…每个电子商务数据分析师必须掌握的一项数据聚类技能
如果你是一名在电子商务公司工作的数据分析师从客户数据中挖掘潜在价值来提高客户留存率很可能就是你的工作任务之一。
然而客户数据是巨大的每个客户的行为都不一样。2020年3月收购的客户A与2020年5月收购的客户B表现出不同的行为。因此有必要将客户分为不同的群组然后调查每个群组在一段时间内的行为。这就是所谓的同期群分析。
同期群分析是了解一个特殊客户群体在一段时间内的行为的数据分析技术。
在这篇文章中不会详细介绍同期群分析的理论。这篇文章更多的是告诉你如何将客户分成不同的群组并在一段时间内观察每个群组的留存率。
导入数据和python库
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df pd.read_csv(sales_2018-01-01_2019-12-31.csv)
df 技术交流
技术要学会分享、交流不建议闭门造车。一个人走的很快、一堆人可以走的更远。
本文来自技术群粉丝分享整理文章源码、数据、技术交流均可加交流群获取群友已超过2000人添加时最好的备注方式为来源兴趣方向方便找到志同道合的朋友。 方式①、添加微信号pythoner666备注来自CSDN 备注来意 方式②、微信搜索公众号Python学习与数据挖掘后台回复加群 分离新老客户
first_time df.loc[df[customer_type] First-time,]
final df.loc[df[customer_id].isin(first_time[customer_id].values)] 在这里不能简单地选择df.loc[df[customer_type]]因为在这个数据中在customer_type列下First_time指的是新客户而Returning指的是老客户。因此如果我在2019年12月31日第一次购买数据会显示我在2019年12月31日是新客户但在我第二次、第三次…时是返回客户。同期群分析着眼于新客户和他们的后续购买行为。因此如果我们简单地使用df.loc[df[customer_type]First-time,]我们就会忽略新客户的后续购买这不是分析同期群行为的正确方法。
因此这里所需要做的是首先创建一个所有第一次的客户列表并将其存储为first_time。然后从原始客户数据框df中只选择那些ID在first_time客户组内的客户。通过这样做我们可以确保我们获得的数据只有第一次的客户和他们后来的购买行为。
现在我们删除customer_type列因为它已经没有必要了。同时将日期列转换成正确的日期时间格式
final final.drop(columns [customer_type])
final[day] pd.to_datetime(final[day], dayfirstTrue) 按客户ID排序然后是日期
final final.drop(columns [customer_type])
final[day] pd.to_datetime(final[day], dayfirstTrue) 定义一些函数
def purchase_rate(customer_id): purchase_rate [1] counter 1 for i in range(1,len(customer_id)): if customer_id[i] ! customer_id[i-1]: purchase_rate.append(1) counter 1 else: counter 1 purchase_rate.append(counter) return purchase_rate
def join_date(date, purchase_rate): join_date list(range(len(date))) for i in range(len(purchase_rate)): if purchase_rate[i] 1: join_date[i] date[i] else: join_date[i] join_date[i-1] return join_date
def age_by_month(purchase_rate, month, year, join_month, join_year): age_by_month list(range(len(year))) for i in range(len(purchase_rate)): if purchase_rate[i] 1: age_by_month[i] 0 else: if year[i] join_year[i]: age_by_month[i] month[i] - join_month[i] else: age_by_month[i] month[i] - join_month[i] 12*(year[i]-join_year[i]) return age_by_month purchase_rate函数将决定这是否是每个客户的第二次、第三次、第四次购买。 join_date函数允许确定客户加入的日期。 age_by_month函数提供了从客户当前购买到第一次购买的多少个月。
现在输入已经准备好了接下来创建群组。
创建群组
final[month] pd.to_datetime(final[day]).dt.month
final[Purchase Rate] purchase_rate(final[customer_id])
final[Join Date] join_date(final[day], final[Purchase Rate])
final[Join Date] pd.to_datetime(final[Join Date], dayfirstTrue)
final[cohort] pd.to_datetime(final[Join Date]).dt.strftime(%Y-%m)
final[year] pd.to_datetime(final[day]).dt.year
final[Join Date Month] pd.to_datetime(final[Join Date]).dt.month
final[Join Date Year] pd.to_datetime(final[Join Date]).dt.year final[Age by month] age_by_month(final[Purchase Rate], final[month], final[year], final[Join Date Month], final[Join Date Year]) cohorts final.groupby([cohort,Age by month]).nunique()
cohorts cohorts.customer_id.to_frame().reset_index() # convert series to frame
cohorts pd.pivot_table(cohorts, values customer_id,index cohort, columns Age by month)
cohorts.replace(np.nan, ,regexTrue) **如何解释这个表格**以群组2018-01为例。在2018年1月有462名新客户。在这462人中121名客户在2018年2月回来购买125名在2018年3月购买以此类推。 转换为群组百分比
for i in range(len(cohorts)-1): cohorts[i1] cohorts[i1]/cohorts[0]
cohorts[0] cohorts[0]/cohorts[0] 可视化
cohorts_t cohorts.transpose()
cohorts_t[cohorts_t.columns].plot(figsize(10,5))
sns.set(stylewhitegrid)
plt.figure(figsize(20, 15))
plt.title(Cohorts: User Retention)
sns.set(font_scale 0.5) # font size
sns.heatmap(cohorts, maskcohorts.isnull(),
cmapBlues,
annotTrue, fmt.01%)
plt.show() 就这样吧。希望你们喜欢并从这篇文章中获得一些对你有用的东西。