如何看懂谱系图
import pandas as pd
import seaborn as sns #用于画热图的工具包
from scipy.cluster import hierarchy #用于进行层次聚类,画层次聚类图的工具包
from scipy import cluster
import matplotlib.pyplot as plt
from sklearn import decomposition as skldec #用于主成分分析降维的包
df = pd.read_excel(".../test.xlsx",index_col=0)
#df = df.T #python默认每行是一个样本,如果数据每列是一个样本的话,转置一下即可
#开始画层次聚类树状图
Z = hierarchy.linkage(df, method ='ward',metric='euclidean')
hierarchy.dendrogram(Z,labels = df.index)
#在某个高度进行剪切
label = cluster.hierarchy.cut_tree(Z,height=0.8)
label = label.reshape(label.size,)
#根据两个最大的主成分进行绘图
pca = skldec.PCA(n_components = 0.95) #选择方差95%的占比
pca.fit(df) #主成分分析时每一行是一个输入数据
result = pca.transform(df) #计算结果
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轴标签
#层次聚类的热图和聚类图
sns.clustermap(df,method ='ward',metric='euclidean')
plt.show()
scipy.cluster.hierarchy.linkage(y, method='single',metric='euclidean',optimal_ordering=False)
y
:需要进行层次聚类的数据,这里即可用使用开始读取的数据变量df
method
:层次聚类选用的方法,下面罗列了七种方法,比如:
single方法
代表将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离。
这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。
两个簇之间的距离公式:
complete方法
与Single Linkage相反,将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。
Complete Linkage的问题也与Single Linkage相反,两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。
两个簇之间的距离公式:
average方法
代表是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大,但结果比前两种方法更合理。两个簇之间的距离公式:
median
同centroid
metric
:距离计算的方法,即上面方法中的dist()函数具体的计算方式,具体方式可以见这个页面。
The distance metric to use. The distance function can be ‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘jensenshannon’, ‘kulsinski’, ‘kulczynski1’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’.
————————————————
版权声明:代码实现及参数介绍部分 经CSDN博主「冬之晓东」的原创文章 修改完成。
原文链接:https://blog.csdn.net/qq_19528953/article/details/79133889