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模型搭建和训练奠定了基础。

        后续文章会陆续跟新,

                                希望文章对你有所帮助! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965632.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

给排水 笔记

给水管(上水管) 概述 专用于上水系统的管道。 单位 基本单位解读 项概述符号表示备注公称直径(DN)指管道的平均外直径。是行业描述的标准,是参考值,并非指任何直径。-理论外直径。公称外径&#xff08…

React 设计模式:实用指南

React 提供了众多出色的特性以及丰富的设计模式,用于简化开发流程。开发者能够借助 React 组件设计模式,降低开发时间以及编码的工作量。此外,这些模式让 React 开发者能够构建出成果更显著、性能更优越的各类应用程序。 本文将会为您介绍五…

C++11详解(三) -- 可变参数模版和lambda

文章目录 1.可变模版参数1.1 基本语法及其原理1.2 包扩展1.3 empalce系列接口1.3.1 push_back和emplace_back1.3.2 emplace_back在list中的使用(模拟实现) 2. lambda2.1 lambda表达式语法2.2 lambda的捕捉列表2.3 lambda的原理 1.可变模版参数 1.1 基本…

【数据结构】_时间复杂度相关OJ(力扣版)

目录 1. 示例1:消失的数字 思路1:等差求和 思路2:异或运算 思路3:排序+二分查找 2. 示例2:轮转数组 思路1:逐次轮转 思路2:三段逆置(经典解法) 思路3…

OSPF基础(2):数据包详解

OSPF数据包(可抓包) OSPF报文直接封装在IP报文中,协议号89 头部数据包内容: 版本(Version):对于OSPFv2,该字段值恒为2(使用在IPV4中);对于OSPFv3,该字段值恒为3(使用在IPV6中)。类型(Message Type):该OSPF报文的类型。…

第二篇:前端VSCode常用快捷键-以及常用技巧

继续书接上一回, 我们讲解了常用的vscode 插件。 vscode 常用的插件地址: 前端VSCode常用插件-CSDN博客 本篇文章,主要介绍vscode常用的快捷键,可以提高我们的开发效率。 一、VSCode常用的快捷键 注意,其实这个快捷…

【LeetCode】152、乘积最大子数组

【LeetCode】152、乘积最大子数组 文章目录 一、dp1.1 dp1.2 简化代码 二、多语言解法 一、dp 1.1 dp 从前向后遍历, 当遍历到 nums[i] 时, 有如下三种情况 能得到最大值: 只使用 nums[i], 例如 [0.1, 0.3, 0.2, 100] 则 [100] 是最大值使用 max(nums[0…i-1]) * nums[i], 例…

vue生命周期及其作用

vue生命周期及其作用 1. 生命周期总览 2. beforeCreate 我们在new Vue()时,初始化一个Vue空的实例对象,此时对象身上只有默认的声明周期函数和事件,此时data,methods都未被初始化 3. created 此时,已经完成数据观测&#xff0…

什么是三层交换技术?与二层有什么区别?

什么是三层交换技术?让你的网络飞起来! 一. 什么是三层交换技术?二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱 大家好…

e2studio开发RA2E1(5)----GPIO输入检测

e2studio开发RA2E1.5--GPIO输入检测 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置GPIO口配置按键口配置按键口&Led配置R_IOPORT_PortRead()函数原型R_IOPORT_PinRead()函数原型代码 概述 本篇文章主要介绍如何…

【LLM】为何DeepSeek 弃用MST却采用Rejection采样

文章目录 拒绝采样 Rejection sampling🎯马尔可夫搜索树 🌳RFT和SFT1. RFT和SFT的区别2. 如何将RFT用于数学推理任务? Reference 在提升大语言模型(LLM)推理能力时,拒绝采样(Rejection Sampling…

股指入门:股指期货是什么意思?在哪里可以做股指期货交易?

股指期货是一种以股票指数为标的物的期货合约,也可以称为股票指数期货或期指。 股指期货是什么意思? 股指期货是一种金融衍生品,其标的资产是股票市场上的股指,例如标普500指数、道琼斯工业平均指数、上证50指数等。 股指期货允…

前端构建工具大比拼:Vite、Webpack、Parcel、esbuild 等热门工具使用分析

前端构建工具大比拼:Vite、Webpack、Parcel、esbuild 等热门工具使用分析 随着前端技术的不断发展,构建工具成为了每个前端项目的核心部分。通过合适的构建工具,我们能够优化开发效率、提升构建速度,并最终实现更加高效和灵活的开…

安装和使用 Ollama(实验环境windows)

下载安装 下载 https://ollama.com/download/windows 安装 Windows 安装 如果直接双击 OllamaSetup.exe 安装,默认会安装到 C 盘,如果需要指定安装目录,需要通过命令行指定安装地址,如下: # 切换到安装目录 C:\Use…

node.js使用mysql2对接数据库

一、引言 在现代Web开发中,Node.js作为一种高效、轻量级的JavaScript运行时环境,已经广泛应用于后端服务的开发中。而MySQL,作为一个广泛使用的关系型数据库管理系统(RDBMS),提供了强大的数据存储和查询功能…

Unity 快速入门 1 - 界面操作

本项目将快速介绍 Unity 6的基本操作和功能,下载附件的项目,解压到硬盘,例如 D:\Unity Projects\, 注意整个文件路径中只有英文、空格或数字,不要有中文或其他特殊符合。 1. 打开Unity Hub,点击右上角的 O…

携程Java开发面试题及参考答案 (200道-上)

说说四层模型、七层模型。 七层模型(OSI 参考模型) 七层模型,即 OSI(Open System Interconnection)参考模型,是一种概念模型,用于描述网络通信的架构。它将计算机网络从下到上分为七层,各层的功能和作用如下: 物理层:物理层是计算机网络的最底层,主要负责传输比特流…

云轴科技ZStack+海光DCU:率先推出DeepSeek私有化部署方案

针对日益强劲的AI推理需求和企业级AI应用私有化部署场景(Private AI),云轴科技ZStack联合海光信息,共同推动ZStack智塔全面支持DeepSeek V3/R1/Janus Pro系列模型,基于海光DCU实现高性能适配,为企业提供安全…

通信易懂唠唠SOME/IP——SOME/IP协议简介

一 简介 1.1 面向服务的中间件 SOME/IP是Scalable service-Oriented MiddlewarE over IP (SOME/IP)的缩写,基于IP的可扩展面向服务的中间件。 1.2 广泛应用于汽车嵌入式通信 SOME/IP是一种支持远程通信的汽车/嵌入式通信协议 。支持远程过程调用(RPC…

游戏引擎学习第89天

回顾 由于一直没有渲染器,终于决定开始动手做一个渲染器,虽然开始时并不确定该如何进行,但一旦开始做,发现这其实是正确的决定。因此,接下来可能会花一到两周的时间来编写渲染器,甚至可能更长时间&#xf…