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 多进程通信模块的简单实现
Feb 20 Python
django manage.py扩展自定义命令方法
May 27 Python
Python Grid使用和布局详解
Jun 30 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
Python3爬虫学习入门教程
Dec 11 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
Django中提示消息messages的设置方式
Nov 15 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
Python扫描端口的实现
Jan 25 Python
Python3+Appium安装及Appium模拟微信登录方法详解
Feb 16 Python
Python OpenCV实现图像模板匹配详解
Apr 07 Python
如何基于python实现单目三维重建详解
Jun 25 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
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
Python求离散序列导数的示例
2019/07/10 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
Python操作Jira库常用方法解析
2020/04/10 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
农村党员一句话承诺
2014/05/30 职场文书
厕所文明标语
2014/06/11 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript