UCI-HAR数据集的处理


import numpy as np
import pandas as pd
from collections import Counter


DATASET_PATH = "./UCI_data/raw/UCI HAR Dataset/"

INPUT_SIGNAL_TYPES = [ #文件前半部分公共名
    "body_acc_x_",
    "body_acc_y_",
    "body_acc_z_",
    "body_gyro_x_",
    "body_gyro_y_",
    "body_gyro_z_",
    "total_acc_x_",
    "total_acc_y_",
    "total_acc_z_"
]

def load_x(X_signals_paths):
    X_signals = []

    for signal_type_path in X_signals_paths:#外面的for是赋文件路径然后分别进行内for操作
        with open(signal_type_path, "r") as f:#里面的for就是 从打开的文件中加载行 然后对加载的行作两空格‘  ’代替1空格‘ ’的操作 然后删除头尾空白 然后通过单空格分离数据
            X_signals.append(                      #将分离的数据组成新的list  最后serie从list中取数据组成数组
                [np.array(serie, dtype=np.float32)  #创建一个serie数组
                 for serie in [row.replace('  ', ' ').strip().split(' ') for row in f]]
            )      #从打开的文件中加载行 然后对加载的行作两空格‘  ’代替1空格‘ ’的操作 然后删除头尾空白 然后通过单空格分离数据
                   #将分离的数据放进X_signals

            #print(np.array(X_signals).shape) #(1,7352,128) (特征数,样本个数,时间步长)

    return np.transpose(X_signals, (1, 2, 0))   #0轴是第一个方括号代表序号 1轴是第二个方括号代表样本量 2轴是第二个方括号代表序列数据采样量
            #(样本个数,时间步长,特征数)         #然后transpose由0,1,2换成了换成样本量,采样量,序号  120


def load_y(y_path):
    # Read dataset from disk, dealing with text file's syntax
    with open(y_path, "r") as f:
        y = np.array(
            [elem for elem in [row.replace('  ', ' ').strip().split(' ') for row in f]],
            dtype=np.int32
        )

    y = y.reshape(-1, )
    # Substract 1 to each output class for friendly 0-based indexing
    return y - 1    #y从1开始的

#数据文件的路径
train_x_signals_paths = [
    DATASET_PATH + "train/Inertial Signals/" + signal + "train.txt" for signal in INPUT_SIGNAL_TYPES
]       #用signal遍历train 9个文件名
test_x_signals_paths = [
    DATASET_PATH + "test/Inertial Signals/" + signal + "test.txt" for signal in INPUT_SIGNAL_TYPES
]
#标签路径
train_y_path = DATASET_PATH + "train/y_train.txt"
test_y_path = DATASET_PATH + "test/y_test.txt"

#数据处理
train_x = load_x(train_x_signals_paths) #对9个文件名做load操作,做完一个操作后train_x是三维的
test_x = load_x(test_x_signals_paths)

#print(train_x_signals_paths)
# print("train_x.shape", train_x.shape)
#print("test_x.shape", test_x.shape)

#标签处理
train_y = load_y(train_y_path)
test_y = load_y(test_y_path)

# train_y_matrix = np.asarray(pd.get_dummies(train_y), dtype=np.int8) #先进行one-hot编码
# test_y_matrix = np.asarray(pd.get_dummies(test_y), dtype=np.int8)   #然后转换成一数组
                                                                    #这里就没用one hot
#print(train_y, Counter(train_y))
#print(test_y, Counter(test_y))

#print(train_y_matrix)

np.save("./UCI_data/np/x_train.npy", train_x)
np.save("./UCI_data/np/y_train.npy", train_y)
np.save("./UCI_data/np/x_test.npy", test_x)
np.save("./UCI_data/np/y_test.npy", test_y)



### UCI HAR 数据集介绍 UCI HAR (Human Activity Recognition Using Smartphones) 数据集是一个广泛应用于人体活动识别研究的数据集合[^1]。该数据集由来自30名参与者执行六种不同类型的日常活动(步行、上楼、下楼、坐着、站着和躺卧),通过智能手机上的加速度计和陀螺仪收集得到。 #### 下载链接 为了获取这个宝贵的研究资源,可以利用特定函数 `download_dataset` 来实现自动化下载过程,并将文件存储至指定路径: ```python def download_dataset(dataset_name, file_url, dataset_dir): import os import urllib.request filename = os.path.join(dataset_dir, f"{dataset_name}.zip") if not os.path.exists(filename): print(f"Downloading {dataset_name}...") urllib.request.urlretrieve(file_url, filename) print("Download completed.") else: print(f"The dataset '{dataset_name}' already exists at the location.") # 调用方法如下所示: download_dataset( dataset_name='UCI-HAR', file_url='https://archive.ics.uci.edu/static/public/240/human+activity+recognition+using+smartphones.zip', dataset_dir='./datasets' ) ``` 此外,还可以借助第三方库如 `tsfresh` 提供的功能来简化这一流程[^3]: ```python from tsfresh.examples.har_dataset import download_har_dataset # 执行下面这行代码即可完成下载操作 download_har_dataset() ``` #### 特征说明 UCI HAR 数据集中包含了多种传感器采集到的时间序列信号作为特征输入。具体来说,原始数据经过预处理后被转换成固定长度窗口内的统计特性描述符,形成了一组丰富的属性列表,其中包括但不限于时间域中的均值、标准差以及频率域下的峰值频谱能量等指标。这些精心挑选出来的特征对于后续构建高效的分类器具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bu volcano

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值