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的Flask框架中request对象的用法
Jun 02 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Python3安装Scrapy的方法步骤
Nov 23 Python
PyQt5每天必学之布局管理
Apr 19 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
python实现诗歌游戏(类继承)
Feb 26 Python
python列表,字典,元组简单用法示例
Jul 11 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
pyqt5中动画的使用详解
Apr 01 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 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
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
php车辆违章查询数据示例
2016/10/14 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
理解javascript回调函数
2014/12/28 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
nodejs导出excel的方法
2015/06/30 NodeJs
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
经典c++面试题四
2015/05/14 面试题
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
保送生自荐信范文
2013/10/06 职场文书
如何写毕业求职自荐信
2013/11/06 职场文书
专科生就业求职信
2014/06/22 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
员工离职证明范本
2015/06/12 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python