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 07 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
浅谈Python爬虫基本套路
Mar 25 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
python 基于opencv 绘制图像轮廓
Dec 11 Python
Python Matplotlib绘制条形图的全过程
Oct 24 Python
Python如何加载模型并查看网络
Jul 15 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中socket通信机制实例详解
2015/01/03 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
python复制文件的方法实例详解
2015/05/22 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
Python生成器generator原理及用法解析
2020/07/20 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
售后服务经理岗位职责范本
2014/02/22 职场文书
老公给老婆的保证书
2014/04/28 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL