Python实现分层抽样

首先说明一下我的需求。result_33.txt的文件中有一些号码标签及分类的标记。具体如下

中国农业银行 银行
招商银行信用卡 信用卡
门窗 无关

我想做的是从每一个类标记中随机抽出1000个标签。如果该类标签下的样本数不足1000,则全部抽取。然后将抽取的结果保存到另一个文件中。

具体代码如下(尽可能减少内存占用量,但是文件扫描次数太多):

import random
if __name__ == '__main__':
    data={}
    with open("result_33.txt",'r',encoding='utf-8-sig') as r_dict,\
        open('check_result_33.txt','w',encoding='utf-8') as w_dict:
        for line in r_dict:
            items=line.strip('\n').split()
            data[items[1]]=data.get(items[1],0)+1
        for key,value in data.items():
            r_dict.seek(0)  # 返回文件开始位置
            if value<1000:
                for line in r_dict:
                    if key==line.strip('\n').split()[1]:
                        w_dict.write(line)
            else:
                rand_list=list(range(value))
                random.shuffle(rand_list)
                rand_list=iter(rand_list)
                for line in r_dict:
                    if key==line.strip('\n').split()[1] and next(rand_list)<1000:
                        w_dict.write(line)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值