python代码 根据文件“Molecular_Descriptor.xlsx”和“ERα_activity.xlsx”提供的数据,针对1974个化合物的729个分子描述符进行变量选择,根据变量对生物活性影响的重要性进行排序,并给出前20个对生物活性最具有显著影响的分子描述符(即变量),并请详细说明分子描述符筛选过程及其合理性,选择不超过20个分子描述符变量,构建化合物对ERα生物活性的定量预测模型,请叙述建模过程。然后使用构建的预测模型,对文件“ERα_activity.xlsx”的test表中的50个化合物进行IC50值和对应的pIC50值预测,并将结果分别填入“ERα_activity.xlsx”的test表中的IC50_nM列及对应的pIC50列。 问题3. 请利用文件“Molecular_Descriptor.xlsx”提供的729个分子描述符,针对文件“ADMET.xlsx”中提供的1974个化合物的ADMET数据,从五个指标(Caco-2、CYP3A4、hERG、HOB、MN)中任选2个,分别构建其分类预测模型,并简要叙述建模过程。然后使用所构建的2个分类预测模型,对文件“ADMET.xlsx”的test表中的50个化合物进行相应的预测,并将结果填入“ADMET.xlsx”的test表中对应的Caco-2、CYP3A4、hERG、HOB、MN列。
时间: 2024-03-29 15:38:49 浏览: 96
(3个国二,3种解法)2021年华为杯数学建模D题抗乳腺癌候选药物的优化建模
5星 · 资源好评率100%
问题1的代码:
# 导入必要的库和数据
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
df1 = pd.read_excel('Molecular_Descriptor.xlsx', sheet_name='train', index_col=0)
df2 = pd.read_excel('ERα_activity.xlsx', sheet_name='train', index_col=0)
# 数据预处理
X = StandardScaler().fit_transform(df1.values)
y = df2.values.ravel()
# 特征选择
from sklearn.feature_selection import SelectKBest, f_regression
selector = SelectKBest(score_func=f_regression, k=20)
selector.fit(X, y)
# 输出前20个重要的分子描述符
df_scores = pd.DataFrame({'Feature': df1.columns, 'Score': selector.scores_})
df_scores = df_scores.sort_values(by='Score', ascending=False)
top20_features = df_scores.head(20)['Feature'].values
print(top20_features)
# 构建预测模型
from sklearn.linear_model import LinearRegression
X_selected = df1[top20_features].values
model = LinearRegression()
model.fit(X_selected, y)
# 对test数据集进行预测并保存结果
df_test = pd.read_excel('ERα_activity.xlsx', sheet_name='test', index_col=0)
X_test = StandardScaler().fit_transform(df_test.values)
X_test_selected = df_test[top20_features].values
y_pred = model.predict(X_test_selected)
df_test['IC50_nM'] = y_pred
df_test['pIC50'] = -np.log10(y_pred * 1e-9)
df_test.to_excel('ERα_activity.xlsx', sheet_name='test', index=True)
问题3的代码:
# 导入必要的库和数据
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
df1 = pd.read_excel('Molecular_Descriptor.xlsx', sheet_name='train', index_col=0)
df2 = pd.read_excel('ADMET.xlsx', sheet_name='train', index_col=0)
# 数据预处理
X = StandardScaler().fit_transform(df1.values)
y_caco2 = df2['Caco-2'].values
y_cyp3a4 = df2['CYP3A4'].values
# 特征选择
from sklearn.feature_selection import SelectKBest, f_classif
selector = SelectKBest(score_func=f_classif, k=20)
selector.fit(X, y_caco2)
top20_features_caco2 = df1.columns[selector.get_support()].values
selector = SelectKBest(score_func=f_classif, k=20)
selector.fit(X, y_cyp3a4)
top20_features_cyp3a4 = df1.columns[selector.get_support()].values
# 构建分类预测模型
from sklearn.linear_model import LogisticRegression
X_selected_caco2 = df1[top20_features_caco2].values
X_selected_cyp3a4 = df1[top20_features_cyp3a4].values
model_caco2 = LogisticRegression()
model_caco2.fit(X_selected_caco2, y_caco2)
model_cyp3a4 = LogisticRegression()
model_cyp3a4.fit(X_selected_cyp3a4, y_cyp3a4)
# 对test数据集进行预测并保存结果
df_test = pd.read_excel('ADMET.xlsx', sheet_name='test', index_col=0)
X_test = StandardScaler().fit_transform(df_test.values)
X_test_selected_caco2 = df_test[top20_features_caco2].values
X_test_selected_cyp3a4 = df_test[top20_features_cyp3a4].values
y_pred_caco2 = model_caco2.predict(X_test_selected_caco2)
y_pred_cyp3a4 = model_cyp3a4.predict(X_test_selected_cyp3a4)
df_test['Caco-2'] = y_pred_caco2
df_test['CYP3A4'] = y_pred_cyp3a4
df_test.to_excel('ADMET.xlsx', sheet_name='test', index=True)
阅读全文