用于记录自己做生信环状RNA和疾病关联的一些用到的数据。
疾病语义相似度
本文代码来自ABard0/MDGF-MCEC (github.com)
环状RNA功能相似度
论文里的计算原理是这样的
import pandas as pd
import numpy as np
dis_ss = pd.read_csv('data/disease_ss.csv', header=0).values
cd_adjmat = pd.read_csv('data/assocaitions.csv', header=0).values
rows = len(cd_adjmat)
result = np.zeros([rows, rows])
for i in range(rows):
index_list = []
for k in range(len(cd_adjmat[1])):
if cd_adjmat[i][k] == 1:
index_list.append(k) ##和i相关的疾病列表
if len(index_list) == 0:
continue
for j in range(0, i+1):
index_list2 = []
for k in range(len(cd_adjmat[1])):
if cd_adjmat[j][k] == 1:
index_list2.append(k) ##和j相关的疾病列表
if len(index_list2) == 0:
continue
sum1=0
sum2=0
for k1 in range(len(index_list)): #第一项,每个K1和另一个整个列表的相似度
sum1 = sum1 + max(dis_ss(index_list[k1], index_list2))
for k2 in range(len(index_list2)): ##第二项
sum2 = sum2 + max(dis_ss(index_list, index_list2[k2]))
result[i, j] = (sum1 + sum2) / (len(index_list) + len(index_list2))
result[j, i] = result[i, j]
for t in range(rows):
result[t][t] = 1
result = pd.DataFrame(result)
result.to_csv('output/circFuncSimilarity.csv')
高斯核相关性
公式:
import numpy as np
import pandas as pd
import math
# 读取数据
association_matrix = pd.read_csv('output/association_matrix.csv', header=None, encoding='gb18030').values
# 计算disease之间的相似度
association_matrix = association_matrix.T
disease_similarity = np.zeros([100, 100]) # 100种病之间的相似度,初始化矩阵
width = 0
print('width is :', width)
for m in range(100):
width += np.sum(association_matrix[m]**2)**0.5
# 按定义用二阶范数计算width parameter
print('width is :', width)
# 计算association_matrix
count = 0
for m in range(100):
for n in range(100):
disease_similarity[m, n] = math.exp((np.sum((association_matrix[m] - association_matrix[n])**2)**0.5
* width/100) * (-1)) # 计算不同行(disease)之间的二阶范数
if disease_similarity[m, n] == 1:
disease_similarity[m, n] = 0.8 # 这里是一个大问题,两个向量相同可以说它有一定相关度,可是计算出相关度等于1又不合理,只能定义一个值
# 保存结果
result = pd.DataFrame(disease_similarity)
result.to_csv('output/disease_GaussianSimilarity.csv')
# 注意,这样保存之后会多了一行一列行号序号,需要删除
# 计算circRNA之间的相似度
association_matrix = association_matrix.T # 转置方便计算
print(len(association_matrix))
rna_similarity = np.zeros([676, 676]) # 676种circRNA之间的相似度,初始化矩阵
# 计算association_matrix
count = 0
for m in range(676):
for n in range(676):
rna_similarity[m, n] = math.exp((np.sum((association_matrix[m] - association_matrix[n])**2)**0.5
* width/676) * (-1))
if rna_similarity[m, n] == 1:
rna_similarity[m, n] = 0.8 # 这里是一个大问题,两个向量相同可以说它有一定相关度,可是计算出相关度等于1又不合理,只能定义一个值
# 保存结果
result = pd.DataFrame(rna_similarity)
result.to_csv('output/rna_GaussianSimilarity.csv')
# 注意,这样保存之后会多了一行一列行号序号,需要删除