Bat*_*dak 1 python feature-extraction correlation pandas
我在Pandas中有一个数据框,其形状为(136,1445)。我尝试为我的136行创建correlation(Pearson)矩阵。因此,结果是,我需要一个尺寸为136x136的矩阵。
我尝试了两种不同的方法,但是无法从中获得结果,或者当我创建136x136相关矩阵时,我丢失了数据框的列名。
第一,
gene_expression = pd.read_csv('padel_all_drug_results_original.csv',dtype='unicode')
gene_expression = gene_expression.convert_objects(convert_numeric=True)
gene_expression.corr()
Run Code Online (Sandbox Code Playgroud)
这给出了基于列的皮尔逊相关矩阵(1445 * 1445),当我尝试转置我的数据框然后尝试找到相关时,数据框的结构被破坏(例如列名丢失或我什至不确定该相关性是正确的)。
其次,
distance = lambda column1, column2: pearsonr(column1,column2)[0]
result = gene_expression.apply(lambda col1: gene_expression.apply(lambda col2: distance(col1, col2)))
Run Code Online (Sandbox Code Playgroud)
我应该如何计算136x136皮尔逊相关矩阵,以不更改原始数据帧?
另外,我有1445个功能,有些列几乎全为零。因此,我删除了这些列,因为它们是嘈杂的列,但是您有另一个想法来实现重用吗?
提前致谢
要获取包含所有行之间成对相关的相关矩阵,您可以:
gene_expression.T.corr()
Run Code Online (Sandbox Code Playgroud)
使用一个玩具示例:
df = pd.DataFrame(np.random.randint(0, high=100, size=(5, 10)), index=list(string.ascii_lowercase[:5]))
Run Code Online (Sandbox Code Playgroud)
具有5个标记行和10列:
df.info()
Index: 5 entries, a to e
Data columns (total 10 columns):
0 5 non-null int64
1 5 non-null int64
2 5 non-null int64
3 5 non-null int64
4 5 non-null int64
5 5 non-null int64
6 5 non-null int64
7 5 non-null int64
8 5 non-null int64
9 5 non-null int64
dtypes: int64(10)
memory usage: 440.0+ bytes
Run Code Online (Sandbox Code Playgroud)
使用
df.T.corr()
Run Code Online (Sandbox Code Playgroud)
产量
a b c d e
a 1.000000 0.209460 -0.205302 -0.294427 0.353803
b 0.209460 1.000000 -0.530715 -0.117949 0.775848
c -0.205302 -0.530715 1.000000 -0.245101 -0.344358
d -0.294427 -0.117949 -0.245101 1.000000 0.058302
e 0.353803 0.775848 -0.344358 0.058302 1.000000
Run Code Online (Sandbox Code Playgroud)