欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > GNN多任务预测模型实现(二):将EXCEL数据转换为图数据

GNN多任务预测模型实现(二):将EXCEL数据转换为图数据

2025/2/11 4:36:36 来源:https://blog.csdn.net/m0_63930592/article/details/145479129  浏览:    关键词:GNN多任务预测模型实现(二):将EXCEL数据转换为图数据

目录

一. 引言

二. 加载和检查数据

三. 提取特征和标签

 四. 标准化特征

 五. 构建节点索引

六. 构建边及其特征 

七. 总结 

八. 结语


一. 引言

在图神经网络(Graph Neural Networks, GNNs)的多任务学习场景中,数据预处理是至关重要的一步。尤其是当我们的数据存储在表格格式(如Excel文件)中时,如何有效地将其转换为图数据格式,是搭建GNN模型的基础。


二. 加载和检查数据

      第一步是加载数据并检查其格式。我们通常使用 pandas 库来读取和操作Excel文件。以下代码实现了从Excel文件中加载数据,并打印前几行以检查格式是否正确。

import pandas as pd# 从Excel文件中读取数据
df = pd.read_excel('Participation_prediction_data.xlsx')# 打印前几行数据以检查数据格式
print(df.head())

 知识点

  • pandas.read_excel():用于从Excel文件中读取数据并加载为DataFrame对象。
  • DataFrame.head():返回前5行数据,用于快速检查数据格式和内容。

三. 提取特征和标签

        在机器学习任务中,我们通常需要将数据分为特征(features)和标签(labels)。在本例中,我们从表格中提取三列作为特征,并将“讨论参与”列作为标签。 

import numpy as np# 提取特征列并转换为numpy数组
features = df[['讨论参与', '作业提交', '在线课堂出席时长']].values# 提取标签列并确保其为整数类型
labels = df['讨论参与'].values.astype(int)

知识点

  • DataFrame的列选择:通过列名选择所需的列。
  • .values 属性:将DataFrame转换为NumPy数组。
  • 数据类型转换:通过 .astype() 将数据类型转换为所需的类型。

 四. 标准化特征

        在模型训练之前,对特征进行标准化处理(即归一化到均值为0,标准差为1的范围)通常能够提高模型的收敛速度和性能。 

from sklearn.preprocessing import StandardScaler# 初始化StandardScaler对象
scaler = StandardScaler()# 对特征进行标准化处理
features = scaler.fit_transform(features)

知识点

  • StandardScaler:用于对数据进行标准化处理。
  • fit_transform():同时计算均值和标准差,并对数据进行标准化。

 五. 构建节点索引

在图数据中,每个节点通常需要一个唯一的索引。在本例中,我们使用DataFrame的索引作为节点的索引。 

# 获取所有节点的索引
node_indices = df.index.values

知识点

  • DataFrame.index.values:返回DataFrame的索引,通常是一个NumPy数组。

六. 构建边及其特征 

        边的构建是图数据生成的关键步骤。在本例中,我们根据以下条件构建边:

  • 两个节点的时间差为1。
  • 两个节点属于同一学生。

同时,我们为每条边定义了特征,包括源节点的“讨论参与”、“作业提交”和“在线课堂出席时长”。

import torch# 初始化边列表和边特征列表
edges = []
edge_features = []for i in range(len(node_indices)):for j in range(len(node_indices)):# 如果两个节点的时间差为1且属于同一学生,则添加一条边if abs(df.loc[i, '时间'] - df.loc[j, '时间']) == 1 and df.loc[i, '学生id'] == df.loc[j, '学生id']:edges.append([i, j])edge_features.append([df.loc[i, '讨论参与'],df.loc[i, '作业提交'],df.loc[i, '在线课堂出席时长']])# 确保边列表和边特征列表长度一致
if len(edges) != len(edge_features):raise ValueError("Edge list and edge feature list should have the same length.")# 将边列表转换为张量,并转置为 [2, num_edges] 形状
edge_index = torch.tensor(edges, dtype=torch.long).t().contiguous()# 将边特征列表转换为张量
edge_attr = torch.tensor(edge_features, dtype=torch.float)

知识点

  • 嵌套循环:用于遍历所有可能的节点对。
  • DataFrame.loc[]:用于按索引访问DataFrame中的行。
  • 条件判断:用于确定是否添加一条边。
  • torch.tensor():将Python列表转换为PyTorch张量。
  • .t() 和 .contiguous():用于将边列表张量转置为 [2, num_edges] 形状。

七. 总结 

        通过上述步骤,我们成功地将Excel表格数据转换为了图数据格式,包括节点特征、节点索引、边列表和边特征。这些数据可以直接输入到GNN模型中进行训练和预测。

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
import torch# 从Excel文件中读取数据
df = pd.read_excel('Participation_prediction_data.xlsx')# 打印前几行数据以检查数据格式
print(df.head())# 提取特征列并转换为numpy数组
features = df[['讨论参与', '作业提交', '在线课堂出席时长']].values# 提取标签列并确保其为整数类型
labels = df['讨论参与'].values.astype(int)# 初始化StandardScaler对象
scaler = StandardScaler()# 对特征进行标准化处理
features = scaler.fit_transform(features)# 获取所有节点的索引
node_indices = df.index.values# 初始化边列表和边特征列表
edges = []
edge_features = []for i in range(len(node_indices)):for j in range(len(node_indices)):if abs(df.loc[i, '时间'] - df.loc[j, '时间']) == 1 and df.loc[i, '学生id'] == df.loc[j, '学生id']:edges.append([i, j])edge_features.append([df.loc[i, '讨论参与'],df.loc[i, '作业提交'],df.loc[i, '在线课堂出席时长']])if len(edges) != len(edge_features):raise ValueError("Edge list and edge feature list should have the same length.")edge_index = torch.tensor(edges, dtype=torch.long).t().contiguous()
edge_attr = torch.tensor(edge_features, dtype=torch.float)

八. 结语

通过将Excel数据转换为图数据格式,我们为后续的GNN模型搭建和训练奠定了基础。

        后续文章会陆续跟新,

                                希望文章对你有所帮助! 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com