首页 > 应用开发 > > 使用Python做人群相似度分析
趣谈数据分析
在各个行业,尤其是电商行业当中,经常需要做各个人群之间的相似度分析,以便于找到品牌的核心用户,在拉新过程中,我们也需要用现有数据来挖掘潜在客户。下面为大家提供一个做人群相似度的思路。
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
以上面的数据为例,我们所训练的pca对象的n_components值为1,即保留1个特征,该特征的方差为2.55427003,占所有特征的方差百分比为0.99910873,意味着几乎保留了所有的信息。get_params返回各个参数的值。
最终产出的效果图表:
从图中距离的远近我们就可以看出各个人群的相似关系,以便于我们在人群精细化运行的过程中提供参考。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4662/viewspace-3125564/ ,如需转载,请注明出处,否则将追究法律责任。