使用python比较/提取矩阵中的数据(2.6.1)

使用python比较/提取矩阵中的数据(2.6.1),python,matrix,correlation,Python,Matrix,Correlation,我有两个.csv文件,其中包含从R导出的相关矩阵。一个文件包含p值,另一个包含R值。行标题和列标题在两个文件之间完全匹配 仅当p值

我有两个.csv文件,其中包含从R导出的相关矩阵。一个文件包含p值,另一个包含R值。行标题和列标题在两个文件之间完全匹配

仅当p值<0.05时,我才尝试提取r值以及对应的行和列标题。下面是r值输入文件中数据的示例(我有1700多个相关项,而不是仅显示的两个):

p值输入文件相同,只是包含p值代替r值

我对Python比较陌生,不知道如何处理这种类型的文件。我尝试了一些策略,包括使用csv库来迭代文件。我考虑过使用numpy,但它似乎对我不起作用(?)。我还研究了在Python中使用scipy计算r值和P值(Pearson),但这似乎只适用于比较两个一维数组(我有1700多列数据要关联)

我从代码开始,向您展示我导入的内容:

import csv
infileP = open('AllcorrP.csv', 'rU')
infileR = open('AllcorrR.csv', 'rU')
问题 有人能帮我根据P值文件中的显著(<0.05)P值从r值文件中提取列标题、行标题和r值吗

直接使用Python计算多个数据列之间所有可能的相关性的r值和p值,并仅提取具有显著p值的结果

最后,我希望输出两个文件。
第一个文件:

Species1   Species2   Species4  ...
Species2   Species1   Species7  ...
等等。(其中,“物种1”是第一个具有显著相关性的物种,而行中的下一项是与之显著相关的物种(物种2、物种4等)

第二个文件:

Species1 (corr) Species2 = 0.87
Species2 (corr) Species7 = 0.72
...
等等,它显示了每一个成对的相关性和与之相关的r值


在这一点上,我很高兴能够提取出我想要的r值和种类的列表,并在以后找出最后两种文件格式。谢谢!

要阅读数据,您应该能够使用numpy.genfromtext。请参阅文档,此函数中有大量功能。要阅读上面的示例,您需要我要做的是:

from numpy import genfromtxt
rdata = genfromtxt('AllcorrR.csv', skip_header=1)[:,1:]
Pdata = genfromtxt('AllcorrP.csv', skip_header=1)[:,1:]
[:,1:]是在读入时忽略第一列数据。该函数没有像对行(通过skip_头)那样的“忽略前x列”输入。不确定他们为什么没有实现这一点,它总是给我带来麻烦

这将只读取p的数据(也可以读取r的数据)。然后您可以非常轻松地过滤数据。您可以读取分隔的第一行和第一列以获得标题。或者,如果您看到genfromtxt文档,您还可以命名它们(创建重新排列)

要查找r小于0.50的索引(值),只需进行比较,numpy就会自动为您创建一个布尔数组:

print Pdata < 0.05
打印Pdata<0.05
这可以用作rdata的索引(确保有相同数量的行/列):

打印rdata[Pdata<0.05]

要读取数据,您应该能够使用numpy.genfromtext。请参阅文档,此函数中有大量功能。要阅读上面的示例,您可以执行以下操作:

from numpy import genfromtxt
rdata = genfromtxt('AllcorrR.csv', skip_header=1)[:,1:]
Pdata = genfromtxt('AllcorrP.csv', skip_header=1)[:,1:]
[:,1:]是在读入时忽略第一列数据。该函数没有像对行(通过skip_头)那样的“忽略前x列”输入。不确定他们为什么没有实现这一点,它总是给我带来麻烦

这将只读取p的数据(也可以读取r的数据)。然后您可以非常轻松地过滤数据。您可以读取分隔的第一行和第一列以获得标题。或者,如果您看到genfromtxt文档,您还可以命名它们(创建重新排列)

要查找r小于0.50的索引(值),只需进行比较,numpy就会自动为您创建一个布尔数组:

print Pdata < 0.05
打印Pdata<0.05
这可以用作rdata的索引(确保有相同数量的行/列):

打印rdata[Pdata<0.05]

您可以执行类似操作以获取元组列表,其中包含行和列标题以及您感兴趣的数据元素的r和p值:

infile_r = open('AllcorrR.csv', 'r')
infile_p = open('AllcorrP.csv', 'r')

# Read the first line of each file.
line_r = infile_r.readline()
line_p = infile_p.readline()

# Set the separator depending on the file format.
SEPARATOR = None  # Elements separated by whitespace.
column_headers = line_r.split(SEPARATOR)

significant = []

# Read the rest of the lines.
for line_r in infile_r:
    line_p = infile_p.readline()
    tokens_r = line_r.split(SEPARATOR)
    tokens_p = line_p.split(SEPARATOR)
    row_header = tokens_r[0]
    values_r = [float(v) for v in tokens_r[1:]]
    values_p = [float(v) for v in tokens_p[1:]]
    significant.extend([(row_header, column_header, r, p) for column_header, r, p in zip(column_headers, values_r, values_p) if p < 0.05])

print significant
infle\u r=open('AllcorrR.csv','r')
infle_p=open('AllcorrP.csv','r')
#读取每个文件的第一行。
行\u r=infle\u r.readline()
行\u p=infle\u p.readline()
#根据文件格式设置分隔符。
SEPARATOR=None#由空格分隔的元素。
列标题=行拆分(分隔符)
显著=[]
#读剩下的几行。
对于填充中的线:
行\u p=infle\u p.readline()
令牌=行分割(分隔符)
令牌=行分割(分隔符)
行\u头=令牌\u r[0]
值\u r=[令牌中v的浮点(v)\u r[1:]
值\u p=[令牌中v的浮点(v)\u p[1:]
显著。扩展([(行标题、列标题、r、p)zip中列标题、r、p(列标题、值、值,如果p<0.05)])
打印有意义

您可以执行类似操作以获取元组列表,其中包含行和列标题以及您感兴趣的数据元素的r和p值:

infile_r = open('AllcorrR.csv', 'r')
infile_p = open('AllcorrP.csv', 'r')

# Read the first line of each file.
line_r = infile_r.readline()
line_p = infile_p.readline()

# Set the separator depending on the file format.
SEPARATOR = None  # Elements separated by whitespace.
column_headers = line_r.split(SEPARATOR)

significant = []

# Read the rest of the lines.
for line_r in infile_r:
    line_p = infile_p.readline()
    tokens_r = line_r.split(SEPARATOR)
    tokens_p = line_p.split(SEPARATOR)
    row_header = tokens_r[0]
    values_r = [float(v) for v in tokens_r[1:]]
    values_p = [float(v) for v in tokens_p[1:]]
    significant.extend([(row_header, column_header, r, p) for column_header, r, p in zip(column_headers, values_r, values_p) if p < 0.05])

print significant
infle\u r=open('AllcorrR.csv','r')
infle_p=open('AllcorrP.csv','r')
#读取每个文件的第一行。
行\u r=infle\u r.readline()
行\u p=infle\u p.readline()
#根据文件格式设置分隔符。
SEPARATOR=None#由空格分隔的元素。
列标题=行拆分(分隔符)
显著=[]
#读剩下的几行。
对于填充中的线:
行\u p=infle\u p.readline()
令牌=行分割(分隔符)
令牌=行分割(分隔符)
行\u头=令牌\u r[0]
值\u r=[令牌中v的浮点(v)\u r[1:]
值\u p=[令牌中v的浮点(v)\u p[1:]
重要。在zip(列)中为列标题r、p扩展([(行标题、列标题r、p