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 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
Python迭代器定义与简单用法分析
Apr 30 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
Python3中关于cookie的创建与保存
Oct 21 Python
Python转换时间的图文方法
Jul 01 Python
浅谈Python 递归算法指归
Aug 22 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
Django实现图片上传功能步骤解析
Apr 22 Python
python中JWT用户认证的实现
May 18 Python
Python中无限循环需要什么条件
May 27 Python
python excel多行合并的方法
Dec 09 Python
Django 如何实现文件上传下载
Apr 08 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
example2.php
2006/10/09 PHP
PHP的FTP学习(三)
2006/10/09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
说明的比较细的php 正则学习实例
2008/07/30 PHP
PHP 程序员的调试技术小结
2009/11/15 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
JS的replace方法介绍
2012/10/20 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
python写日志封装类实例
2015/06/28 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
自我评价中英文语句
2013/11/30 职场文书
教师自查自纠材料
2014/10/14 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python