分值计算
# bins参数代表我们按照什么区间进行分组 # labels和bins切分的数组前后呼应,给每个分组打标签 # right表示了右侧区间是开还是闭,即包不包括右边的数值,如果设置成False,就代表[0,30) IFL['I_SCORE'] = pd.cut(IFL['I'], bins=[0,0.03,0.06,0.11,1000], labels=[1,2,3,4], right=False).astype(float) IFL['F_SCORE'] = pd.cut(IFL['F'], bins=[0,7,15,30,90,1000], labels=[5,4,3,2,1], right=False).astype(float) IFL['L_SCORE'] = pd.cut(IFL['L'], bins=[0,5.39,9.07,15.58,1000], labels=[1,2,3,4], right=False).astype(float) IFL.head()
判断用户的分值是否大于平均值:
# 1为大于均值 0为小于均值 IFL['I是否大于平均值'] =(IFL['I_SCORE'] > IFL['I_SCORE'].mean()) *1 IFL['F是否大于平均值'] =(IFL['F_SCORE'] > IFL['F_SCORE'].mean()) *1 IFL['L是否大于平均值'] =(IFL['L_SCORE'] > IFL['L_SCORE'].mean()) *1 IFL.head()
客户分层
RFM经典的分层会按照R/F/M每一项指标是否高于平均值,把用户划分为8类,我们根据根据案例中的情况进行划分,具体像下面表格这样:
引入人群数值的辅助列,把之前判断的I\F\S是否大于均值的三个值串联起来:
IFL['人群数值'] =(IFL['I是否大于平均值'] *100) +(IFL['F是否大于平均值'] *10) +(IFL['L是否大于平均值'] *1) IFL.head()
构建判断函数,通过判断人群数值的值,来返回对应标签:
将标签分类函数应用到人群数值列:
IFL['人群类型'] = IFL['人群数值'].apply(transform_label) IFL.head()
各类用户占比
cat = IFL['人群类型'].value_counts().reset_index() cat['人数占比'] = cat['人群类型'] / cat['人群类型'].sum() cat
五、各分区up主排行top15
科学科普分区
high = IFL.loc[IFL['人群类型']=='高价值up主'] rank = high[['author','L','I','F']].sort_values('L',ascending=False) rank.to_excel('rank.xlsx', sheet_name='科学科普',encoding='utf-8')
社科人文分区
机械分区
机械分区高价值up主只有5位,因为机械分区在科技区是个小分区,发布视频的up主仅有54位。
野生技术协会分区
星海
汽车
参考文章:
1.数据不吹牛:《不到70行Python代码,轻松玩转RFM用户分析模型》
2.Crossin:《B站用户行为分析非官方报告》
3.https://github.com/Vespa314/bilibili-api/blob/master/api.md