python实现的分层随机抽样案例


Posted in Python onFebruary 25, 2020

昨天写了一段用来做分层随机抽样的代码,很粗糙,不过用公司的2万名导购名单试了一下,结果感人,我觉得此刻的我已经要上天了,哈哈哈哈哈哈

代码如下:

#分层随机抽样 stratified sampling

import xlrd, xlwt, time, random


xl = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\分层抽样.xlsx')
xl_sht1 = xl.sheets()[0]
xl_sht1_nrows = xl_sht1.nrows
#表头
title = xl_sht1.row_values(0)
#把样本写进列表 sample
sample = []
for i in range(xl_sht1_nrows):
  sample.append(xl_sht1.row_values(i))
#打乱样本
random.shuffle(sample)
#把层的内容写进列表 col
col = xl_sht1.col_values(0)
#对col中的内容进行计数,获得每一类的名称对应个数的字典
col_dict = {}
for i in col:
  col_dict[i] = col_dict.get(i, 0) + 1
p = eval(input('每层抽取的比例(小数):'))
#获得每一类的名称对应抽取个数的字典
col_p = {}
k = 0
for i in col_dict.keys():
  col_p[i] = int(round(col_dict[i] * p)) #round用来四舍五入,不加int结果会变成无数个p
#开始抽样,把抽取结果写进result_l列表
result_l = []
for i in sample:
  if col_p.get(i[0], 0) > 0:
    result_l.append(i)
    col_p[i[0]] -= 1
#新建文档,写入结果
f = xlwt.Workbook()
f_sht1 = f.add_sheet('result')
n = 0
for i in title:
  f_sht1.write(0, n, i)
  n += 1
r = 1
for i in result_l:
  c = 0
  for k in i:
    f_sht1.write(r, c, k)
    c += 1
  r += 1
nowtime = time.strftime("%Y%m%d_%H%M%S", time.localtime())
f.save(r'C:\Users\Administrator\Desktop\Result_{0}.xls'.format(nowtime))
print('\n抽样成功!')
input()

原理思路如下:

1、首先数据的形式如下

python实现的分层随机抽样案例

数据自带层标签,我只需要从每层抽取一定比例的数据就可以了

2、第一步:先将源数据按行存入一个列表,然后打乱行的顺序

3、第二步:对层标签进行计数,获取每一个层标签的总数,并将结果存进字典

4、第三步:根据抽样比例p,计算出每层实际应抽取的个数,并存入一个新的字典

5、第四步:从源数据列表中抽取出目标数据,每层抽取的个数由第三步的字典进行指定

小白刚刚起步,实现的时候发现自己对数据结构和算法一点也不懂。。。。结果就写了一堆的for循环。。。。

大神们如果看到这段代码,还请不吝赐教,看看代码可以怎样优化,或者有更好的设计思路

补充拓展:pandas实现对dataframe抽样的实现

随机抽样

import pandas as pd
#对dataframe随机抽取2000个样本
pd.sample(df, n=2000)

分层抽样

利用sklean中的函数灵活进行抽样

from sklearn.model_selection import train_test_split
#y是在X中的某一个属性列
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, stratify=y)

以上这篇python实现的分层随机抽样案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用rabbitmq实现网络爬虫示例
Feb 20 Python
python获取标准北京时间的方法
Mar 24 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
django组合搜索实现过程详解(附代码)
Aug 06 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
pandas进行数据输入和输出的方法详解
Mar 23 Python
Python可变对象与不可变对象原理解析
Feb 25 #Python
Python 使用 environs 库定义环境变量的方法
Feb 25 #Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 #Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 #Python
python numpy--数组的组合和分割实例
Feb 24 #Python
python梯度下降算法的实现
Feb 24 #Python
利用python实现逐步回归
Feb 24 #Python
You might like
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
python同时遍历数组的索引和值的实例
2018/11/15 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
Python中过滤字符串列表的方法
2020/12/22 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
班主任工作年限证明
2014/01/12 职场文书
党建示范点实施方案
2014/03/12 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
毕业赠语大全
2015/06/23 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android