前言
在试验过程中,试验员经常会在试验中获得三个以上的试验数据,在数据处理时再从多个重复中挑选,通常会挑选三个,进行统一的计算方差等数据处理。这个挑选的过程如果通过人为筛选较为费时低效,可以通过脚本计算方差的方式自动选出最接近的三个数值。
数据筛选出来之后,还需要以最快的方式的知数据的质量。因为试验材料通常具有时效性,并且如果是使用大型仪器测量的话,仪器的使用时间严格控制。因此在最短的时间内获得数据的质量,有助于试验员及时补测。
一、试验数据的筛选
问题背景
在试验中,为了让数据更具有可靠性,试验员需要在试验中设置了3个以上的重复。但是平常的方差分析等,只需要3个数据就可以了。因此试验员常常需要在各个重复中选出最为接近的三个数据。这个过程是必须以计算为基础的,直观上很难快速看出数据的接近程度,并且试验通常处理数较多,各处理的数据需要单独筛选,使得筛选过程单调复杂。但是如果能够将筛选数据的方法用脚本表达出来,这将大大简化数据筛选的效率,节省试验员的时间。
解决思路
本文构想的数据筛选方法有两种:
- 基于排序和差值的筛选方法:将重复数据先按照升/降序排列,然后计算相邻数据的差值,再计算相邻两个差值的和,和最小的相邻三个数据即是重复性最好的三个数据。
- 基于排列组合和平均值的筛选方法:使用排列组合的方法获得从重复数据中选出三个数据的所有组合,然后分别计算每个组合的平均值和方法,方差最小并且平均值最接近总体平均值的组合即是重复性最好的组合。
脚本实现:
基于上诉第二种方法:
import pandas as pd
import numpy as np
import sys
import argparse
#排列组合起始函数,参数准备
def getSubLists(lis=[], m=0):
allAns = []
ans = [None for i in range(m)]
subLists(lis, m, ans, allAns)
return allAns
#使用迭代的方式实现排列组合
def subLists(lis=[], m=0, ans=[], allAns=[]):
#迭代终点
if m == 0:
allAns.append(ans.copy())
return
#确认参数长度无误
if len(lis)<m:
print("short list!")
return
length = len(lis)
#迭代循环
for iter in range(length-m+1):
ans[-m] = lis[iter]
if iter+1 < length:
subLists(lis[iter+1:], m-1, ans, allAns)
else:
allAns.append(ans