Python 如何基于行创建seaborn clustermap并提取行标签?

Python 如何基于行创建seaborn clustermap并提取行标签?,python,seaborn,cluster-analysis,Python,Seaborn,Cluster Analysis,我有一个数据框,其中包含项目和关联值的列表。哪种度量和方法最适合执行聚类 我只想根据行从列表中创建一个(树状图加热图),映射它(如代码所示),但是如何获得每个簇或每个蛋白质的项目列表及其簇信息。(类似于,,但仅基于行而非列) 我如何确定哪种“方法”和“度量”最适合我的数据 data.csv示例: item,v1,v2,v3,v4,v5 A1,1,2,3,4,5 B1,2,4,6,8,10 C1,3,6,9,12,15 A1,2,3,4,5,6 B2,3,5,7,9,11 C2,4,7,10,

我有一个数据框,其中包含项目和关联值的列表。哪种度量和方法最适合执行聚类

  • 我只想根据行从列表中创建一个(树状图加热图),映射它(如代码所示),但是如何获得每个簇或每个蛋白质的项目列表及其簇信息。(类似于,,但仅基于行而非列)

  • 我如何确定哪种“方法”和“度量”最适合我的数据

  • data.csv示例:

    item,v1,v2,v3,v4,v5
    A1,1,2,3,4,5
    B1,2,4,6,8,10
    C1,3,6,9,12,15
    A1,2,3,4,5,6
    B2,3,5,7,9,11
    C2,4,7,10,13,16
    
    创建clustermap的我的代码:

    import pandas as pd
    from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
    import matplotlib.pyplot as plt
    import seaborn as sns
    import scipy.cluster.hierarchy as sch
    
    df = pd.read_csv('data.csv', index_col=0)
    sns.clustermap(df, col_cluster=False, cmap="coolwarm", method='ward', metric='euclidean', figsize=(40,40))
    plt.savefig('plot.pdf', dpi=300)
    

    我刚把它拼凑起来。这是你想要的吗

    import pandas as pd
    import numpy as np
    import seaborn as sns
    
    cars = {'item': ['A1','B1','C1','A1','B1','C1'],
            'v1': [1.0,2.0,3.0,2.0,3.0,4.0],
            'v2': [2.0,4.0,6.0,3.0,5.0,7.0],
            'v3': [3.0,6.0,9.0,4.0,7.0,10.0],
            'v4': [4.0,8.0,12.0,5.0,9.0,13.0],
            'v5': [5.0,10.0,15.0,6.0,11.0,16.0]
            }
    
    df = pd.DataFrame(cars)
    df
    
    heatmap_data = pd.pivot_table(df, values=['v1','v2','v3','v4','v5'], 
                                  index=['item'])
    heatmap_data.head()
    sns.clustermap(heatmap_data)
    
    df = df.drop(['item'], axis=1)
    g = sns.clustermap(df)
    

    此外,请查看下面的链接以了解有关此主题的更多信息


    我刚刚把它拼凑起来。这是你想要的吗

    import pandas as pd
    import numpy as np
    import seaborn as sns
    
    cars = {'item': ['A1','B1','C1','A1','B1','C1'],
            'v1': [1.0,2.0,3.0,2.0,3.0,4.0],
            'v2': [2.0,4.0,6.0,3.0,5.0,7.0],
            'v3': [3.0,6.0,9.0,4.0,7.0,10.0],
            'v4': [4.0,8.0,12.0,5.0,9.0,13.0],
            'v5': [5.0,10.0,15.0,6.0,11.0,16.0]
            }
    
    df = pd.DataFrame(cars)
    df
    
    heatmap_data = pd.pivot_table(df, values=['v1','v2','v3','v4','v5'], 
                                  index=['item'])
    heatmap_data.head()
    sns.clustermap(heatmap_data)
    
    df = df.drop(['item'], axis=1)
    g = sns.clustermap(df)
    

    此外,请查看下面的链接以了解有关此主题的更多信息


    感谢您编辑问题聚类是无监督的,这意味着有一些指标可以告诉您聚类是否稳定或解释更多的差异,但最终,这是非常主观的。这取决于你的最终目标,你自己必须清楚这一点。您可以尝试不同的分层聚类方法,并使用clustermap中的
    row\u linkage=
    选项提供链接。@StupidWolf非常感谢,我们是否有任何方法可以检查哪种方法对我们的数据最有效(类验证)。感谢您编辑问题聚类是无监督的,这意味着有一些指标可以告诉你集群是否稳定,或者解释更多的差异,但最终,这是相当主观的。这取决于你的最终目标,你自己必须清楚这一点。您可以尝试不同的分层聚类方法,并使用clustermap中的
    row\u linkage=
    选项提供链接。@StupidWolf非常感谢,是否有任何方法可以检查哪种方法最适合我们的数据(验证)。非常感谢,但我正在寻找seaborn客户地图:)抱歉,我看到了集群,我以为你指的是别的东西。我刚刚更新了我的答案。希望有帮助。我唯一不能真正理解的是你所做的“提取行”评论。谢谢你的努力,但我的代码已经做了很多。我想要的是仅基于行的clustermap(在我的代码中也使用“col_cluster=False”选项完成)。我想要的是基于行对项目进行集群后,它们所属集群的项目列表格式。非常感谢,但我正在寻找seaborn custermap:)抱歉,我看到了集群,我以为您指的是其他内容。我刚刚更新了我的答案。希望有帮助。我唯一不能真正理解的是你所做的“提取行”评论。谢谢你的努力,但我的代码已经做了很多。我想要的是仅基于行的clustermap(在我的代码中也使用“col_cluster=False”选项完成)。我想要的是基于行对项目进行集群后,项目所属集群的列表格式。