求解答:
#RFM分析(假设现在是2017/11/25)
from datetime import datetime
#最近一次购买距离现在的天数
data['date']=pd.to_datetime(data['date'])
recent_buy=data[data.behavior=='购买'].groupby('user_id')['date'].apply(lambda x: datetime(2017,12,25)-x.sort_values().iloc[-1]).reset_index().rename(columns={'date':'recent'})
recent_buy.recent=recent_buy.recent.map(lambda x: x.days)
#购买频率(购买次数)
fred_buy=data[data.behavior=='购买'].groupby('user_id').date.count().reset_index().rename(columns={'date':'fred'})
#rfm
recent_fred=pd.merge(recent_buy,fred_buy,on='user_id')
#为实现自动细分,将使用R和F变量的80%分位数
quantiles=recent_fred.quantile(q=[0.8])
recent_fred['R']=np.where(recent_fred['recent']<=int(quantiles.recent.values),2,1)
recent_fred['F']=np.where(recent_fred['fred']<=int(quantiles.fred.values),1,2)
recent_fred['rfm']=recent_fred.R.map(str)+recent_fred.F.map(str)
#打标签,时间越近次数越多越重要
labels = {'12':'流失客户','22': '明星客户','11':'次要客户','21':'新客户'}
recent_fred['labels']= recent_fred['rfm'].apply(lambda x: labels[x])
rfm=pd.DataFrame(recent_fred['labels'].value_counts())
plt.figure(figsize=(10,7))
plt.pie(rfm.values,labels=rfm.index,explode=(0.05,0,0,0),colors=['red','yellowgreen','gold','orange'],autopct='%1.1f%%',textprops={'fontsize':15})
plt.legend()
plt.axis('equal')
plt.title('客户类群占比',fontsize=18)