Skip to content

第 47 课:Jupyter Notebook 与实验环境

🎯 核心实操目标

通关要求:建立”一文一码互动伴随”的可复现研究工作流。本课你将掌握 Jupyter Notebook 的基本操作、Python 数据分析速成(pandas + matplotlib),并能产出代码+文字+图表一体化的研究文档——让任何审稿人或同行能一键复现你的全部分析。

📋 课前准备(10 分钟,含安装)

工具/环境(二选一)

方案 A:Anaconda(推荐零基础) — 一键含 Python + Jupyter + pandas + matplotlib

方案 B:纯 Python + pip(适合已装 Python 的进阶轨)

bash
# 创建虚拟环境
python -m venv aicourse_env
source aicourse_env/bin/activate  # Mac/Linux
# 或 aicourse_env\Scripts\activate  # Windows

# 安装依赖
pip install jupyter pandas matplotlib numpy scipy seaborn

# 启动
jupyter notebook

数据/素材

配置验证

打开 Jupyter Notebook,新建一个 Cell 跑通:

python
import pandas as pd
import matplotlib.pyplot as plt
print(pd.__version__, plt.matplotlib.__version__)
# 应输出版本号,无报错即成功

应急通道

场景痛点破冰:你为什么陷入了学术造假风暴的信任危机?

“近年顶级学术圈频频撤稿撤文。很多同学感到委屈:我明明辛辛苦苦算了一下午! 问题出在你的论述方式。在论文的 Result 部分,你直接给出了一张完美对称的折线图,然后告诉审稿人‘这就是运行得到的结果’。 这很难令人信服。 当你用鼠标删去那些因乱填导致的离群数据点时,并没有在论文中说明和报告。学术界如今对这种只呈现结果、不展示过程的做法越来越审慎。解决它的关键工具——就是与代码相伴的完整记录。”


🗺️ 架构重组:文本与机器火花的乐高咬合拼接

Jupyter 的核心在于“一段供人阅读的说明”+“一段供机器运行的代码”,像分层结构一样自上而下排布执行:

.ipynb 木星工作流截面【人类语言阐述区 (Markdown)】import pandas as pd...点击运行本槽【机器视觉即时验真产出槽】

🚀 拆解实战:跑通一份"Markdown 说明 + 代码 + 图"的可复现 Notebook

以 Case A 问卷数据为例,一格说明 + 一格代码交替往下排。把 case_A_questionnaire.csv 放到 Notebook 同目录,逐格运行(Shift+Enter)。

① 载入数据(Markdown 格写一句"步骤1:载入并查看数据",下面 Code 格):

python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv("case_A_questionnaire.csv")
print(df.shape)          # (540, 33)
df.head()

② 清洗:剔除作答过快 + 列表删除缺失(与第 23 课口径一致):

python
items = [c for c in df.columns
         if c.split('_')[0] in ('Anxiety', 'Strategy', 'Efficacy')]
clean = df[df['Duration_Min'] >= 3]        # 作答 < 3 分钟视为无效
clean = clean.dropna(subset=items).copy()  # 列表删除任何题项缺失的行
print(f"清洗后样本量: {len(clean)}")        # 约 500

③ 反向题反转 + 维度均分(反向题 _R = 6 - 原值):

python
clean['Anxiety_4_R'] = 6 - clean['Anxiety_4']     # 认知焦虑反向题
clean['Anxiety_Cog'] = clean[['Anxiety_1', 'Anxiety_2',
                              'Anxiety_3', 'Anxiety_4_R']].mean(axis=1)
clean[['Anxiety_1', 'Anxiety_4', 'Anxiety_4_R', 'Anxiety_Cog']].head()

④ 画相关热力图(结果格正下方即时出图):

python
corr = clean[['Anxiety_1', 'Anxiety_2', 'Anxiety_3', 'Anxiety_4_R']].corr()
plt.figure(figsize=(5, 4))
sns.heatmap(corr, annot=True, cmap='RdBu_r', center=0, vmin=-1, vmax=1)
plt.title('认知焦虑题项相关矩阵')
plt.tight_layout()
plt.show()

全部跑通后,文件 → Download as → PDF/HTML 导出,就得到一份代码 + 文字 + 图一体、审稿人能一键复现的分析记录。这就是 Jupyter 的价值:把分析过程透明化

让 AI 当助手,但你要看懂每一格

你可以让 AI 帮你写某一格代码,但粘贴前先读懂它做了什么——尤其是清洗那一格(它删了哪些行?怎么处理缺失?)。看不懂就让它逐行加注释。"透明地跑出图"不等于"做对了",方法本身要站得住(见下)。


🚦 批判性复核:清洗与插补不能"为了好看"

Jupyter 让过程透明,但透明地做错仍然是错。两条最容易翻车的红线:

  • 离群值不能"鼠标随手删":要预设客观准则(如 |Z| > 3 或箱线图 1.5×IQR),并在论文 Methods 里报告删了几个、依据是什么。绝不能为了让曲线好看而偷偷删点。
  • 缺失值插补要慎重均值填充会低估方差、可能引入偏倚。优先做法:量表得分用该题项所在维度的可用题项求均值(跳过 NA),或对缺失较多时用多重插补;并先判断缺失机制(MCAR/MAR)。无论怎么处理,都要在论文里如实说明

一句话:上一节那种"向下均值强行补录、鼠标删离群点"的做法,恰恰是会被盲审抓的——正确姿势是预设准则 + 如实报告


📦 本课交付物(提交给 AI 初审/讲师抽检)

按本节实操任务完成并提交以下内容,AI 初审 + 讲师抽检按 Module_Rubrics.md 对应维度评分:

  • [ ] 可运行的 .ipynb:含上面 4 格(载入 / 清洗 / 反转 / 出图),每格都能跑通
  • [ ] 导出的 PDF 或 HTML:含代码 + 文字 + 热力图的可复现记录
  • [ ] 清洗方法说明:你的离群值准则 + 缺失处理方式(如实写明,对应批判性复核)
  • [ ] AI 协作日志:让 AI 写某格代码的"指令 → 输出 → 你读懂 / 修正"记录

🏁 小结与自测 (Milestone Checklist)

  • [ ] 我能在 Jupyter 跑通"载入 → 清洗 → 反转 → 出图"四格,并导出可复现的 .ipynb / PDF
  • [ ] 我清楚反向题要 _R = 6 - 原值,维度均分用反转后的题项
  • [ ] 我会预设客观准则处理离群值,并在论文 Methods 如实报告(不随手删)
  • [ ] 我知道均值插补的风险,会先判断缺失机制、优先用可用题项均值 / 多重插补
  • [ ] 我把 AI 当代码助手,但粘贴前读懂每一格,不盲信"出了图就对了"

助力学者在 AI 时代极速产出高质量学术成果 · 55 课时双轨制 · plan v3.3