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)


上一篇 下一篇

猜你喜欢

热点阅读