【发布时间】:2015-09-14 03:05:12
【问题描述】:
我有一个用 pandas 制作的成对距离数据框:
#Get files
import glob
import itertools
one_dimension = glob.glob('*.pdb')
dataframe = []
for combo in itertools.combinations(one_dimension,2):
pdb_1 = combo[0]
pdb_2 = combo[1]
entry = { 'pdb_1' : pdb_1, 'pdb_2', 'rmsd': get_rmsd(pdb_1,pdb_2)
dataframe.append(entry)
import pandas
dataframe = Dataframe(dataframe)
dataframe
我要做的就是以这样一种方式对数据帧进行集群,其中所有集群都包含小于某个截止值(假设小于 2)的 pdb。我已经读过完整的链接是要走的路。
例如:
- pdb_1,pdb_2 的 rmsd 为 1.56
- pdb_3,pdb_2 的 rmsd 为 1.03
- pdb_2, pdb_1 的 rmsd 为 1.60
所以它们都可以一起出现在一个集群中。但是,如果任何新的 pdb 尝试添加到集群中,如果集群中的任何成员 > 2,它将被拒绝。
我知道这是一个完整的与截止的链接。
我已经查看了scipy.cluster.hierarchy.linkage,但我很难格式化数组以进入链接。
-
完成这项任务的最佳方法是什么?
-
如何从我的数据框转到可供
使用的东西 scipy.cluster? -
我应该把它变成一个 R 数据框吗?
-
如果我将 到数组的成对距离。
我发现this、this和this问题类似,发现this tutorial
更新
根据cel的回答,我可以得到以下信息:
>>df
然后旋转
pivot_table = df.pivot('pdb_1','pdb_2','rmsd').fillna(0)
>>pivot_table
然后是数据数组
piv_arr = pivot_table.as_matrix()
dist_mat = piv_arr + np.transpose(piv_arr)
>>dist_mat
但是,我无法制作正方形,因为诊断不等于 0...
>>>squareform(dist_mat)
并且可以验证
>>dist_mat.diagonal()
【问题讨论】:
-
不同层次聚类方法的输入是一个压缩距离矩阵。要根据您的观察结果创建这样的距离矩阵,您可能需要查看
pdistdocs.scipy.org/doc/scipy-0.15.1/reference/generated/…) -
我的输入是预先计算的距离。我无法创建距离的距离
标签: python pandas scipy cluster-analysis hierarchical-clustering