【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建

系列文章目录

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现
【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建
【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用

在一个人体姿态估计的任务中,需要用深度学习模型来进行序列分类。
时间花费最多的是在数据集的处理上。
这一节主要内容就是对数据集的处理。

文章目录

  • 系列文章目录
  • 前言
  • 一、任务问题和数据采集
    • 1 任务问题
    • 2 原始数据采集
  • 二、数据处理和生成样本
    • 1 data_merge2single.py
    • 2 data_plot.py
    • 3 data_split.py
  • 三、制作标签文件和数据集划分文件
    • 1 target 文件
    • 2 DatasetGroup 文件
  • 四、总结
    • 1 数据集示例
    • 2 数据集下载路径


前言

类似于part1的工作,这部分对数据集进行了分析处理


一、任务问题和数据采集

1 任务问题

人体姿态估计:
在人体左右腿放置加速度传感器,分别采集横滚角和俯仰角。传感器生成高频数据,对不同状态下采集的数据进行分类,可以识别人体姿态。

2 原始数据采集

采集6类动作姿态,每种动作记录10次过程量。
蹲姿到站立(右蹲) ------ 1
蹲姿到站立(左蹲)----- 2
行进 ----------------------- 3
原地踏步 ----------------- 4
站立到蹲姿(右蹲) ------ 5
站立到蹲姿(左蹲) ------ 6

data_merge 文件夹下存放采集到的原始数据。
data_merge_1.xlsx
data_merge_2.xlsx
data_merge_3.xlsx
data_merge_4.xlsx
data_merge_5.xlsx
data_merge_6.xlsx
每一个 xlsx 文件对应一类动作姿态,保存有10组实验数据。

以 data_merge_1.xlsx 文件内容为例:
在这里插入图片描述

二、数据处理和生成样本

1 data_merge2single.py

将每类动作姿态的data_merge_x.xlsx文件分解,每一组实验单独保存在一个文件中。

"""
@file name:data_merge2single.py
@desc: 得到每次实验的单独数据
"""
import os
import pandas as pd'''
/****************************************************/路径指定
/****************************************************/
'''
# ----------------------------------------------------#
#           数据路径
# ----------------------------------------------------#
ROOT_path = "DATA/RT_Position_dataset"
merge_path = os.path.join(ROOT_path, "data_merge")
path_list = os.listdir(merge_path)
# print(path_list)
# ['data_merge_1.xlsx', 'data_merge_2.xlsx', 'data_merge_3.xlsx', 'data_merge_4.xlsx', 'data_merge_5.xlsx', 'data_merge_6.xlsx', '~$data_merge_1.xlsx']single_path = os.path.join(ROOT_path, "data_single_test")
if not os.path.exists(single_path):os.mkdir(single_path)# ----------------------------------------------------#
#           对每个文件进行读取
# ----------------------------------------------------#
for i in range(0, len(path_list)):  # 遍历 data_merge_x.xlsx 文件file_path = os.path.join(merge_path, path_list[i])save_path = os.path.join(single_path, str(i + 1))if not os.path.exists(save_path):os.makedirs(save_path)print("----------------------------------------------------")print(file_path)# 使用pandas读取Excel文件df = pd.read_excel(file_path)# 计算总列数total_columns = df.shape[1]index = 0# 每四列分割并保存(在实验中,分别采集左右腿的俯仰角和横滚角,特征数目为4)for start_col in range(0, total_columns, 4):index += 1# 确定每个文件的列范围end_col = min(start_col + 4, total_columns)# 提取四列数据sub_df = df.iloc[:, start_col:end_col]# 保存到新的xlsx文件sub_df.to_csv(f'{save_path}/{str(i + 1)}_{index}.csv', index=False)

data_singe_test 文件夹下存放每组实验的单独数据。
在这里插入图片描述

2 data_plot.py

分析每个类别下的每一组实验,不是所有数据都有用,得到有效数据区间

"""
@file name:data_plot.py
@desc: 绘制每组实验的数据图,分析有效数据区间
"""
import pandas as pd
import matplotlib.pyplot as plt# ----------------------------------------------------#
#           数据路径
# ----------------------------------------------------#
file_path = "DATA/RT_Position_dataset/data_single_test/2/2_5.csv"df = pd.read_csv(file_path, header=2)  # 使用pandas读取Excel文件
# 跳过前两行数据
# df = df.iloc[2:]# 绘制波形图
plt.figure(figsize=(12, 8))for i, column in enumerate(df.columns):plt.subplot(len(df.columns), 1, i+1)plt.plot(df[column])plt.title(f'Column: {column}')plt.tight_layout()
plt.show()

在这里插入图片描述
后续的工作就是从每组实验的有效数据区间中生成样本。

log = {'1': [[130, 300], [100, 250], [160, 310], [130, 300], [120, 280],[200, 370], [120, 270], [100, 270], [100, 290], [160, 320]],'2': [[100, 250], [290, 400], [200, 360], [180, 320], [180, 310],[150, 290], [160, 300], [140, 270], [120, 270], [100, 260]],'3': [[100, 400], [100, 370], [100, 450], [100, 450], [100, 450],[150, 450], [130, 450], [100, 400], [150, 420], [150, 400]],'4': [[100, 420], [100, 420], [200, 420], [200, 420], [200, 420],[200, 420], [200, 420], [150, 400], [100, 400], [200, 400]],'5': [[100, 300], [170, 300], [100, 300], [100, 250], [250, 400],[100, 270], [150, 300], [100, 280], [120, 270], [130, 270]],'6': [[120, 300], [150, 250], [100, 300], [50, 300], [100, 240],[170, 310], [50, 250], [80, 280], [80, 280], [100, 300]],}  # 记录每组实验的有效数据区间

3 data_split.py

针对每一组实验的有效区间,提取并生成样本

"""
@file name:data_split.py
@desc: 分割并生成样本
"""
import os
import pandas as pdlog = {'1': [[130, 300], [100, 250], [160, 310], [130, 300], [120, 280],[200, 370], [120, 270], [100, 270], [100, 290], [160, 320]],'2': [[100, 250], [290, 400], [200, 360], [180, 320], [180, 310],[150, 290], [160, 300], [140, 270], [120, 270], [100, 260]],'3': [[100, 400], [100, 370], [100, 450], [100, 450], [100, 450],[150, 450], [130, 450], [100, 400], [150, 420], [150, 400]],'4': [[100, 420], [100, 420], [200, 420], [200, 420], [200, 420],[200, 420], [200, 420], [150, 400], [100, 400], [200, 400]],'5': [[100, 300], [170, 300], [100, 300], [100, 250], [250, 400],[100, 270], [150, 300], [100, 280], [120, 270], [130, 270]],'6': [[120, 300], [150, 250], [100, 300], [50, 300], [100, 240],[170, 310], [50, 250], [80, 280], [80, 280], [100, 300]],}
'''
/****************************************************/路径指定
/****************************************************/
'''
ROOT_path = "DATA/RT_Position_dataset"
# ----------------------------------------------------#
#    单次实验数据路径
# ----------------------------------------------------#
single_test_path = os.path.join(ROOT_path, "data_single_test")
# 样本保存路径
save_path = os.path.join(ROOT_path, "dataset")
if not os.path.exists(save_path):os.mkdir(save_path)
# ----------------------------------------------------#
#    设置数据样本长度len_seq(设置每个文件的行数)
# ----------------------------------------------------#
rows_per_file = 16'''
/****************************************************/导出数据样本
/****************************************************/
'''
index = 0
# 使用os.listdir()列出文件夹中的所有内容(包括子文件夹和文件)
contents = os.listdir(single_test_path)  # ['1', '2', '3', '4', '5', '6']
# 使用列表推导式过滤出所有子文件夹
folders = [content for content in contents if os.path.isdir(os.path.join(single_test_path, content))]
# 遍历文件夹中的所有子文件夹
for folder in folders:  # ['1', '2', '3', '4', '5', '6']folder_path = os.path.join(single_test_path, folder)# print(folder_path)# 遍历子文件夹中的所有文件for csv_file in os.listdir(folder_path):part = csv_file.split('_')[1].split('.')[0]  # part = 1,2,3,4,5,6,7,8,9,10file_path = os.path.join(folder_path, csv_file)# ----------------------------------------------------------------# 使用pandas读取Excel文件df = pd.read_csv(file_path, header=2)# 读取每次实验有效数据序列索引[start, end] = log[folder][int(part) - 1]# 选择每次实验中的有效数据df_selected = df.iloc[start:end]# 有效数据的总行数total_rows = len(df_selected)# ----------------------------------------------------##    核心的参数调整# ----------------------------------------------------#number_of_files = 200  # 每次实验的有效数据中,可以生成样本数的上限window_size = rows_per_file  # 滑动窗口的大小step_size = 3  # 滑动窗口的步长for file_number in range(number_of_files):# 计算滑动窗口的起始和结束索引start_index = file_number * step_sizeend_index = start_index + window_size# 防止结束索引超出数据范围if end_index > total_rows:break# 提取数据df_subset = df_selected.iloc[start_index:end_index]index += 1# 保存到新的csv文件df_subset.to_csv(f'{save_path}/Movement4_{index}.csv', index=False)print(f"{folder}输出的文件索引截止到{index}")

从所有实验数据中,生成样本并保存到 dataset 文件夹下。
这里的超参数设置:

  • rows_per_file = 16 样本数据的长度是16,size是[16,4]
  • number_of_files = 200 每次实验的有效数据中,可以生成样本数的上限
  • step_size = 3 滑动窗口的步长,步长过长数据无法充分利用,过小容易过拟合

    1~500索引文件对应类别1,以此类推。共生成3730个样本。在这里插入图片描述

三、制作标签文件和数据集划分文件

上述步骤已生成样本,仿照 part1 文章中提及的数据集,制作 target 文件和 DatasetGroup 文件
本节手动制作两个csv文件。

1 target 文件

新建一个Movement4_target.csv文件,两列分别记录索引和对应类别。索引为1 ~ 3730,类别为1 ~ 6。

2 DatasetGroup 文件

新建一个Movement4_DatasetGroup.csv文件,两列分别记录索引和对应数据集。索引为1 ~ 3730,数据集组别为1 ~ 3。

在这里插入图片描述

将制作的 target 文件和 DatasetGroup 文件 保存到 groups 文件夹下。

四、总结

1 数据集示例

最终得到的数据集文件如下所示。
核心是 dataset 和 groups 文件夹。
在这里插入图片描述

2 数据集下载路径

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(6)--Keras项目详解

目录 一.项目介绍 二.项目流程详解 2.1.导入所需要的工具包 2.2.输入参数 2.3.获取图像路径并遍历读取数据 2.4.数据集的切分和标签转换 2.5.网络模型构建 2.6.绘制结果曲线并将结果保存到本地 三.完整代码 四.首次运行结果 五.学习率对结果的影响 六.Dropout操作…

一个基于electron自动化桌面应用-流程图构建

前期工作已搞定,现在可以搭建桌面应用了。这个阶段可以结合前面定义好的数据格式构建流程图。 模板 还是使用熟悉的技术栈vite react electron,模板 流程图 官方文档 自定义 节点样式 因为配置化的操作类型较多,因此可以利用自定义节…

【开源】基于JAVA语言的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

在JavaScript中创建自定义错误

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 简介 创建自定义错误 自定义错误属性 instanceof 检…

STM正点mini-跑马灯

一.库函数版 1.硬件连接 GPIO的输出方式:推挽输出 IO口输出为高电平时,P-MOS置高,输出为1,LED对应引脚处为高电平,而二极管正&#…

N-141基于springboot,vue网上拍卖平台

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredi…

虚拟局域网、广播域、冲突域

目录 广播风暴 安全问题 虚拟局域网 VLAN 虚拟局域网优点 划分虚拟局域网的方法 基于交换机端口的方法 基于计算机网卡的 MAC 地址的方法 基于协议类型的方法 基于 IP 子网地址的方法 基于高层应用或服务的方法 虚拟局域网使用的以太网帧格式 以太网存在的主要问题&…

STM32+ESP8266 实现物联网设备节点

一、硬件准备 本设备利用STM32F103ZE和ESP8266实现了一个基本的物联网节点,所需硬件如下 1、STM32F103ZE开发板 2、ESP8266模组(uart接口) 3、ST-LINK(下载用) 4、USB转串口模块(调试用) 二…

matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0

matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0 目录 matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0 1. 认识 1.1 kears 1.2 kears常用数据集 2. 波士顿房价数据及可视化 2.1 下载波士顿房价数据集 2.2 展示一个属性对房价的影响 2.3 将是三个属性全部展…

CTF CRYPTO 密码学-6

题目名称:敲击 题目描述: 方方格格,不断敲击 “wdvtdz qsxdr werdzxc esxcfr uygbn” 解题过程: step1:根据题目描述敲击,wdvtdz对应的字符为x step2:依此类推r,z,o&…

【现代密码学基础】详解完美安全与香农定理

目录 一. 介绍 二. 完美安全的密钥与消息空间 三. 完美安全的密钥长度 四. 最优的完美安全方案 五. 香农定理 (1)理论分析 (2)严格的正向证明 (3)严格的反向证明 六. 小结 一. 介绍 一次一密方案…

【GitHub项目推荐--不错的 TypeScript 学习项目】【转载】

在线白板工具 Excalidraw 标星 33k,是一款非常轻量的在线白板工具,可以直接在浏览器打开,轻松绘制具有手绘风格的图形。 如下图所示,Excalidraw 支持最常用的图形元素:方框、圆、菱形、线,可以方便的使用…

CSS设置单行文字水平垂直居中的方法

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>单行文字水平垂直居中</title><style>div {/* 给div设置宽高 */width: 400px;height: 200px;margin: 100px auto;background-color: red;/…

NoSQL基本内容

第一章 NoSQL 1.1 什么是NoSQL NoSQL&#xff08;Not Only SQL&#xff09;即不仅仅是SQL&#xff0c;泛指非关系型的数据库&#xff0c;它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;…

(免费领源码)java#Springboot#mysql旅游景点订票系统68524-计算机毕业设计项目选题推荐

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

网络安全02--负载均衡下的webshell连接

目录 一、环境准备 1.1ubentu虚拟机一台&#xff0c;docker环境&#xff0c;蚁剑 1.2环境压缩包&#xff08;文件已上传资源&#xff09;&#xff1a; 二、开始复原 2.1上传ubentu&#xff1a; 2.2解压缩 2.3版本20没有docker-compose手动下载&#xff0c;包已上传资源 …

人类基因组计划发现的8大真相

人类基因组计划是科学史上重要的里程碑事情。该计划的成功&#xff0c;不仅开启了人类了解自身的旅程&#xff0c;而且成为了国际科技合作的典范。对于人类基因组&#xff0c;发现了以下 8 个事实。 1. 人类基因组约有 20300 个蛋白质编码基因。这与最初预估的 30000 ~ 40000 个…

pytest教程-7-用例前后置方法

上一小节&#xff0c;我们学习了pytest跳过测试用例的方法&#xff0c;本小节我们讲解一下pytest用例的前后置方法。 在unittest中就有前置setup和后置teardown来处理测试用例执行前的准备工作&#xff08;浏览器驱动实例化&#xff0c;数据库连接等&#xff09;以及执行后的处…

JS之隐式转换与布尔判定

大家思考一下 [ ] [ ] &#xff1f; 答案是空字符串 为什么呢&#xff1f; 当做加法运算的时候&#xff0c;发现左右两端存在非原始类型&#xff0c;也就是引用类型对象&#xff0c;就会对对象做隐式类型转换 如何执行的&#xff1f;或者说怎么查找的&#xff1f; 第一步&…

IntelliJ IDE 插件开发 | (五)VFS 与编辑器

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;来查收…