在Python中如何根据相交点分割数据帧?

2024-09-30 06:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,目的是展示一个练习的好的和坏的形式的区别。为此,我们使用腕式加速度计采集加速度数据。enter image description here上图显示的是2套健身操(台式压力机)。每组有10次重复。下面的图片显示了1个集合的10个重复。enter image description here我有一个原始数据集,它由10组执行器组成。我要做的是将原始数据分成10部分,其中包含上面图像中2条黑线之间的部分,这样我就可以轻松地分析数据。我的主管给了我一个起点,那就是在每一组中选择切入点。他说取一个切入点,找到第一个中断时间,在该时间前3秒开始切割,数到10,完成切割。在

这个主意我不知道该怎么申请。至少,如果你能告诉你如何根据切点切割一个数据帧的话,我会很高兴的。在


Tags: 数据项目图像目的原始数据时间图片形式
1条回答
网友
1楼 · 发布于 2024-09-30 06:14:41

嗯,我找到了另一种方法来检测加速度计数据的周期性部分。所以,我的代码是:

import numpy as np
from peakdetect import peakdetect
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from matplotlib import style
from pandas import DataFrame as df
style.use('ggplot')


def get_periodic(path):
    periodics = []
    data_frame = df.from_csv(path)
    data_frame.columns = ['z', 'y', 'x']
    if path.__contains__('1'):
        if path.__contains__('bench'):
            bench_press_1_week = data_frame.between_time('11:24', '11:52')
            peak_indexes = get_peaks(bench_press_1_week.y, lookahead=3000)
            for i in range(0, len(peak_indexes)):
                time_indexes = bench_press_1_week.index.tolist()
                start_time = time_indexes[0]
                periodic_start = start_time.to_datetime() + dt.timedelta(0, peak_indexes[i] / 100)
                periodic_end = periodic_start + dt.timedelta(0, 60)
                periodic = bench_press_1_week.between_time(periodic_start.time(), periodic_end.time())
                periodics.append(periodic)
    return periodics


def get_peaks(data, lookahead):
    peak_indexes = []
    correlation = np.correlate(data, data, mode='full')
    realcorr = correlation[correlation.size / 2:]
    maxpeaks, minpeaks = peakdetect(realcorr, lookahead=lookahead)
    for i in range(0, len(maxpeaks)):
        peak_indexes.append(maxpeaks[i][0])

    return peak_indexes


def show_segment_plot(data, periodic_area, exercise_name):
    plt.figure(8)
    gs = gridspec.GridSpec(7, 2)
    ax = plt.subplot(gs[:2, :])
    plt.title(exercise_name)
    ax.plot(data)
    k = 0
    for i in range(2, 7):
        for j in range(0, 2):
            ax = plt.subplot(gs[i, j])
            title = "{} {}".format(k + 1, ".Set")
            plt.title(title)
            ax.plot(periodic_area[k])
            k = k + 1
    plt.show()

首先,this问题为我的问题提供了另一个视角。下图显示了10组台式压力机的原始加速度计数据。这里它有3个轴(x,y,z),它的长轴是y(图片上是蓝色的)。enter image description here

我使用自相关函数来检测周期部分,enter image description here在图像中的每个峰值代表1组执行。通过this峰值检测算法,我找到了每个峰值的x轴值

^{pr2}$

基本上,每个x值代表样本。我的采样频率是100Hz,所以16204/100=16204秒。为了求周期性部分的时间,在开始时间上加了162,04秒。每一次卧推大约需要1分钟,在这个例子中,练习的开始时间是11:24,因为第一个周期性部分的开始时间是11:26,结束时间是之后的1分钟。enter image description here有一些滞后,但我发现最好的解决方法是这样。在

相关问题 更多 >

    热门问题