如何在python中进行数据相关性聚类图

时间:2019-02-05 23:01:31

标签: python cluster-analysis hierarchical-clustering

我有一个数据库,其中包含有关对存储库所做的提交的信息。例如

commit-sha1 | file1 | 
commit-sha1 | file2 |
commit-sha2 | file2 |
commit-sha2 | file3 | 

,依此类推。基本上,显示sha1更改了文件(file1,file2)和sha2更改了(file2,file3) 现在我想看看是否某些文件是相互关联的,即file1和file2一起提交的机会是多少,等等。 为此,我首先找出了最常见的前50个文件,这些文件给了我

file1 - 1500
file2 - 1423
file3 - 1222..
  • 对于每个文件f,计算P(f)=包含f /总计的提交 提交。
  • 对于每对文件f1,f2,计算Q(f1,f2)=提交 同时包含f1,f2 /总提交次数
  • 对于每对文件f1,f2,计算D(f1,f2)= P(f1)* P(f2)/ [Q(f1,f2)– P(f1)* P(f2)]或无穷大,如果Q(f1,f2)<= P(f1)* P(f2) 完成上述操作后,我现在得到了两对文件,它们的D(f1,f2)值如下所示:

    two_pair_list = [['file1','file2'], ['file1','file3'] ... ['file49','file50']]

    d_value = [3.2,-1,0.12,7.6,-1,...]

当Q(f1,f2)<= P(f1)* P(f2)时,我将-1作为d_value,例如,因为db中没有提交同时包含file1和file3(即Q (file1,file3)= 0),其d_value为-1。 现在假设我具有文件对的d_value列表,如何执行分层聚类以查看哪些文件相互关联? 我相信python的linkage()API会有所帮助,但我不确定如何将其用于此数据。任何帮助表示赞赏 谢谢

1 个答案:

答案 0 :(得分:1)

一个简单的例子:

from scipy.cluster.hierarchy import dendrogram, linkage
import numpy as np
from matplotlib import pyplot as plt

d_value = np.array([ 3.2 , 100,  0.12,  7.6 , 100,  5.2 ])
Z = linkage(dm, 'ward')
fig = plt.figure()
dn = dendrogram(Z)

结果:

enter image description here

请注意,我将您的-1更改为100,因为当文件1和文件3尚未一起提交时,它们之间的距离应该很大。