假如我有3个csv表格,如下:
|
组合编码 | 药物row | 药物col | 作用分数(target) |
---|---|---|---|
1 | 药物1 | 药物2 | 6 |
2 | 药物3 | 药物4 | 7.0 |
药物名 | 药物ID |
---|---|
药物1 | 1 |
药物3 | 2 |
药物4 | 3 |
药物5 | 4 |
药物2 | 5 |
药物6 | 6 |
药物ID | 特征1 | 特征2 | 特征3 | 特征4 | 特征5 | 特征6 |
---|---|---|---|---|---|---|
3 | 0 | 单元格 | 单元格 | 单元格 | 单元格 | 单元格 |
6 | 4 | 单元格 | 单元格 | 单元格 | 单元格 | 单元格 |
4 | 单元格 | 单元格 | 单元格 | 单元格 | 单元格 | 单元格 |
1 | 单元格 | 单元格 | 单元格 | 单元格 | 单元格 | 单元格 |
2 | 单元格 | 单元格 | 单元格 | 单元格 | 单元格 | 单元格 |
我该如何利用pandas和numpy将这几个表中的信息匹配起来,然后作为特征输入到MLP中,目标是预测一对药物的作用分数
补充:这三个表格非常大,要如何通过chunk_sizes和merge进行处理呢?又要怎么输入MLP中呢?
基于new bing的编写:
首先,我们需要读取这几个csv文件,并将其转换为pandas的DataFrame格式。例如:
import pandas as pd
# 读取表格1
df1 = pd.read_csv('table1.csv')
# 读取表格2
df2 = pd.read_csv('table2.csv', index_col='药物名')
# 读取表格3
df3 = pd.read_csv('table3.csv', index_col='药物ID')
然后,我们需要将这些DataFrame合并起来,可以使用pandas的merge函数实现:
# 合并表格1和表格2
merged_df = pd.merge(df1, df2, left_on=['药物row'], right_on=['药物名'])
merged_df = pd.merge(merged_df, df2, left_on=['药物col'], right_on=['药物名'], suffixes=['_row', '_col'])
# 合并表格3
merged_df = pd.merge(merged_df, df3, left_on=['药物row_ID'], right_index=True)
merged_df = pd.merge(merged_df, df3, left_on=['药物col_ID'], right_index=True, suffixes=['_row', '_col'])
此时,merged_df中就包含了所有表格的信息,可以进行特征工程处理后输入到MLP中进行训练和预测。
具体的特征工程处理方法需要根据数据的具体情况进行选择,以达到更好的预测效果。一般来说,可以考虑对药物之间的关联性、药物的属性特征等进行特征提取和处理。具体的特征处理方法可以使用numpy实现,例如:
import numpy as np
# 存储特征的数组
features = []
# 遍历每一对药物
for index, row in merged_df.iterrows():
# 构造药物对的特征向量
feature_vector = np.hstack([
row[['特征1_row', '特征2_row', '特征3_row', '特征4_row', '特征5_row', '特征6_row']].values,
row[['特征1_col', '特征2_col', '特征3_col', '特征4_col', '特征5_col', '特征6_col']].values,
# 其他特征的处理
])
# 添加特征向量到特征数组中
features.append(feature_vector)
# 将特征数组转换为numpy数组
features = np.array(features)
最后,在将特征输入到MLP进行训练和预测之前,需要将目标值提取出来并进行标准化操作,例如:
# 提取目标值
target = merged_df['作用分数(target)'].values
# 对目标值进行标准化处理
mean = np.mean(target)
std = np.std(target)
target_normalized = (target - mean) / std
接着,就可以将特征和目标值输入到MLP中进行训练和预测了。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,我们需要将三个csv表格读入到pandas的DataFrame中:
import pandas as pd
drug_combinations = pd.read_csv("drug_combinations.csv")
drug_names = pd.read_csv("drug_names.csv")
drug_features = pd.read_csv("drug_features.csv")
接下来,我们需要将这些数据根据药物ID进行匹配和合并。我们可以使用pandas的merge函数来实现这个过程。
# 匹配药物组合数据中的药物名
drug_combinations = drug_combinations.merge(drug_names[['药物ID', '药物名']], left_on='药物1ID', right_on='药物ID', suffixes=(None, '_1'))
drug_combinations = drug_combinations.merge(drug_names[['药物ID', '药物名']], left_on='药物2ID', right_on='药物ID', suffixes=(None, '_2'))
# 合并药物特征数据
drug_features.columns = ['药物ID'] + ['特征' + str(i) for i in range(1, 31)]
drug_combinations = drug_combinations.merge(drug_features, left_on='药物1ID', right_on='药物ID').merge(drug_features, left_on='药物2ID', right_on='药物ID')
现在,我们已经将三个数据表格合并到了一个DataFrame中,我们可以根据需要进行特征选择和标准化。在这个例子中,我们只选择了药物特征作为输入,预测药物作用分数作为输出。
import numpy as np
from sklearn.preprocessing import StandardScaler
X = drug_combinations.iloc[:, 6:].values # 特征选择
y = drug_combinations['作用分数'].values
scaler = StandardScaler() # 数据标准化
X = scaler.fit_transform(X)
print(f"输入特征维度: {X.shape}")
print(f"输出特征维度: {y.shape}")
最后,我们可以使用该数据来训练和测试MLP模型。以下是一些示例代码,可以根据需要进行修改和扩展。
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import r2_score
model = MLPRegressor(hidden_layer_sizes=(64, 32), alpha=0.01, max_iter=500)
model.fit(X, y)
y_pred = model.predict(X)
r2 = r2_score(y, y_pred)
print(f"R2 score: {r2}")
如果我的回答解决了您的问题,请采纳!
引用chatGPT作答,首先,我们需要使用 Pandas 将 CSV 文件读取为数据帧(DataFrame)对象,然后将数据帧连接在一起,以便匹配药物 ID 和药物特征。
以下是可能的代码实现:
import pandas as pd
import numpy as np
# 读取 CSV 文件
df1 = pd.read_csv('data1.csv')
df2 = pd.read_csv('data2.csv')
df3 = pd.read_csv('data3.csv')
# 将数据帧连接在一起
df = pd.merge(df1, df2, left_on='药物row', right_on='药物名')
df = pd.merge(df, df2, left_on='药物col', right_on='药物名', suffixes=('_row', '_col'))
df = pd.merge(df, df3, left_on='药物ID_row', right_on='药物ID')
df = pd.merge(df, df3, left_on='药物ID_col', right_on='药物ID', suffixes=('_row', '_col'))
# 删除不必要的列
df.drop(['药物名_row', '药物名_col', '药物ID_row', '药物ID_col'], axis=1, inplace=True)
# 将特征数据转换为 NumPy 数组
X = df.iloc[:, 2:].to_numpy()
# 将目标数据转换为 NumPy 数组
y = df['作用分数(target)'].to_numpy()
上述代码中,我们首先读取三个 CSV 文件,然后使用 Pandas 的 merge() 函数将它们连接在一起,以便匹配药物 ID 和药物特征。我们使用 suffixes 参数指定连接后列名的后缀,以避免列名冲突。
然后,我们删除不必要的列,只保留药物特征和目标数据。最后,我们使用 iloc[] 方法获取特征数据并将其转换为 NumPy 数组,使用 to_numpy() 方法获取目标数据并将其转换为 NumPy 数组。
现在,我们可以将 X 和 y 作为特征和目标数据输入到 MLP 中进行训练和预测。