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 相关文章推荐
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
浅谈Python中的数据类型
May 05 Python
Python编程中字符串和列表的基本知识讲解
Oct 14 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
Python实现修改文件内容的方法分析
Mar 25 Python
Python2与Python3的区别实例总结
Apr 17 Python
使用python动态生成波形曲线的实现
Dec 04 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
基于python实现获取网页图片过程解析
May 11 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 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将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
python轻松查到删除自己的微信好友
2016/01/10 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
三个儿子教学反思
2014/02/03 职场文书
文字自荐书范文
2014/02/10 职场文书
信息技术培训感言
2014/03/06 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
营业员岗位职责
2015/02/11 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
详解Vue的sync修饰符
2021/05/15 Vue.js
写好Python代码的几条重要技巧
2021/05/21 Python
MySQL修炼之联结与集合浅析
2021/10/05 MySQL