zoukankan      html  css  js  c++  java
  • python_random随机

    在数据清洗,评估 ,抽验等等过程中,经常有这样的应用场景 :

      需要在一个大的数据集合中随机出来样本,进行人工评估。为了保证足够随机,借助脚本来实现。

    下面一个脚本  ,用于应对这种应用场景。

    使用方法: python random_select_line.py -h

    建议:自定义 alias random  。 使用起来就高效很多 
    import os, sys, argparse, random;
    import subprocess;
    
    parser = argparse.ArgumentParser()
    
    parser.add_argument('-i', '--input', help = 'input file')
    parser.add_argument('-o', '--output', help = 'output file')
    parser.add_argument('--stdout', help = 'output to stdout, arg(--output) would be ignore', action = "store_true")
    parser.add_argument('-n', '--number', type = int, help = 'number of selected line')
    
    args, leftargs = parser.parse_known_args(sys.argv)
    
    
    if (not args.input) or (not args.output) or (not args.number):
        sys.stderr.write('wrong argument
    ')
        #sys.stderr.write(parser)
        exit(1)
    
    num = -1
    try:
        rtn_str = subprocess.check_output(['wc', '-l', args.input])
        num = (int)(rtn_str.split()[0])
    except:
        sys.stderr.write('get input_file[%s] line number failed
    ' % args.input)
        exit(1)
    
    sys.stderr.write('total line number = %d
    ' % num)
    start = min(num, args.number)
    reserve_line = range(0, start)
    
    
    for i in xrange(start, num):
        m = random.randint(0, i)
        if m < start:
            reserve_line[m] = i
    
    
    reserve_set = set(reserve_line)
    
    ifst = open(args.input, 'r')
    if args.stdout:
        ofst = sys.stdout
    else:
        ofst = open(args.output, 'w')
    
    i = -1;
    for line in ifst:
        i += 1
        if i in reserve_set:
            ofst.write(line)
    
    ifst.close()
    ofst.close()
    
    sys.stderr.write('bye
    ')
  • 相关阅读:
    设计模式之桥接模式
    设计模式之代理模式
    设计模式之原型模式
    设计模式之建造者模式
    设计模式之抽象工厂模式
    设计模式之工厂模式
    设计模式之单例模式
    FR算法(Fruchterman-Reingold)
    zoj 3822 Domination (概率dp 天数期望)
    hdu 5023 A Corrupt Mayor's Performance Art(线段树)
  • 原文地址:https://www.cnblogs.com/cphmvp/p/4712871.html
Copyright © 2011-2022 走看看