批量数据采集过程中方差的计算
最近项目用需要判断开始数据是否稳定,即采集到的数据是否符合期望,我用方差来判断采集到的数据是否稳定。有两种判断方法:第一种是数据不断的进来,我累积的进行方差计算;第二钟是利用滑动窗口的思想,数据个数达到窗口大小时计算方差值,采用循环数组的模式来实现此功能。
第一种实现方法就是采用迭代式的思想进行方差计算。我实在网上看到一位大神的博客中有对此方法的描述,他用matlab代码进行了说明,,我用C语言实现了;下面附上代码:
[cpp] view plain copy
double GetVariance(uint64_t value)
{
static uint8_t cnt = 0;
static double Var = 0;
static double Esp = 0;
double TempValue = 0;
cnt = cnt + 1;
if(cnt == 1)
{
Var = 0;
Esp = value;
return Var;
}
TempValue = value - Esp;
Esp = (value + Esp*(cnt - 1))/cnt;
Var = Var + TempValue*(value - Esp);
return (Var/cnt);
}
这样在程序中不断调用该函数即可迭代式的计算出方差,而不需要知道数据的个数。
第二种方法是采用滑动窗口的思想,这里需要说明一下,我做的时候有两种情况,一种是窗口不动,数据不断前移,FIFO,这种实现起来最简单;还有一种情况是窗口向前移动,这种实现起来就比较复杂了,我用单步调试好多次,才搞清楚之间的区别。
(1)窗口不动,数据前移:
[cpp] view plain copy
double Function(uint16_t value)
{
static uint8_t cnt=0;
static uint8_t len=7;
static uint16_t sample[7]={0};
uint8_t i=0;
double var;
if(cnt < len)
{
sample[cnt++] = value;
return 0;
}
else
{
for(;i+1<cnt;i++)
{
sample[i]=sample[i+1];
}
sample[i]=value;
var=Variance(sample,7);
}
}
其中 Variance()是我写的计算方差函数,这样就实现了滑动计算数据方差值。
(2)窗口前移,这种实现数据的滑动,设定好窗口大小后,按照FIFO原则,数据不断进入出去,但是这种实现数据滑动后对计算方差增加了难度,这里只说出如何实现窗口向前滑动的代码:
[cpp] view plain copy
void Function(uint16_t value)
{
static uint8_t cnt=0;
static uint8_t len=7;
static uint8_t index=0;
static int order[7]={0};
static int sample[7]={0};
uint8_t i=0;
sample[index] = value;
if(cnt < len)
{
cnt++;
}
else
{
for(i=0;i<cnt;i++)
{
if(order[i] == index)
break;
}
for(;i+1<cnt;i++)
{
order[i]=order[i+1];
}
}
order[cnt-1] = index;
index=(1+index)%len;
}
最后把计算方差的函数Varanice()代码列出来:
[cpp] view plain copy
double Variance(uint16_t data[], uint8_t n)
{
double mean = 0, divisor;
uint16_t sum = 0,Varian = 0;
uint8_t i;
for(i=0;i<n;i++)
{
sum = sum + data[i];
}
mean = sum/n;
for(i=0;i<n;i++)
{
Varian = Varian + pow(data[i]-mean,2);
}
/*程序中divisor是自由度,20是小样本判断的一个标准。如果是小样本的话,约束较大,
自由度就要减一;如果是大样本的话,自由度为样本个数。*/
if(n<20)
{
divisor = n-1;
}
else
{
divisor = n;
}
return (Varian/divisor);
}
以上代码如有错误还望指正,共同进步
数据分析咨询请扫描二维码
作为数据分析领域的探险家,我们常常面临着选择正确工具和技能的挑战。在这个数字化时代,学会并精通适合行业需求的工具显得尤为 ...
2024-12-03在数据分析领域,掌握多种软件和编程语言至关重要,选择合适的工具取决于个人需求和背景。让我们一起探索常用的数据分析工具及其 ...
2024-12-03在数据驱动的时代,数据分析成为了关键的技能。选择合适的数据分析工具至关重要,因为它们直接影响着你对数据的理解和分析效果。 ...
2024-12-03在当今数字化时代,数据分析已经成为各行各业中至关重要的角色。随着技术的迅猛发展和数据量的爆炸增长,数据分析师需要不断提升 ...
2024-12-03在当今数据驱动的世界中,数据分析已成为企业决策制定和战略规划的关键。其中,数据可视化是将复杂数据转化为简洁、易懂图形的重 ...
2024-12-03在当今信息爆炸的时代,数据扮演着至关重要的角色。学会利用数据进行分析不仅是一种技能,更是一种战略性决策工具。本文将探讨学 ...
2024-12-03揭示数据的无限价值 学习数据分析不仅仅是一种技能,更是探索信息海洋中宝藏的钥匙。数据分析的实用性体现在多个领域,如企业决 ...
2024-12-03在当今信息爆炸的时代,数据扮演着至关重要的角色。成为一名优秀的数据分析师,不仅需要具备技术实力,更需要拥有跨学科的知识储 ...
2024-12-03在当今数据驱动的世界中,成为一名优秀的数据分析师需要具备多方面的技能和知识。从统计学基础到机器学习算法,再到沟通能力和业 ...
2024-12-03在当今信息爆炸的时代,数据分析扮演着至关重要的角色。从商业决策到科学研究,数据分析为我们提供了深刻的洞察力和指导方向。然 ...
2024-12-03数据分析的基础知识 数据分析是一个多步骤且复杂的过程,旨在从数据中提取有价值信息以支持决策。这涉及数据的收集、清洗、转换 ...
2024-12-03数据分析是一门引人入胜且充满挑战的领域,它串联着数据的意义与我们的决策需求。无论你是初学者还是经验丰富的专家,掌握数据分 ...
2024-12-03数据分析培训的就业前景展现出令人振奋的态势。随着大数据、人工智能等前沿技术的快速发展,数据分析在各行各业中的应用愈发广泛 ...
2024-12-03在当今数字化时代,数据分析技能的重要性日益凸显。随着大数据、人工智能等领域的迅速发展,数据分析已经成为各行各业中备受瞩目 ...
2024-12-03作为一名数据分析师,除了扎实的数学基础外,掌握软技能同样至关重要。本文将深入探讨数据分析领域中不可或缺的软技能,并结合个 ...
2024-12-03市场需求与技术驱动 数据分析师的职业前景广阔,市场需求旺盛。在金融、医疗、零售、科技等领域,企业对数据分析师的需求不断攀 ...
2024-12-03市场需求与前景 数据分析师的职业前景广阔,伴随着多元化技能要求和清晰的职业发展路径。 在金融、医疗、零售、科技等领域, ...
2024-12-03作为数据分析师,掌握正确的工具和技能至关重要。在当今数据驱动的世界中,Python作为一种多才多艺的编程语言,在数据分析领域扮 ...
2024-12-03在当今数据驱动的世界中,数据分析师扮演着至关重要的角色。他们需要掌握各种工具和技能来从海量数据中提炼出有价值的信息。其中 ...
2024-12-03数据分析实践是一门引人入胜的艺术,融合了技术与创意,为各行业带来前所未有的洞察力与决策支持。本文将探讨数据分析实战案例的 ...
2024-12-03