DAY 31

一、Notebook 里在干什么

notebook 里的 .ipynb 文件通常承担 "草稿纸 + 说明书" 的角色,核心思路是:

  1. 快速实验

    • 数据读取、分布查看、缺失值检查
    • 尝试不同的特征工程、模型,看哪个有效
    • 可视化分析,理解业务与数据的关系(信贷场景如逾期率、收入分布)
  2. 沉淀分析逻辑

    • 把实验结论写成 markdown 说明,解释每一步的原因
    • 这些结论会指导后续工程代码的编写
  3. 最终并不是"可交付"的代码

    • 很多函数是零散的,变量名随意,没有模块化
    • 所以今天要学的就是:如何把 notebook 里的有效内容,提炼到规范的项目结构中,让它可复用、可维护、可上线。

二、项目文件夹的拆分方法(以信贷项目为例)

一个典型的机器学习项目拆分类似这样(很多大项目都是这个骨架):

复制代码
credit_project/
├── data/                # 原始数据 & 处理后的数据(只读/版本管理)
│   ├── raw/
│   └── processed/
├── notebooks/           # 探索性分析,文件名带编号和主题
│   └── 01_data_exploration.ipynb
├── src/                 # 核心代码包
│   ├── __init__.py
│   ├── preprocess.py    # 数据清洗、缺失值填补、编码
│   ├── features.py      # 特征构造、筛选
│   ├── train.py         # 模型训练与交叉验证
│   ├── evaluate.py      # 评估指标、AUC/KS、报告生成
│   └── utils.py         # 通用工具(日志、配置读取)
├── configs/             # 配置文件(yaml/json),参数集中管理
│   └── config.yaml
├── models/              # 保存训练好的模型文件
├── outputs/             # 输出结果(预测结果、图表)
├── tests/               # 单元测试
├── requirements.txt     # 依赖包版本
├── README.md            # 项目说明
└── main.py              # 主入口,串联所有流程(可选)

拆分原则

  • 数据与代码分离:原始数据只读,处理后的数据由代码生成,不手动修改。
  • 流程模块化 :每个 .py 只负责一个阶段(清洗、特征、训练),函数职责单一。
  • 可配置 :超参、路径、阈值全写在 configs/ 里,改动不碰代码。
  • 可复现:固定随机种子,记录依赖版本。

三、知识点回顾对照

1. 规范的文件命名

  • 模块名用小写 + 下划线:preprocess.pytrain_model.py
  • Notebook 用数字编号:01_xxx.ipynb,方便排序
  • 数据文件有明确版本或日期:application_20250101.csv
  • 避免中文、空格和特殊字符

2. 规范的文件夹管理

  • 按功能分层,不要所有文件平铺在根目录
  • src/ 就是你的"工具箱",notebooks/ 是"实验记录"
  • 第三方代码、原始数据、产出物各归其位

3. 机器学习项目的拆分

  • 对应上面的项目树,把 "notebook 思路" 转成 "工程代码":
    • 探索后,把数据清洗逻辑写成 preprocess.py 的函数
    • 把特征构造写成 features.py,并用 ColumnTransformerPipeline 封装
    • 训练逻辑独立,方便调参和切换模型
  • 这样可以一键运行,而不是手动一个 cell 一个 cell 点

4. 编码格式和类型注解

  • 文件头声明编码

    python 复制代码
    # -*- coding: utf-8 -*-

    确保中文注释、数据列名在不同系统不乱码。

  • 类型注解(Type Hints)

    python 复制代码
    def calc_ks(y_true: np.ndarray, y_pred: np.ndarray) -> float:
        ...

    好处:IDE 会有代码提示、错误检查,读代码的人也更容易理解函数的输入输出。

相关推荐
evans在进步8 分钟前
LeetCode 33:搜索旋转排序数组——Java 两阶段二分查找详解
java·python·leetcode
言乐641 分钟前
Python游戏水平测试辅助系统2
开发语言·windows·python·游戏·django
jerryinwuhan2 小时前
《Python数据预处理》第四章
开发语言·python
雨晨源码(同名B站)2 小时前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
阿童木写作2 小时前
跨境电商图片翻译工具推荐:跨马翻译批量处理视频字幕与抠图
python·音视频
怪奇云呼军3 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
ZC跨境爬虫3 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
Patrick在香港4 小时前
Python正则表达式实战:解析和验证香港身份证、车牌、电话格式
开发语言·python·正则表达式
路溪非溪4 小时前
Python语言的执行流程总结
开发语言·python
宋均浩4 小时前
AI 生成代码质量防线实战:5 个 CI/CD 配置,把 8% 的逻辑错拦在线上之前0
python