智能手环数据研究2——数据准确性研究简易评估

概述

智能手环是一种穿戴式智能设备。通过这款手环,用户可以记录日常生活中的锻炼、睡眠、部分还有饮食等实时数据,并将这些数据与手机、平板、ipod touch同步,起到通过数据指导健康生活的作用。通过智能手环取得的数据,可以开展多方面的研究工作。此后笔者就将更新此系列内容。

目前已有的部分内容为

  • 设备系统响应延迟研究
  • 设备数据准确性研究
  • 设备传感器研究

需要取得智能手环的原始数据(raw data)。需要考察数据的质量,我们考虑从数据采样率,数据的准确性,设备系统时延三个方面进行评估。

当然为研究数据,能取得原始数据是首要的前提,我们耗时近半年,联系了全球各厂商,考察了大部分市面上的手环产品,仅筛选出两款raw data符合我们需要的产品:Microsoft Band2, Fitbit。最后因为种种原因,我们无奈自己去做了手环设备Sens。这里不再详细展开,否则就跑题了,我们的这个系列也基于三款产品进行分析和研究。

Fitbit

Microsoft Band2

Sens

 

场景介绍

此篇文章分析的目的为,设想我们遇到这一种情况。现在老板要求分析各设备的数据质量。老板也不想看一大堆的质检报告——每一个设备生产厂商都会提供看似合理正规的各种文书,然后它们对于实际分析并没有什么用。那么我们如何在有限的条件下,有理有据的分析数据,取得让老板信服的结果。此篇文章对手环的数据的准确性提供一种简易有效的评估方法。

实验过程

实验设计阶段

实验条件:三款手环设备,能够取得和分析数据的电脑一台(就这么多)

试验过程:

将三款手环尽量佩戴在一起,以确保三款手环产品的输入尽量为同一输入。

为保证公平性,隔一段时间内,交替各设备佩戴的位置。交替间隔保持一致。

当实验者有剧烈活动时记录时间。

佩戴2天取得数据。

 

分析过程

设置参照系

三个设备在时间轴对齐后时域信号的平均值。

 

Spearman相关性分析

Spearman和Pearson都可以选择作为时间序列相关性的分析。在这里选取Spearman更加合适,原因如下。这篇百度知道的回答很简短切中要害。

区别:[1] https://zhidao.baidu.com/question/942120591632351772.html

1.连续数据,正态分布,线性关系,用pearson相关系数是最恰当,当然用spearman相关系数也可以,效率没有pearson相关系数高。

2.上述任一条件不满足,就用spearman相关系数,不能用pearson相关系数。

3.两个定序测量数据之间也用spearman相关系数,不能用pearson相关系数。

 

分析过程

mic,fit,Sens三组心率数据在时间轴上对齐,以三组数据的平均值作为准线,三个Wearable分别和准线进行spearmanr的相关性分析

 

结果

三个Wearable设备的相关性均显著,Spearmanr相关性系数:

Mic

0.692

Fit

0.754

Sens

0.839

Python的结果怎么看?在输出的Result结果中有两个数值,这两个系数的专业解释请参照假设检验相关的专业书籍。这里解释的粗俗一点:第一个相关性系数correlation,这个系数结果越大相关性越高。第二个是显著值pvalue, 这个值在假设检验中用于检验是否接受或拒绝原假设,一般和0.05比较。

 

最后贴出整个过程的Python代码

# -*- coding: utf-8 -*-
"""
Created on Fri Sep  7 19:25:08 2018

@author: hcb
"""

import pandas as pd
import numpy as np

### Read data
f_datapath = './data/f.csv'
f_data = pd.read_csv(f_datapath)
f_data = f_data.drop('Unnamed: 0', axis=1)

m_datapath = './data/m.csv'
m_data = pd.read_csv(m_datapath)
m_data = m_data.drop('Unnamed: 0', axis=1)

s_datapath = './data/s.csv'
s_data = pd.read_csv(s_datapath)
s_data = s_data.drop('Unnamed: 0', axis=1)
#s_data.columns = ['time', 'hrs']

### Concat
tmp = pd.merge(f_data, m_data, on='time')
a_data = pd.merge(tmp, s_data, on='time')
a_data = a_data.dropna()
a_data = a_data.set_index('time')

### Calc baseline
baseline = a_data.apply(np.mean, axis=1)

### Spearmanr
import scipy.stats
s_result = scipy.stats.spearmanr(a_data['hrs'], baseline)
f_result = scipy.stats.spearmanr(a_data['hrf'], baseline)
m_result = scipy.stats.spearmanr(a_data['hrm'], baseline)

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值