深色模式
Python 与数据处理
科研中写的大部分代码都是 Python:实验脚本、数据处理、画图、调用模型。课内学过 Python 的同学,通常还需要补“工程能力”和“数据处理库”两块。
学到什么程度
能独立写出这样的程序:读取一个实验结果文件夹里的几十个 JSON 文件,汇总成表格,计算每组的平均值和标准差,画成带误差棒的折线图并保存为 PDF。整个程序结构清晰,别人能看懂、能运行。
第一步:查漏补缺(1~2 周)
对照下面的清单,不熟的部分补上:
| 主题 | 要会的内容 |
|---|---|
| 基础语法 | 列表/字典/集合推导式、f-string、切片、解包、enumerate、zip |
| 函数 | 默认参数、*args/**kwargs、lambda、函数作为参数传递 |
| 面向对象 | 类、继承、__init__、@property、@dataclass |
| 模块与包 | import 的规则、if __name__ == "__main__": 的作用、自己写一个包 |
| 文件与数据 | 用 pathlib 处理路径,读写 JSON、CSV,with 语句 |
| 错误处理 | try/except、读懂报错信息(Traceback 从下往上看) |
| 常用标准库 | os、sys、time、argparse、logging、subprocess、collections |
| 进阶(了解即可) | 类型标注、生成器、装饰器、asyncio 异步编程 |
资料
- Python 官方教程(中文):最权威,适合查漏补缺。
- 廖雪峰 Python 教程:中文,讲解细致,适合入门。
- CS61A:伯克利的编程入门课,用 Python 讲程序设计思想,作业质量很高。基础已经不错、想提升编程思维的同学推荐。
第二步:数据处理三件套(2 周)
| 库 | 作用 | 要会的内容 |
|---|---|---|
| NumPy | 数组和矩阵计算,PyTorch 的张量操作和它几乎一样 | 创建数组、索引切片、形状变换(reshape)、广播、向量化计算、np.mean/np.percentile |
| Pandas | 表格数据处理 | 读写 CSV、筛选行列、groupby 聚合、合并表格 |
| Matplotlib | 画图 | 折线图、柱状图、散点图、子图、误差棒、保存 PDF |
资料:《利用 Python 进行数据分析》(Python for Data Analysis,Pandas 作者 Wes McKinney 著),第 3 版在线免费阅读。
练习:下载一份公开数据集(例如 Kaggle 上的任意 CSV 数据集),回答 3 个你感兴趣的问题,每个问题用一张图说明。
python
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("data.csv")
print(df.head()) # 看前几行
print(df.describe()) # 每列的统计信息
# 按某一列分组,计算另一列的平均值
summary = df.groupby("category")["value"].agg(["mean", "std", "count"])
print(summary)
summary["mean"].plot(kind="bar", yerr=summary["std"], capsize=3)
plt.ylabel("value")
plt.tight_layout()
plt.savefig("summary.pdf")第三步:写出“能交给别人”的代码
科研代码经常要交给别人复现,或者几个月后自己再看。几条最重要的习惯:
- 一个函数只做一件事,函数名说清楚它做什么。
- 不要写死路径和参数,用命令行参数(
argparse)或配置文件,见实验脚本模板。 - 用
logging代替print记录长时间运行的程序。 - 写 README:怎么安装依赖、怎么运行、输出在哪里。
- 用格式化工具:Ruff 能自动整理代码格式并检查常见错误,在 VS Code 里装插件即可。
Jupyter Notebook
Jupyter 适合边写边看结果:探索数据、调试模型、画图。在 VS Code 里新建 .ipynb 文件就能直接使用(需要先在环境里安装 ipykernel,见 Python 环境)。
注意:Notebook 里的单元格可以乱序执行,容易出现“我这里能跑、重新打开就跑不了”的情况。探索完成后,把核心逻辑整理成 .py 脚本再做正式实验。
调试
- 读 Traceback:从最后一行开始看错误类型和信息,再往上找到你自己写的代码那一行。
- 在 VS Code 里打断点调试(点击行号左侧出现红点,按 F5),可以一步步执行、查看每个变量的值,比到处加
print高效得多。 - 报错信息复制去搜索(或者问 AI),通常都能找到原因。