开始于:2020-02-19
目前在做消费行为的学习项目。以秦路
的为标准。
目前发现了几个问题:
一、apply函数使用之后就是Series,而非Pivot__table
def purchase_return(data):
status=[]
for i in range(17):
if data[i]==1:
if data[i+1]==1:
status.append(1)
if data[i+1]==0:
status.append(0)
else:
status.append(np.NaN)
status.append(np.NaN)
return status
pivoted_amount_return=pivoted_purchase.apply(purchase_return,axis=1)
pivoted_amount_return.head()
这段代码之后,发现apply作用于pivot_table或者dataframe之后的出来的是一个Series,所以之后的画图是无法画出来的。
结果如下:
所以对于后来生成的这个变量,直接再次构造dataframe就好了。
#所以还是需要构造一个dataframe
pivoted_amount_return_l=[line for line in pivoted_amount_return]
#利用先前生成的pivoted_amount透视表的index和columns
pivoted_return_df=pd.DataFrame(pivoted_amount_return_l,index=pivoted_amount.index,columns=pivoted_amount.columns)
pivoted_return_df.head()
二、帕累托图
在做user_amount帕累托图的时候,首先可以对amount进行倒叙排列,再求出占比,最后在进行绘制图像。
user_amount=df.groupby('user_id').order_amount.sum().sort_values(ascending=False).reset_index() #这里先按照大到小排序
user_amount['amount_cumsum']=user_amount.order_amount.cumsum()
amount_total=user_amount.amount_cumsum.max()
user_amount['prop']=user_amount.amount_cumsum.apply(lambda x: x/amount_total)
三、pd.cut
bin=[0,3,7,15,30,60,90,180,365]
user_purchase_retention['date_diff_bin']=pd.cut(user_purchase_retention.
date_diff,bins=bin)
user_purchase_retention.head(10)
在这里输出的结果是剔除掉所有为NA的结果了的,所以在后面画柱状图的时候,要除以所有客户的总和。