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内置的字符串处理函数整理
Jan 29 Python
Python中的super用法详解
May 28 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
python实现决策树ID3算法的示例代码
May 30 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
numpy中的ndarray方法和属性详解
May 27 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
详解Python 最短匹配模式
Jul 29 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
Feb 24 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 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下目前为目最全的CURL中文说明
2010/08/01 PHP
php实现过滤UBB代码的类
2015/03/12 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
Axios学习笔记之使用方法教程
2017/07/21 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
自我评价范文点评
2013/12/04 职场文书
高中的职业生涯规划书
2013/12/28 职场文书
预备党员的自我评价
2014/03/12 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
html5调用摄像头截图功能
2022/01/18 Javascript