python划分CSV格式的数据集

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

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

复制代码
import csv
import random
import os

def 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: 随机种子,确保划分结果可复现
    """
    # 检查比例是否为1
    assert 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_csv, valid_csv, test_csv: 输出的训练集、验证集、测试集文件路径。
    • train_ratio, valid_ratio, test_ratio: 数据集划分的比例,默认是 70% 训练集,15% 验证集,15% 测试集。
    • seed: 随机种子,确保每次划分的结果一致。
  2. 逻辑:

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

    • 将原始的 clusters.csv 文件作为输入,输出 train.csv、valid.csv 和 test.csv。
相关推荐
言乐611 小时前
Python实现三轴联动根据数据自动打磨镜片模型
开发语言·python
万化冥合11 小时前
如何批量把 PPT 转成视频?
python·1024程序员节
xiangjiaodalishi12 小时前
武汉玖叁鹿科技:我们把 GEO 服务做成了可以审计的交付工程
python·1024程序员节
zzu123zsw12 小时前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
开发语言·python·rust·大模型·ai agent
jiangliushi612 小时前
GPT-6.1 Sol 免费用:Python 读文件报 ‘gbk‘ codec can‘t decode?加一个参数就好
python·编码·1024程序员节
餐赢计餐饮策划设计12 小时前
如何判断国潮养生设计是否适合自己?
python·1024程序员节
艾灸爱好者13 小时前
艾草精油专业制造商哪3点决定品质高低?
python·1024程序员节
weixin_4404016913 小时前
大数据技术-人工智能编程题
大数据·人工智能·python·1024程序员节
“AI国潮设计-小江”13 小时前
AIGC实战:Python+SDXL批量生成英歌舞IP立牌,解锁猪猪蛋糕“反差萌”流量密码(附完整API源码)
开发语言·人工智能·python·prompt·aigc
成信吴彦祖14 小时前
当前专业的无人机RID侦测主站供应商主要有哪些
python·1024程序员节