利用pandas和numpy进行数据处理传入MLP中

假如我有3个csv表格,如下:

|

组合编码药物row药物col作用分数(target)
1药物1药物26
2药物3药物47.0
药物名药物ID
药物11
药物32
药物43
药物54
药物25
药物66
药物ID特征1特征2特征3特征4特征5特征6
30单元格单元格单元格单元格单元格
64单元格单元格单元格单元格单元格
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 中进行训练和预测。

可以借鉴下
https://www.bilibili.com/read/cv8144752/