如何利用Python做人群相似度数据分析

阿里云双11来了!从本博客参与阿里云,服务器最低只要86元/年!

在各个行业,尤其是电商行业当中,经常需要做各个人群之间的相似度分析,以便于找到品牌的核心用户,在拉新过程中,我们也需要用现有数据来挖掘潜在客户。下面为大家提供一个做人群相似度的思路。

1、数据准备

需要准备的数据包括每一类数据及其特征,

实际数据如下:

2、计算人群距离

这里我们评价一个类别是否和其它类别相似,可是用各个类别的距离来衡量,这里需要用到一个包:

from scipy.spatial import distance

这个包可以计算各个人群之间的距离。

file = ‘20191023_114315pivot_people_huaxiang.xlsx’

df = pd.read_excel(file, index_col=’人群包’)

df.fillna(0, inplace=True)

disMat = distance.pdist(df, ‘euclidean’)

D = distance.squareform(disMat, force=’no’, checks=True)

df_D = pd.DataFrame(D)

df_D.index = list(df.index.values)

df_D.columns = list(df.index.values)

print(df_D)

这里面主要用到了distance当中的两个函数,一个是pdist,一个是squareform。

pdist的主要作用是:得到各个点之间的距离; 这样得到的距离并不能明显的看出各个点之间的区别,所以需要squareform函数;

squareform:这个函数可以把之前pdist得到的距离矩阵化,得到冗余矩阵,例如把

array([ 2, 3, 4, 7, 8, 12])

变化成

array([[ 0, 2, 3, 4],

[ 2, 0, 7, 8],

[ 3, 7, 0, 12],

[ 4, 8, 12, 0]])

这样我们就得到了各个点之间的距离,距离越大相似度就越小;

3、通过主成分分析画散点图

通过距离的数字有时候并不能明显的看出各个点之间的相似关系,所以我们还可以把所有的点画成散点图。散点图只有两个维度,而我们的数据源却有多个维度,所以,第一步就是降维,使用到的包是:

from sklearn import decomposition as skldec

这个包可以帮我们筛选出来两个主要的维度,得到结果之后画散点图:

#根据两个最大的主成分进行绘图

pca = skldec.PCA(n_components = 0.95)

pca.fit(df) # 主成份分析时每一行是一个输入数据

result = pca.transform(df) #计算结果

plt.rcParams[“font.sans-serif”] =[“SimHei”]

plt.rcParams[“axes.unicode_minus”] = False

plt.figure() #新建一张图进行绘制

plt.scatter(result[:, 0], result[:, 1], c=label, edgecolor=’k’) #绘制两个主成分组成坐标的散点图

for i in range(result[:,0].size):

plt.text(result[i,0],result[i,1],df.index[i]) #在每个点边上绘制数据名称

x_label = ‘PC1(%s%%)’ % round((pca.explained_variance_ratio_[0]*100.0),2) #x轴标签字符串

y_label = ‘PC1(%s%%)’ % round((pca.explained_variance_ratio_[1]*100.0),2) #y轴标签字符串

plt.xlabel(x_label) #绘制x轴标签

plt.ylabel(y_label) #绘制y轴标签

plt.show()

使用PCA降维之后还可以查看降维的效果:

>>> pca.n_components

1

>>> pca.explained_variance_ratio_

array([ 0.99910873])

>>> pca.explained_variance_

array([ 2.55427003])

>>> pca.get_params

<bound method PCA.get_params of PCA(copy=True, n_components=1, whiten=False)>

以上面的数据为例,我们所训练的pca对象的n_components值为1,即保留1个特征,该特征的方差为2.55427003,占所有特征的方差百分比为0.99910873,意味着几乎保留了所有的信息。get_params返回各个参数的值。

最终产出的效果图表:

从图中距离的远近我们就可以看出各个人群的相似关系,以便于我们在人群精细化运行的过程中提供参考。喜欢的加个关注+转发收藏哦!

https://www.jianshu.com/p/64a5ddb17e09

Python量化投资网携手4326手游为资深游戏玩家推荐:《饥饿鲨:世界下载

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论