【问题标题】:Convert a txt file to a adjacency matrix将txt文件转换为邻接矩阵
【发布时间】:2020-10-17 16:36:30
【问题描述】:

我有一个类似的问题,发布在 Convert adjacency matrix to a csv file

我想使用 python(或者可能是 R)将 ARACNE 的邻接矩阵输出转换为 csv 文件。

adj 文件设置为显示一个基因的右侧以及它与其他基因的每个相互作用。例如a.csv的文件为:

A B 0.4 C 0.3
B C 0.1 E 0.4
C D 0.2 E 0.3

所以上面,A 和 B 相互交互,交互的值为 0.4。 A和C>>相互交互,取值为0.3,以此类推。

我想更改布局,因此我将文件 b.csv 设为 ...

A B 0.4
A C 0.3
B C 0.1
B E 0.4
C D 0.2
C E 0.3

基本上我想要一个所有交互节点的列表和相应的值,以便我可以将文件上传到 Cytoscape 并绘制网络。

在这篇文章中,有一个使用 Python 的很棒的答案。如果我想将 b.csv 的格式转换回 a.csv 怎么办?我挠了挠头,但找不到解决办法。我很想看看 Python 是如何做到这一点的!

感谢您的回答。 -小勇

【问题讨论】:

    标签: python adjacency-matrix


    【解决方案1】:

    这可以使用pandas.Dataframe.groupby来完成

    import pandas as pd
    
    df = pd.read_csv('b.csv', delimiter=' ', header=None)
    
    data = '' 
    for key, value in df.groupby([0]):
        for i,item in enumerate(value.values):
            if i == 0:
                data += item[0]
            for itm in item[1:]:
                data += ' '+str(itm)
        data += '\n'
    
    #Saving the string
    with open('a.csv', 'w') as f:
        f.write(data)
    

    b.csv 中的数据为:

    A B 0.4
    A C 0.3
    B C 0.1
    B E 0.4
    C D 0.2
    C E 0.3
    C F 0.3
    A D 0.3
    

    生成a.csv 是:

    A B 0.4 C 0.3 D 0.3
    B C 0.1 E 0.4
    C D 0.2 E 0.3 F 0.3
    

    【讨论】:

    • 这太好了,莫尼什。但是,我确实有不相等数量的 A、B、C 行。除了 i%2 != 0 解决方案之外,如何处理它?再次感谢您的帮助!
    • @XiaoyongFu 你的意思是a.csv可以包含C D 0.2 E 0.3 F 0.3这样的东西吗?
    • 是的。实际上,我有一个长 txt 文件,其中包含所有交互对及其相应的交互强度(第三列)。每个节点的交互对数(如第一列中的 A、B、C、...)是不同的。因此,输出的 csv 文件也会有不同长度的行。感谢您回答我的问题!
    • @XiaoyongFu 我已经更新了答案,新代码将b.csv 转换为a.csv 没有太多限制
    • 嗨 Mohnish,您的 Python 脚本确实解决了我的问题。非常感谢!
    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多