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模型搭建和训练奠定了基础。
后续文章会陆续跟新,
希望文章对你有所帮助!
相关文章:
GNN多任务预测模型实现(二):将EXCEL数据转换为图数据
目录 一. 引言 二. 加载和检查数据 三. 提取特征和标签 四. 标准化特征 五. 构建节点索引 六. 构建边及其特征 七. 总结 八. 结语 一. 引言 在图神经网络(Graph Neural Networks, GNNs)的多任务学习场景中,数据预处理是至关重要的一…...
【机器学习】K-Nearest Neighbor KNN算法原理简介及要点
KNN算法用于分类 简介KNN分类算法的流程距离度量K值选择分类表决加权分类表决 简介 KNN的全称是K Nearest Neighbors. 这种算法可以被用来进行分类,原理是根据离特征点最近的K个点所属的类别进行分类。 KNN分类算法的流程 KNN算法的整体流程是我们需要将训练数据…...
ARM嵌入式学习--第十三天(I2C)
I2C --介绍 I2C(Inter-intergrated Circuit 集成电路)总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有俩根双向的信号线,一根数据线SDA用于收发数据&…...
error: externally-managed-environment
当你执行 pip3 install ipykernel 时遇到 error: externally-managed-environment 错误,这是因为从 Python 3.11 开始,为了避免破坏系统级 Python 环境,引入了外部管理环境(externally - managed environment)的概念&a…...
使用PyCharm进行Django项目开发环境搭建
如果在PyCharm中创建Django项目 1. 打开PyCharm,选择新建项目 2.左侧选择Django,并设置项目名称 3.查看项目解释器初始配置 4.新建应用程序 执行以下操作之一: 转到工具| 运行manage.py任务或按CtrlAltR 在打开的manage.pystartapp控制台…...
移动机器人规划控制入门与实践:基于navigation2 学习笔记(一)
课程实践: (1)手写A*代码并且调试,总结优缺点 (2)基于Gazebo仿真,完成给定机器人在给定地图中的导航调试 (3)使用Groot设计自己的导航行为树 掌握一门技术 规划控制概述 常见移动机器人...
TCP服务器与客户端搭建
一、思维导图 二、给代码添加链表 【server.c】 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <fcntl.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.…...
flutter Selector 使用
在 Flutter 中,Selector 是 provider 包中的一个组件,用于在状态管理中高效地选择和监听特定部分的状态变化。Selector 可以帮助你避免不必要的重建,只在你关心的数据发生变化时才重建 widget。 基本用法 Selector 的基本用法如下ÿ…...
deepseek来讲lua
Lua 是一种轻量级、高效、可嵌入的脚本语言,广泛应用于游戏开发、嵌入式系统、Web 服务器等领域。以下是 Lua 的主要特点和一些基本概念: 1. 特点 轻量级:Lua 的核心非常小,适合嵌入到其他应用程序中。高效:Lua 的执…...
【大数据技术】本机DataGrip远程连接虚拟机MySQL/Hive
本机DataGrip远程连接虚拟机MySQL/Hive datagrip-2024.3.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本机的DataGrip连接虚拟机的MySQL数据库和Hive数据库,提高编程效率。 安装DataGrip 请按照以下步骤安装DataGrip软…...
【C++篇】C++11新特性总结1
目录 1,C11的发展历史 2,列表初始化 2.1C98传统的{} 2.2,C11中的{} 2.3,C11中的std::initializer_list 3,右值引用和移动语义 3.1,左值和右值 3.2,左值引用和右值引用 3.3,…...
redis之RDB持久化过程
redis的rdb持久化过程 流程图就想表达两点: 1.主进程会fork一个子进程,子进程共享主进程内存数据(fork其实是复制页表),子进程读取数据并写到新的rdb文件,最后替换旧的rdb文件。 2.在持久化过程中主进程接收到用户写操作&#x…...
操作系统—进程与线程
补充知识 PSW程序状态字寄存器PC程序计数器:存放下一条指令的地址IR指令寄存器:存放当前正在执行的指令通用寄存器:存放其他一些必要信息 进程 进程:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位…...
CV(11)-图像分割
前言 仅记录学习过程,有问题欢迎讨论 图像分割 语义分割不需要区分具体的个体,实例分割需要 反卷积/转置卷积: 它并不是正向卷积的完全逆过程。反卷积是一种特殊的正向卷积,先按照一定的比例通过补0 来扩大输入图像的尺寸&…...
【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)
ps.源码放在最后面 设计IIR数字滤波器可以看这里:利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程) 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合,简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…...
STM32上部署AI的两个实用软件——Nanoedge AI Studio和STM32Cube AI
1 引言 STM32 微控制器在嵌入式领域应用广泛,因为它性能不错、功耗低,还有丰富的外设,像工业控制、智能家居、物联网这些场景都能看到它的身影。与此同时,人工智能技术发展迅速,也逐渐融入各个行业。 把 AI 部署到 STM…...
Next.js简介:现代 Web 开发的强大框架(ChatGPT-4o回答)
prompt: 你是一位专业的技术博客撰稿人,你将写一篇关于介绍next.js这个开发框架的技术博文,语言是中文,风格专业严谨,用词自然、引人入胜且饶有趣味 在现代 Web 开发的世界中,选择合适的框架可以显著提升开发效率和应用…...
Kubernetes与Deepseek
人工智能(AI)与云计算的融合正在加速,而 Kubernetes(K8s) 正在成为 AI 发展的基础设施之一。作为一匹 AI 领域的黑马,Deepseek 需要依靠强大的计算资源和高效的管理工具来训练和部署其大规模 AI 模型&#…...
qt+gstreamer快速创建一个流媒体播放器
目录 1 前言 2 playbin3 3 videooverlay 4 关键代码 5 运行示例 1 前言 最近因为工作需求,要实现一个桌面流媒体播放器来支持常见的流媒体协议,经过调研发现使用gstreamer配合一些桌面级的gui应用开发工具如qt可以进行快速实现,在此进…...
RAID独立硬盘冗余阵列
目录 一、RAID基本功能 二、RAID常见级别 三、实现方式 1、软件磁盘阵列 2、硬件磁盘阵列 四、热备盘 RAID(Redundant Array of Independent Disks)是一种通过将多个硬盘组合成一个逻辑单元来提升存储性能、冗余性或两者兼具的技术。 一、RAID基本…...
DeepSeek V2报告阅读
概况 MoE架构,236B参数,每个token激活参数21B,支持128K上下文。采用了包括多头潜在注意力(MLA)和DeepSeekMoE在内的创新架构。MLA通过将KV缓存显著压缩成潜在向量来保证高效的推理,而DeepSeekMoE通过稀疏计…...
超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程
超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程 引言 在游戏开发领域,第一人称射击(FPS)游戏一直是最受欢迎的类型之一。从经典的《反恐精英》(CS)到现代的《使命召唤》(Call of Duty),FPS游戏凭借其紧张刺激的游戏体验和高度沉浸感,吸引了无数玩家。如果你是一…...
【开发电商系统的技术选型】
开发电商系统的技术选型是一个复杂而细致的过程,涉及到多个方面和层面的考量。以下是一份详细的技术选型指南: 前端技术 基础技术 HTML5/CSS3/JavaScript:这是构建现代网页应用的基础。HTML5提供了丰富的语义元素,便于搜索引擎优…...
JAVA异步的TCP 通讯-服务端
一、服务端代码示例 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousServerSocketChannel; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.Completion…...
零基础Vue入门6——Vue router
本节重点: 路由定义路由跳转 前面几节学习的都是单页面的功能(都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html),涉及到项目研发都是有很多页面的,这里就需要用到路由(vue route…...
关于JS继承的七种方式和理解
1.原型链继承 function Fun1() {this.name parentthis.play [1, 2, 3] } function Fun2() {this.type child }Fun2.prototype new Fun1()let s1 new Fun2() let s2 new Fun2() s1.play.push(4) console.log(s1.play, s2.play) // [1, 2, 3, 4] [1, 2, 3, 4]可以看到两个…...
Elasticsearch的使用场景、数据量级及选择原因?为什么没有用Hbase?
目录 Elasticsearch 的使用场景、数据量级及选择原因 1. Elasticsearch 的使用场景 2. 数据量级 3. 选择 Elasticsearch 的原因 4. 为什么选择 Elasticsearch 而不是 HBase 5. 数据量级对比 6. 总结 Elasticsearch 的使用场景、数据量级及选择原因 1. Elasticsearch 的…...
Oracle迁移到MySQL
Oracle迁移到MySQL业务需要全面改造适配,数据库对象和业务SQL语法需要一对一映射分析如何改写,根据业务使用实际情况评估改造适配成本较高。 目前,已有数据库产品能力缺少自动化迁移工具,需要依赖生态产品能力,比如云和…...
.Net Core笔记知识点(跨域、缓存)
设置前端跨域配置示例: builder.Services.AddCors(option > {option.AddDefaultPolicy(policy > {policy.WithOrigins(originUrls).AllowAnyMethod().AllowAnyHeader().AllowCredentials();});});var app builder.Build();app.UseCors(); 【客户端缓存】接…...
【Vue】在Vue3中使用Echarts的示例 两种方法
文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来,属于正常现象,多进几次就行 开始使用前,记得先…...
