Python 按分类样本数占比生成并随机获取样本数据

简介: Python 按分类样本数占比生成并随机获取样本数据

按分类样本数占比生成并随机获取样本数据


开发环境

win 10

python 3.6.5

 

需求

已知样本分类,每种分类的样本占比数,及样本总数,需要随机获取这些分类的样本。比如,我有4种任务,分别为任务A,任务B,任务C,任务D, 每种任务需要重复执行的总次数为1000,每次执行随机获取一种任务来执行,不同分类任务执行次数占比为 A:B:C:D = 3:5:7:9

 

 

代码实现

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

 

__author__ ='shouke'

 

 

importrandom

 

defget_class_instance_by_proportion(class_proportion_dict, amount):

    """

    根据每种分类的样本数比例,及样本总数,为每每种分类构造样本数据

    class_proportion_dict: 包含分类及其分类样本数占比的字典:{"分类(id)": 分类样本数比例}

    amount: 所有分类的样本数量总和

 

    返回一个列表:包含所有分类样本的list

 

    """

 

    bucket =[]

    proportion_sum =sum([weight forgroup_id, weight inclass_proportion_dict.items()])

    residuals ={} # 存放每种分类的样本数计算差值

    forclass_id, weight inclass_proportion_dict.items():

        percent =weight /float(proportion_sum)

        class_instance_num =int(round(amount *percent))

        bucket.extend([class_id forinrange(class_instance_num)])

        residuals[class_id] =amount *percent -round(amount *percent)

    iflen(bucket) < amount:

        # 计算获取的分类样本总数小于给定的分类样本总数,则需要增加分类样本数,优先给样本数计算差值较小的分类增加样本数,每种分类样本数+1,直到满足数量为止

        forclass_id in[l forl, r insorted(residuals.items(), key=lambdax: x[1], reverse=True)][: amount -len(bucket)]:

            bucket.append(class_id)

    eliflen(bucket) > amount:

        # # 计算获取的分类样本总数大于给定的分类样本总数,则需要减少分类样本数,优先给样本数计算差值较大的分类减少样本数,每种分类样本数-1,直到满足数量为止

        forclass_id in[l forl, r insorted(residuals.items(), key=lambdax: x[1])][: len(bucket) -amount]:

            bucket.remove(class_id)

 

    returnbucket

 

 

classA:

    defto_string(self):

        print('A class instance')

 

classB:

    defto_string(self):

        print('B class instance')

 

classC:

    defto_string(self):

        print('C class instance')

 

classD:

    defto_string(self):

        print('D class instance')

 

classes_map ={1: A, 2: B, 3:C, 4: D}

class_proportion_dict ={13253:749# {分类id: 样本数比例} ,即期望4个分类的样本数比例为为 3:5:7:9

class_instance_num =1000# 样本总数

result_list =get_class_instance_by_proportion(class_proportion_dict, class_instance_num)

 

forclass_id inclass_proportion_dict:

    print('%s %s'%(classes_map[class_id], result_list.count(class_id)))

 

# 制造样本并随机获取样本

random.shuffle(result_list)

whileresult_list:

    class_id =random.sample(result_list, 1)[0]

    classes_map[class_id]().to_string()

    result_list.remove(class_id)


 

运行结果

 

 

 

 

说明

以上方式大致实现思路就是在知道总样本数的情况下,提前为每种分类生成样本,然后随机获取,按这种方式可以实现比较准确的结果,但是得提前知道样本总数及不同分类样本数占比

 

 

目录
相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
305 10
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
3月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
92 3
|
3月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
154 0
|
3月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析

热门文章

最新文章

推荐镜像

更多