Python 协同矩阵计算
2023-08-16 本文已影响0人
火卫控
Synergy_Matrix_pandas_csv.py
机器检测获取原始数据 A549ZT2b- A:Riba B:FDA
W384 FLuc PE e86-4_Fluc
两个重复
CPDA 10 3 1 0.3 0.1 0
10 4780 5530 32100 28820 163520 209300 248850 249590 259310 325660 335570 368230
3 96340 100830 187000 160690 366850 401390 496680 554270 507860 624260 573330 665090
1 154250 154640 253970 264960 482270 528830 550620 641530 478160 480540 588860 639440
0 232510 246640 292390 327710 455540 436800 404140 519110 539170 516010 732670 669020
平均处理
Matrix CPDA-10uM CPDA-3uM CPDA-1uM CPDA-0.3uM CPDA-0.1uM CPDA-0uM
RIba-10uM 5155 30460 186410 249220 292485 351900
RIba-3uM 98585 173845 384120 525475 566060 619210
RIba-1uM 154445 259465 505550 596075 479350 614150
RIba-0uM 239575 310050 446170 461625 527590 700845
matrix_demo.xlsx 文件内容如下:
Matrix 0 1 2 3 4 5
RIba-10uM 5155 30460 186410 249220 292485 351900
RIba-3uM 98585 173845 384120 525475 566060 619210
RIba-1uM 154445 259465 505550 596075 479350 614150
RIba-0uM 239575 310050 446170 461625 527590 700845
矩阵A : 实际矩阵
对照 RIba-0 CPDA-0uM 即最后一行一列的单元格为 阴性对照(相对于药物)Neg
计算每一个单元格的抑制率: (Neg-test)/Nge * 100%
计算结果填充到新的矩阵中:
矩阵B: 理论矩阵
获取单药抑制率 作为两个列表, 最后一行(Riba单药抑制率) 和最后一列(CPDA单药抑制率)
进行理论叠加效用抑制率计算: IA + IB - (IA * IB)
矩阵C: 协同矩阵
将实际矩阵-理论矩阵即为协同矩阵,单元格大于0 的称为有协同作用
运算控制台打印
理论矩阵
0 1 2 3 4 5
0 0.828361 0.777870 0.680349 0.669277 0.622017 0.497892
1 0.697980 0.609136 0.437536 0.418053 0.334894 0.116481
2 0.700448 0.612330 0.442133 0.422809 0.340330 0.123701
3 0.658163 0.557605 0.363383 0.341331 0.247209 0.000000
实际矩阵
0 1 2 3 4 5
0 0.992645 0.956538 0.734021 0.644401 0.582668 0.497892
1 0.859334 0.751949 0.451919 0.250227 0.192318 0.116481
2 0.779630 0.629783 0.278656 0.149491 0.316040 0.123701
3 0.658163 0.557605 0.363383 0.341331 0.247209 0.000000
协同矩阵
0 1 2 3 4 5
0 0.164284 0.178668 0.053672 -0.024876 -0.039349 0.0
1 0.161354 0.142813 0.014382 -0.167827 -0.142577 0.0
2 0.079182 0.017453 -0.163476 -0.273318 -0.024290 0.0
3 0.000000 0.000000 0.000000 0.000000 0.000000 0.0
代码如下:
import pandas as pd
import numpy as np
import os
homePath = os.path.dirname(os.path.abspath(__file__))
os.chdir(homePath)
def load_csv(path):
data_read = pd.read_csv(path,header=None)
print(data_read)
# list = data_read.values.tolist()
# data = np.array(list)
# print(data.shape)
# print(data)
# return data
# csv_path = r"./matrix_demo.csv"
excel_path = r"./matrix_demo.xlsx"
# load_csv(csv_path)
df = pd.read_excel(excel_path)
print(df)
df = df.loc[0:3,:]
df2 = df.iloc[:,1:7]
print(df)
print(df2)
print(df2.shape)
Neg = df2.iloc[-1,-1]
print(Neg)
# df3 = df2.map(lambda x: (Neg-x)/Neg, na_action='ignore')
# print(df3)
# 计算 Icell 细胞实验实际抑制率 矩阵 df3
df3 = df2.apply(lambda x: (Neg-x)/Neg)
print(df3)
# 获取最后一列 作为A药 RIba的单药抑制率
dfA = df3.iloc[:,-1]
# 获取最后一行 作为B药 FDA特定药物的单药抑制率
dfB=df3.iloc[-1,:]
print(dfA)
print(dfB)
a = list(dfA)
b = list(dfB)
ma=[]
mc=[]
s=0
for i in a:
for j in b:
s = i+j -(i*j)
print(s)
ma.append(s)
mc.append(ma)
ma=[]
print(mc)
df2w = pd.DataFrame(mc)
print("理论矩阵\n",df2w)
print("实际矩阵\n",df3)
dfd = df3-df2w
print("协同矩阵\n",dfd)
# 将数据写入Excel文件
dfd.to_excel('./output.xlsx', sheet_name='Sheet1')
# df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)