python划分CSV格式的数据集

news/2024/9/28 21:30:28/

编写一个 Python 函数,将 clusters.csv 文件,格式为:第一列为编号,第二列为聚类的代表序列,第三列为所有的其它同源序列,逗号隔开(TM-align蛋白质聚类数据格式转化-CSDN博客),划分为 trainvalid, 和 test 数据集。通常,我们可以根据一定的比例(比如 70% 用于 train,15% 用于 valid,15% 用于 test)进行划分。

以下是一个将 clusters.csv 划分为三个数据集的示例函数:

import csv
import random
import osdef split_dataset(input_csv, train_csv, valid_csv, test_csv, train_ratio=0.7, valid_ratio=0.15, test_ratio=0.15, seed=42):"""将clusters.csv文件划分为train, valid, test数据集。:param input_csv: 输入的csv文件路径:param train_csv: 输出的训练集csv文件路径:param valid_csv: 输出的验证集csv文件路径:param test_csv: 输出的测试集csv文件路径:param train_ratio: 训练集比例,默认0.7:param valid_ratio: 验证集比例,默认0.15:param test_ratio: 测试集比例,默认0.15:param seed: 随机种子,确保划分结果可复现"""# 检查比例是否为1assert train_ratio + valid_ratio + test_ratio == 1, "训练、验证和测试集的比例必须加起来等于1"# 设置随机种子random.seed(seed)# 读取原始数据with open(input_csv, 'r') as csvfile:reader = list(csv.reader(csvfile))header = reader[0]  # 读取标题行data = reader[1:]   # 读取数据部分# 打乱数据random.shuffle(data)# 计算划分的索引total_size = len(data)train_size = int(total_size * train_ratio)valid_size = int(total_size * valid_ratio)train_data = data[:train_size]valid_data = data[train_size:train_size + valid_size]test_data = data[train_size + valid_size:]# 定义一个辅助函数来写csv文件def write_csv(output_csv, data):with open(output_csv, 'w', newline='') as csvfile:writer = csv.writer(csvfile)writer.writerow(header)  # 写入标题行writer.writerows(data)   # 写入数据# 写入三个文件write_csv(train_csv, train_data)write_csv(valid_csv, valid_data)write_csv(test_csv, test_data)print(f"数据集已成功划分:\n训练集: {len(train_data)} 条记录\n验证集: {len(valid_data)} 条记录\n测试集: {len(test_data)} 条记录")# 调用函数进行数据集划分
split_dataset(input_csv='clusters.csv', train_csv='train.csv', valid_csv='valid.csv', test_csv='test.csv'
)

解释:

  1. 函数参数

    • input_csv: 输入的 clusters.csv 文件路径。
    • train_csvvalid_csvtest_csv: 输出的训练集、验证集、测试集文件路径。
    • train_ratiovalid_ratiotest_ratio: 数据集划分的比例,默认是 70% 训练集,15% 验证集,15% 测试集。
    • seed: 随机种子,确保每次划分的结果一致。
  2. 逻辑

    • 读取 clusters.csv 文件并将数据打乱。
    • 按照指定比例计算每个数据集的大小。
    • 将数据分别写入 train.csvvalid.csv 和 test.csv 文件中。
  3. 使用

    • 将原始的 clusters.csv 文件作为输入,输出 train.csvvalid.csv 和 test.csv

http://www.ppmy.cn/news/1530621.html

相关文章

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: A. 使用表存储数据,格式统一,便于维护。…

2024 Python3.10 系统入门+进阶(十六):正则表达式

目录 一、认识正则表达式二、正则表达式基本语法2.1 行界定符2.2 单词定界符2.3 字符类2.4 选择符2.5 范围符2.6 排除符2.7 限定符2.8 任意字符2.9 转义字符2.10 反斜杠2.11 小括号2.11.1 定义独立单元2.11.2 分组 2.12 反向引用2.13 特殊构造2.14 匹配模式 三、re模块3.1 comp…

开放原子开源基金会网站上的开源项目Opns存在缓冲区溢出缺陷

最近在开放原子开源基金会网站上,看到一些开源项目,之前分析出华为的鸿蒙操作系统代码,没有发现有价值的安全漏洞。现在,下载上面的Onps开源网络协议栈,既然是通讯所使用的软件,其质量应该值得信任呢&#…

Web APIs 4:事件流、事件委托

Web APIs 3(事件流、事件委托) 1.事件流 事件流:事件完整执行过程中的流动路径捕获阶段:从DOM根元素开始去执行对应的事件(从外到里) DOM.addEventListener(事件类型,事件处理函数&#xff0…

C#_封装详解

封装 封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。 抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使程序员实现所需级别的抽象…

PHP 中传值与传引用的区别

在 PHP 中,理解传值与传引用的区别对于编写高效、可维护的代码至关重要。 一、基础概念 1. 传值(Pass by Value) 在 PHP 中,默认情况下,参数是通过值传递的。这意味着函数内部对参数所做的任何修改都不会影响到函数…

【Java数据结构】 ---对象的比较

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 ,Java 欢迎大家访问~ 创作不易,大佬们点赞鼓励下吧~ 前言 上图中,线性表、堆…

cisp-pte多少钱考一次?cisp-pte报考费用及报考条件一次说清楚!

CISP-PTE即注册信息安全专业人员-渗透测试工程师,是目前被业界认可的主流专业攻防领域的资质认证,很多小伙伴都在问:CISP-PTE报考条件是什么?cisp-pte报考费用要多少钱?今天一文给大家说清楚! 一、CISP-PT…