美文网首页
python自动化分析提取随机数据

python自动化分析提取随机数据

作者: 码上就说 | 来源:发表于2018-12-25 19:40 被阅读32次

    问题背景:
    我们在测试性能的时候,一般会提取一组数据,但是这组数据里面会有一些异常数组,需要我们能剔除一些异常值,保证输出的数据尽量可靠,通过一些分析处理方法,可以将这一过程程序化。

    如何判断一组数据是否稳定?
    数学中使用方差或者标准差来表示一组数据的稳定性。如果方差或者标准差越小,说明数据分布越平均,数据的稳定性越好。
    方差标准差
    但是这儿不能采用方差与标准差,因为应用的场景不同:方差与标准差是判断当前的一组数据是否稳定,并不是提取出正常的测试数据,换言之,我们需要提取的测试数据,并不是越稳定越好,我们需要的是一种正常的分布。而且方差和标准差的订多少标准比较合适,这个界限比较模糊,所以我还是建议使用中位数来界定。

    下面是我提出了一个提取测试数据的方法,大家可以参考下:



    先看看我们的要求:输入的数据至少20位,输出的数据10位。
    这样我们一定要剔除一些过大或者过小的数据,判断的标准就是中位数。这个中位数是以平均数标识的。

    下面先贴上我的处理代码:
    test_camera.py

    # -*- coding:UTF-8 -*-
    # Author : jeffmony@163.com
    # Date : 24/12/18
    
    import sys
    import numpy
    
    # 寻找 average 在 list 中的索引位置
    def findIndex( list, average ):
        for index in range(len(list)):
            if( list[index] < average):
                continue;
            return index;
        return -1;
    
    # 退出程序
    def sysExit():
        try:
            sys.exit(0);
        finally:
            print 'System Exit';
    
    # 完成工作
    def sysFinsih():
        try:
            sys.exit(0);
        finally:
            print 'System Finished';
    
    def OutputList( list , length ):
        average = numpy.mean(list);
        print '当前数组长度 =', length,',当前list为 =', list;
        index = findIndex(list, average)
        print '当前数组平均数 =',average,',当前average.index =',index;
        tempList = [];
        if length >= 14:
            if index <= length/2+2 and index >= length/2-2:
                for i in range(index -5,index):
                    tempList.append(list[i]);
                for i in range(index, index+5):
                    tempList.append(list[i]);
                print tempList;
                sysFinsih();
            elif index < length/2 -2:
                list.pop(0);
                OutputList(list, len(list));
            elif index > length/2 +2:
                list.pop();
                OutputList(list, len(list));
            else:
                sysExit();
        else:
            print '当前数组异常值太多,请重新check input';
    
    argv = sys.argv[1]
    list = []
    file_object = open(argv, 'rU')
    try:
        for line in file_object:
            list.append(float(line.strip('\n')));
    finally:
        file_object.close()
    length = len(list);
    if length <= 14:
        print '当前数组大小不超过14,请重新check input';
        sysExit();
    list.sort();
    OutputList(list, length);
    

    将需要处理的数据放在本地文本中:
    test_camera.txt

    1595
    1465
    1387
    1397
    1405
    1376
    1377
    1404
    1483
    1522
    1265
    1257
    1193
    1200
    1236
    1246
    1289
    1208
    1269
    1309
    

    下面是运行实例:

    python test_camera.py test_camera.txt

    当前数组长度 = 20 ,当前list为 = [1193.0, 1200.0, 1208.0, 1236.0, 1246.0, 1257.0, 1265.0, 1269.0, 1289.0, 1309.0, 1376.0, 1377.0, 1387.0, 1397.0, 1404.0, 1405.0, 1465.0, 1483.0, 1522.0, 1595.0]
    当前数组平均数 = 1344.15 ,当前average.index = 10
    [1257.0, 1265.0, 1269.0, 1289.0, 1309.0, 1376.0, 1377.0, 1387.0, 1397.0, 1404.0]
    System Finished

    python test_camera.py test_camera2.txt

    当前数组长度 = 20 ,当前list为 = [9.89, 10.09, 10.99, 12.23, 12.33, 14.85, 16.02, 16.8, 17.56, 18.11, 18.24, 21.45, 21.56, 23.14, 26.71, 28.21, 34.11, 52.66, 77.22, 89.11]
    当前数组平均数 = 26.564000000000004 ,当前average.index = 14
    当前数组长度 = 19 ,当前list为 = [9.89, 10.09, 10.99, 12.23, 12.33, 14.85, 16.02, 16.8, 17.56, 18.11, 18.24, 21.45, 21.56, 23.14, 26.71, 28.21, 34.11, 52.66, 77.22]
    当前数组平均数 = 23.272105263157897 ,当前average.index = 14
    当前数组长度 = 18 ,当前list为 = [9.89, 10.09, 10.99, 12.23, 12.33, 14.85, 16.02, 16.8, 17.56, 18.11, 18.24, 21.45, 21.56, 23.14, 26.71, 28.21, 34.11, 52.66]
    当前数组平均数 = 20.275000000000002 ,当前average.index = 11
    [16.02, 16.8, 17.56, 18.11, 18.24, 21.45, 21.56, 23.14, 26.71, 28.21]
    System Finished

    上面加粗的是最终输出的数据。
    这个处理方式虽然比较粗糙,但是提供了一种思路。欢迎指教。

    相关文章

      网友评论

          本文标题:python自动化分析提取随机数据

          本文链接:https://www.haomeiwen.com/subject/fllqlqtx.html