【时间序列篇】基于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 文件
    • 1 target 文件
  • 四、总结
    • 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 pd

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]],
       }
'''
/****************************************************/
    路径指定
/****************************************************/
'''
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,10
        file_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_size
            end_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。

1 target 文件

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

在这里插入图片描述

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

四、总结

1 数据集示例

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

2 数据集下载路径

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

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

相关文章

uniapp css样式穿透

目录 前言css样式穿透方法不加css样式穿透的代码加css样式穿透的代码不加css样式穿透的代码 与 加css样式穿透的代码 的差别参考 前言 略 css样式穿透方法 使用 /deep/ 进行css样式穿透 不加css样式穿透的代码 <style>div {background-color: #ddd;} </style>…

Go 虚拟环境管理工具 gvm 原理介绍与使用指南

本文谈下我对 Go 版本管理的一些想法。让后&#xff0c;我将介绍一个小工具&#xff0c;gvm。这个话题说起来也很简单&#xff0c;但如果想用的爽&#xff0c;还是要稍微梳理下。 背景介绍 Go 的版本管理&#xff0c;并非包的依赖管理&#xff0c;而且关于如何在不同的 Go 版…

一文读懂:D3.js的前世今生,以及与echarts的对比

D3.js&#xff08;Data-Driven Documents&#xff09;是一种用于创建动态、交互式数据可视化的JavaScript库。它通过使用HTML、CSS和SVG等Web标准&#xff0c;将数据与文档结合&#xff0c;使得数据可以以一种直观和易于理解的方式进行呈现。D3.js的重要性在于它赋予了开发者更…

vue3 中组合键 command+Enter / shift+Enter / alt + Enter 实现换行,详细实现

vue3 中组合键实现换行 需求背景 有一个聊天室功能&#xff0c;采用输入框的形式&#xff0c;输入完毕使用Enter&#xff0c;可以直接进行发送。使用一些组合键 比如 commandEnter / shiftEnter / alt Enter … 可以实现换行操作。但现实的情况是&#xff0c;原生 Enter 天然…

动静态库的理解、制作、使用。

一.动静态库的理解。 1.什么是库&#xff1f; 代码是无穷无尽的&#xff0c;当程序猿在写一些项目时&#xff0c;未必所有代码亲历亲为&#xff0c;他们可以在网上寻找大佬写过的一些有关需求的代码&#xff0c;这些代码可以让他们拿过来直接使用&#xff0c;而省去了许多精力…

【Vulnhub通关】Kioptrix:Level 1 (#1)

文章目录 准备工作靶机基本信息下载 渗透流程主机发现目标扫描服务探测HTTP(S)服务SMB文件共享服务 权限提升本次靶机测试到此结束 注意&#xff1a;本文转载自本人稀土掘金博客。博客地址&#xff1a;御坂19008号 的个人主页 - 动态 - 掘金 准备工作 靶机基本信息 靶机名称&a…

ubuntu20安装网络调试助手遇到缺少qt4相关库的问题

最近需要做套接字通讯的工作&#xff0c;最好是有一个网络调试软件能够接受或者发送套接字&#xff0c;测试代码能够正常通讯。windows下有很多&#xff0c;但是linux下比较少&#xff0c;使用广泛的是下面这一款。 1、安装 首先从网盘&#xff08;链接: https://pan.baidu.c…

【JSON2WEB】02 JSON2WEB初步UI设计

JSON2WEB的UI初步设计&#xff0c;包括草图、登录、主页、导航树JSON2TREEE组件、表格JSON2GRID组件、表单JSON2FORM组件等。 1草图 表单作为抽屉从右边拉出。LOGO行和导航树为固定区域&#xff0c;导航树可以折叠。 2 登录页 找回账号&#xff1a;可以给邮箱&#xff08;找…

宝塔+nextcloud+docker+Onlyoffice 全开启https

折腾了我三天的经验分享 1.宝塔创建网站 nextcloud版本为28.0.1 php8.2 &#xff0c;导入nextcloud绑定域名对应的证书 &#xff0c;不用创建mysql 因为nextcloud 要求是mariadb:10.7 宝塔里没有&#xff0c;就用docker安装一个 端口设置为3307 将数据库文件映射出来/ww…

安卓开发之自动缩放布局

AutoScalingLayout 适用于 Android 的自动缩放布局。 替换布局&#xff1a; 我们只需要替换根布局所需的自动缩放&#xff0c;子布局也将实现自动缩放。 原始布局AutoScalingLayout相对布局ASRelativeLayout线性布局ASLinearLayoutFrameLayout&#xff08;框架布局&#xff…

Shell 虚拟机基线配置脚本示例

这是一个配置虚拟机基线的示例&#xff0c;包含关闭防火墙、禁用SElinux、设置时区、安装基础软件等。 这只是一个简单的模板&#xff0c;基线配置方面有很多&#xff0c;后续可以按照这个模板去逐步添加 代码示例 [rootbogon ~]# cat bastic.sh #!/bin/bashRED\E[1;31m GRE…

低功耗DC-DC电源模块的精细化PCB设计

在电子设备中&#xff0c;电源模块是核心组件&#xff0c;将输入直流电压转为设备所需的各种直流电压。DC-DC电源转换器&#xff0c;特别是基于开关方式的转换器&#xff0c;因其高效、小体积和轻重量等优点被广泛应用。但设计优秀的DC-DC电源转换器并不容易。布局、电磁兼容性…

web安全学习笔记【06】——http\https抓包

思维导图放最后 #知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&…

k8s-基础知识(Service,NodePort,CusterIP,NameSpace,资源限制)

Node Node 是 Pod 真正运行的主机&#xff0c;可以是物理机&#xff0c;也可以是虚拟机。 Annotations 原文链接 Annotations 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象&#xff0c;Annotations 则是用来记录一些附加信息&#xff0c;用来辅助应…

windows .vscode的json文件配置 CMake 构建项目 调试窗口中文设置等

一、CMake 和 mingw64的安装和环境配置 二、tasks.json和launch.json文件配置 tasks.json {"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build"},"tasks": [{"type": "shell&q…

Intel NUC x15电池独立显卡功耗异常解决办法

买了Intel NUC x15&#xff0c;所有驱动都是安装的官方的驱动&#xff0c;但是电池续航一直尿崩。经过查找资料&#xff0c;发现是独立显卡功耗异常导致&#xff0c;也有用户给出了解决办法&#xff0c;参考NUC X15 显卡待机功耗异常解决方案 - 哔哩哔哩 (bilibili.com)。https…

洗地机哪个品牌最好用?智能洗地机推荐

在当前社会对清洁和卫生越来越重视的背景下&#xff0c;家用洗地机已经成为许多家庭不可或缺的清洁工具之一。这不仅因为它在功能上非常丰富&#xff0c;而且在使用体验上也极为强大。洗地机的自清洁功能使得清洁过程中无需亲手脏手&#xff0c;而且一些机型还支持消毒杀菌&…

17β-Estradiol high sensitivity ELISA kit

高灵敏ELISA试剂盒&#xff0c;可检测到低至14 pg/ml的17β-雌二醇 雌二醇(estradiol) 是由卵巢内卵泡的颗粒细胞分泌的类固醇激素&#xff0c;是主要的雌激素&#xff0c;负责调节女性特征、附属性器官的成熟和月经-排卵周期&#xff0c;促进乳腺导管系统的产生&#xff0c;有…

虚拟歌姬学习:DiffSinger,让GitHub下载快的方法!

《三分钟上手DiffSinger》系列 ——基础篇https://www.bilibili.com/video/BV1ug4y1S7Dk/?spm_id_from333.337.search-card.all.click&vd_source124076d7d88eee393a1d8bf6fc787efa 下载DiffSinger 建议用edge浏览器还有steam&#xff0c;有时只是慢&#xff0c;但是还是…

使用Electron打包vue文件变成exe应用程序

文章目录 一、下载Electron二、修改下载的Electron项目1.修改index.html文件2.修改main.js文件3.修改package.json文件 三、修改vue项目1.修改vite.config.js文件2.修改.env.production文件3.修改auth.js文件4.修改router下得index.js文件6.修改Navbar.vue文件 四、Electron打包…