当前位置: 首页 > news >正文

Python 数据分析与可视化 Day 12 - 建模前准备与数据集拆分

✅ 今日目标

  • 掌握建模前常见准备步骤
  • 学会使用 train_test_split() 将数据划分为训练集和测试集
  • 理解特征(X)与标签(y)的区分
  • 学习常见建模流程的输入要求(格式、维度)

📘 一、建模前准备流程概览

  1. 数据清洗(缺失值、异常值处理)✅
  2. 特征工程(编码、标准化、派生)✅
  3. 数据集划分(训练 / 测试)✅
  4. 模型选择与训练(下一阶段)
  5. 模型评估与调参

📚 二、提取特征列与标签列

import pandas as pddf = pd.read_csv("data/processed/students_featured.csv")# 特征列(可以自定义选择)
X = df[["成绩_标准化", "性别_女", "性别_男", "是否及格_数值"]]# 标签列(以是否及格为预测目标)
y = df["是否及格_数值"]

📘 三、划分训练集与测试集

from sklearn.model_selection import train_test_split# 按 80% 训练 / 20% 测试,随机种子保持一致性
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42
)print("训练集样本数:", len(X_train))
print("测试集样本数:", len(X_test))

📘 四、保存拆分结果(供建模使用)

X_train.to_csv("data/model/X_train.csv", index=False)
X_test.to_csv("data/model/X_test.csv", index=False)
y_train.to_csv("data/model/y_train.csv", index=False)
y_test.to_csv("data/model/y_test.csv", index=False)

📊 可选探索:类别平衡性检查

print("训练集是否及格分布:")
print(y_train.value_counts(normalize=True))print("测试集是否及格分布:")
print(y_test.value_counts(normalize=True))

🧪 今日练习建议

  1. 从增强后的数据中提取合适的特征列(X)和目标列(y)

  2. 使用 train_test_split 按比例划分训练 / 测试集

  3. 将结果分别保存到 CSV 文件

  4. 检查样本比例是否合理、是否存在类别不平衡问题(特别是分类任务)

    import pandas as pd
    from sklearn.model_selection import train_test_split
    import os# 1. 加载数据
    input_path = "data/processed/students_featured.csv"
    if not os.path.exists(input_path):raise FileNotFoundError("❌ 请先运行 feature_engineering.py 生成 students_featured.csv")df = pd.read_csv(input_path)
    print("✅ 已加载数据:", input_path)
    print(df)# 2. 提取特征列和标签列
    feature_cols = ["成绩_标准化", "性别_女", "性别_男", "是否及格_数值"]
    label_col = "是否及格_数值"X = df[feature_cols]
    y = df[label_col]print("\n🔍 特征维度:", X.shape)
    print("🔍 标签维度:", y.shape)# 3. 划分训练集和测试集(80% / 20%)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42
    )print(f"\n📦 拆分完成:训练集 {len(X_train)} 条,测试集 {len(X_test)} 条")# 4. 可选:检查类别平衡性
    print("\n📊 训练集类别分布:")
    print(y_train.value_counts(normalize=True))print("\n📊 测试集类别分布:")
    print(y_test.value_counts(normalize=True))# 5. 保存拆分结果
    os.makedirs("data/model", exist_ok=True)
    X_train.to_csv("data/model/X_train.csv", index=False)
    X_test.to_csv("data/model/X_test.csv", index=False)
    y_train.to_csv("data/model/y_train.csv", index=False)
    y_test.to_csv("data/model/y_test.csv", index=False)print("\n✅ 拆分后的数据已保存至 data/model/ 文件夹")
    

    运行输出:

✅ 已加载数据: data/processed/students_featured.csv姓名    成绩   是否及格  性别编码   性别_女   性别_男    成绩_标准化    成绩_归一化  是否及格_数值 成绩等级        考试时间  考试月  考试周      考试星期
0  张三  88.0   True     1  False   True  1.166997  1.000000        12024-06-01    6   22  Saturday
1  李四  78.0   True     0   True  False  0.214346  0.655172        12024-06-01    6   22  Saturday
2  王五  59.0  False     1  False   True -1.595690  0.000000        0  不及格  2024-06-01    6   22  Saturday
3  田七  78.0   True     0   True  False  0.214346  0.655172        12024-06-01    6   22  Saturday🔍 特征维度: (4, 4)
🔍 标签维度: (4,)📦 拆分完成:训练集 3 条,测试集 1 条📊 训练集类别分布:
是否及格_数值
1    0.666667
0    0.333333
📊 测试集类别分布:
是否及格_数值
1    1.0
✅ 拆分后的数据已保存至 data/model/ 文件夹

在这里插入图片描述
x测试集:
在这里插入图片描述
x训练集:
在这里插入图片描述
y测试集:
在这里插入图片描述
y训练集:
在这里插入图片描述


🧾 今日总结

步骤工具说明
特征提取Pandas DataFrame自定义特征列
数据拆分train_test_split来自 sklearn
保存格式CSV便于后续建模使用
类别分析value_counts()检查是否严重偏斜
http://www.dtcms.com/a/263030.html

相关文章:

  • 【C语言 | 字符串处理】sscanf 用法(星号*、集合%[]等)详细介绍、使用例子源码
  • 嵌入式SoC多线程架构迁移多进程架构开发技巧
  • C++ std::list详解:深入理解双向链表容器
  • uniapp小程序蓝牙打印通用版(集成二维码打印)
  • 深度学习04 卷积神经网络CNN
  • 【Python】 Function
  • 计算整数二进制中1的个数
  • 障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
  • day47 注意力热图可视化
  • 展示折线图的后端数据连接
  • leetcode427.建立四叉树
  • 利润才是机器视觉企业的的“稳定器”,机器视觉企业的利润 = (规模经济 + 技术差异化 × 场景价值) - 竞争强度
  • ViT与CLIP:图像×文本 多模态读心术揭秘
  • 大数据系统架构实践(三):Hbase集群部署
  • 嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别
  • EPLAN 中定制 自己的- A3 图框的详细指南(一)
  • 【机器学习深度学习】适合微调的模型选型指南
  • DAOS集群部署-Docker模式
  • CloudBase AI Toolkit 让我用“嘴”开发出的第一款网页游戏
  • 网络安全运维与攻防演练综合实训室解决方案
  • 服务器被入侵的常见迹象有哪些?
  • CentOS服务器SSH远程连接全指南
  • HarmonyOS NEXT应用元服务常见列表操作多类型列表项场景
  • 2025年数字信号、计算机通信与软件工程国际会议(DSCCSE 2025)
  • Excel 如何让表看起来更清晰、专业,而不是花里胡哨?
  • 低功耗MM32L0180系列MCU
  • 【Kafka】docker 中配置带 Kerberos 认证的 Kafka 环境(全过程)
  • [springboot系列] 探秘 JUnit 5:现代 Java 单元测试利器
  • Spring Boot 实现不同用户不同访问权限
  • 基于uniapp的老年皮肤健康管理微信小程序平台(源码+论文+部署+安装+售后)