工科研究生用 Mac,也可以很完美
关于 Mac 和 Windows 之争,貌似一直就没有休止过。好像每一边都有另一边「不可替代」的护城河,最后得出的结论,都会回到:「大家根据自己的需求和关注点,选择合适的产品」这样熟悉、统一又无感的话术里。
但现实很多时候,我觉得并不是那么理性、明晰的,有一个完美的选择,等待着每个人去按下确认/否认按钮。
很多时候是,我更喜欢某一个东西——做工、质感、审美。但因为某些「不可更改的」情景和前提,只能忍痛放弃掉那个更喜欢的东西,选择妥协,最终导致花了不小一笔支出,但还是没有收获到那么让人满意的产品!
说的是不是你?
我喜欢 Mac
对于电脑,我个人是 Mac 的忠实推荐者,并且是基于「长年限、高频使用后」的强烈推荐,我并没有收取任何的广告费,单纯的基于产品、工具、使用体验来推荐这款产品。
所以 21 年买电脑的时候,我就不是基于「脑子一热」的冲动下单,而是基于我对这款产品历史的足够了解、未来的发展计划、我自己的平日习惯和要求,而下单的一款产品。
准确来说:我十分坚定且清晰的知道我自己是什么样的、且未来要做什么、我想要什么!也知道这款产品过去是怎样的、现在在干嘛、未来会怎么发展。
一直到今天,我都觉得:每个人,都应该拥有一台搭载 M 芯片的 Mac 电脑,体验一下这个世界上最优雅、最符合笔记本终极形态的顶级工业产品,是什么样的。
工科生也适合用 Mac
过去我们提到「劝退购买 Mac」的理由里,总会看到那一条——如果你是理工科的学生,有很多专业软件的需求,那么不建议购买 Mac 电脑。
这个建议好像看起来有一些道理,但是越到今天、越往后,这个建议显得越发无力、苍白。
因为 Mac 的软件生态、开源生态已经越来越丰富,很多工业软件在 Mac 上已经有设计更精美、交互体验更好的平替了,只是说很多人只听说过在 Windows 上那些大名鼎鼎的软件,以为 Mac 上没有,就好像 Mac 不能用。
但其实,现实并不是这样。只是我们需要花时间、花精力去找找资源、学习一些操作。
我就是工科研究生
我本身就是一名工科在读研究生,我使用的就是 MacBook,但是马上研三即将毕业,我也没有遇到过「一定非得 Windows 不可」的场景,真的!
比如说平日汇报的 PPT,论文里需要用到的机理图、流程图等等,Keynote 的使用体验不知道甩 PowerPoint 多少条街,我依旧这么觉得。Mac 系统自带的软件,Keynote 一定是值得大家悉心把玩的应用。
更别说 Zotero、Endnote 等文献管理软件,早都适配了 Mac 端。
可能很多人害怕的是,遇到一些需要数据处理、绘制图表的场景。比如需要分析处理一批新鲜出炉的「平行实验数据」,需要知道显著性差异、方差等等;然后根据这些数据结果绘制带有误差棒和标记显著差异性的图表。
貌似这些工作「一定要用到 SPSS、Origin」,但其实它一直都有其它可以解决的办法。
看看我怎么用 Mac 解决这些小问题的。
我怎么用 Mac
在 AI 兴起之前,Python 就是一个「万金油编程语言」,简单直观的语法结构搭配上丰富的第三方库,真的可以实现、解决很多领域的功能需求。
比如我们工科生的数据分析处理、图表绘制要求,Python 的 Numpy、Pandas、Matplotlib、Seaborn 这几个库,可以满足我们的绝大部分需求,并且我也一直在使用。
python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import re
import io
# ================= 1. 绘图风格与字体设置 =================
# 使用 Matplotlib 内置字体,避免系统字体缺失导致报错
sns.set_theme(style="whitegrid", rc={"grid.linestyle": "--", "grid.linewidth": 0.5})
plt.rcParams["font.sans-serif"] = ["DejaVu Sans"]
plt.rcParams["axes.unicode_minus"] = False
# ================= 2. 数据 =================
# 如果本地有“色泽.csv”,可以取消下面这行注释,并注释掉 df = pd.read_csv(io.StringIO(csv_data))
# df = pd.read_csv("色泽.csv", encoding="utf-8-sig")
csv_data = """指标,CK,LP,MP,OPT,HP
L*(亮度),38.38±0.32ᵃ,39.06±0.54ᵃ,40.21±0.31ᵇ,41.43±0.16ᶜ,42.23±0.06ᶜ
a*(红度),6.44±0.07ᵃ,6.52±0.07ᵃ,6.63±0.05ᵇ,6.78±0.06ᶜ,6.80±0.02ᶜ
b*(黄度),10.52±0.42ᵃ,11.49±0.21ᵇ,12.74±0.29ᶜ,13.79±0.25ᵈ,14.19±0.25ᵈ
C*(色度),12.33±0.39ᵃ,13.22±0.18ᵇ,14.36±0.27ᶜ,15.36±0.25ᵈ,15.73±0.24ᵈ
h°(色调角),58.50±0.73ᵃ,60.42±0.50ᵇ,62.49±0.43ᶜ,63.80±0.26ᵈ,64.40±0.33ᵈ
ΔE*(总色差),58.60±0.25ᶜ,58.09±0.54ᶜ,57.20±0.34ᵇ,56.24±0.17ᵃ,55.55±0.12ᵃ
"""
df = pd.read_csv(io.StringIO(csv_data))
# ================= 3. 修复上标字母映射 =================
# 只映射数据中实际出现的上标字母:ᵃ、ᵇ、ᶜ、ᵈ
superscript_map = str.maketrans("ᵃᵇᶜᵈ", "abcd")
# ================= 4. 解析“均值±标准差字母” =================
def parse_value(val):
"""
将类似 38.38±0.32a 的字符串拆分为:
均值、标准差、显著性字母
"""
val_str = str(val).translate(superscript_map)
match = re.search(r"([\d\.]+)\s*±\s*([\d\.]+)", val_str)
if not match:
return np.nan, np.nan, ""
mean = float(match.group(1))
std = float(match.group(2))
letter = val_str[match.end():].strip()
return mean, std, letter
# ================= 5. 图表标题映射 =================
# 使用英文标题,避免中文字体或特殊符号导致渲染异常
def get_safe_title(name):
name = str(name)
if "ΔE" in name or "总色差" in name:
return "ΔE* (Total Color Difference)"
if "L*" in name:
return "L* (Lightness)"
if "a*" in name:
return "a* (Redness)"
if "b*" in name:
return "b* (Yellowness)"
if "C*" in name:
return "C* (Chroma)"
if "h" in name and ("°" in name or "色调" in name):
return "h° (Hue angle)"
return name
# ================= 6. 开始绘图 =================
indicators = df["指标"].tolist()
groups = df.columns[1:].tolist()
fig, axes = plt.subplots(2, 3, figsize=(16, 10))
axes = axes.flatten()
palette = sns.color_palette("muted", len(groups))
x = np.arange(len(groups))
width = 0.6
for i, indicator in enumerate(indicators):
ax = axes[i]
means = []
stds = []
letters = []
row = df[df["指标"] == indicator]
for group in groups:
m, s, l = parse_value(row[group].values[0])
means.append(m)
stds.append(s)
letters.append(l)
# 柱状图 + 误差棒
ax.bar(
x,
means,
width,
yerr=stds,
color=palette,
capsize=6,
edgecolor="black",
linewidth=1.2,
error_kw={"linewidth": 1.2},
)
# 动态设置 Y 轴上限,避免显著性字母被截断
y_max = max([m + s for m, s in zip(means, stds)])
ax.set_ylim(0, y_max * 1.20)
# 添加显著性字母
for j in range(len(groups)):
ax.text(
x[j],
means[j] + stds[j] + y_max * 0.03,
letters[j],
ha="center",
va="bottom",
fontsize=14,
fontweight="bold",
color="black",
)
# 坐标轴和标题
ax.set_xticks(x)
ax.set_xticklabels(groups, fontsize=12, fontweight="bold")
ax.set_title(get_safe_title(indicator), fontsize=14, fontweight="bold", pad=10)
ax.set_ylabel("Value", fontsize=12)
# 去掉上边框和右边框,使图表更符合科研论文风格
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.spines["left"].set_linewidth(1.2)
ax.spines["bottom"].set_linewidth(1.2)
plt.tight_layout()
# 保存图片
plt.savefig("Color_Properties_Chart.png", dpi=300, bbox_inches="tight")
plt.savefig("Color_Properties_Chart.pdf", bbox_inches="tight")
print("图表已生成:Color_Properties_Chart.png 和 Color_Properties_Chart.pdf")
plt.show()在组会汇报上使用过很多次,没什么问题出现。而且偷偷告诉你,我的表真的真的几秒钟,就能自动完整生成。
再比如我的实验会用到「响应面」,Design-Expert 这个 Windows 专业软件,貌似绕不过去,但是其实也有解决方法,让我不需要用到 Windows 电脑,也可以在 Mac 上达成目的。
pydoe + pandas + statsmodels + scipy + matplotlib 这几个 Python 第三方库,就能够达成「响应面专业软件」实现的功能。并且更轻量、更快速。
如果你的实验与「正交试验」设计相关,那么 pydoe + oapackage + statsmodels + pandas + matplotlib 这些库搭配起来,也可以达成目的。
| 步骤 | 推荐工具 | 说明 |
|---|---|---|
| 生成正交表/RSM设计 | pydoe + oapackage | 覆盖绝大多数正交与响应面设计 |
| 数据整理 | numpy + pandas | 必用 |
| 极差 + 方差分析 | pandas + statsmodels | 完全可替代专业软件 |
| 二次响应面拟合 | statsmodels 或 sklearn | 得到回归方程 |
| 优化与驻点求解 | scipy.optimize | 求最优条件 |
| 可视化 | matplotlib + seaborn | 极差图、等高线、3D响应面 |
| 交互式报告 | Jupyter Notebook | 强烈推荐使用 |
那么这些库和编程语言的「使用」,是不是会耗费我们大量的时间成本去学士、去钻研编程呢?
答案是:不用!
AI 的时代红利
很多人都在讨论,AI 时代「毁掉了我们什么」。但我今天,可能要聊聊可能很长一段时间大家都忽略了的话题——AI 真正可以解放我们什么?
不说远的,我就只谈谈与我身份相关的、与所有工科生相关的话题——AI 能帮助我们做什么?
一个意识
请大家一定要有一个意识:我们所使用的所有「工程、工科软件」,都是使用「计算机编程语言」编写出来的,所以再精确、好用的软件,说到底这个软件的「内核」,是编程语言。
这个没问题吧!
然后,如果我们跳过「软件」,直接使用某一门语言,比如 Python、R 语言,这些天然就适合「数据、图表处理」相关的编程语言,来处理我们的实验数据、绘制图表,本就是很合理且很高效的一种手段,它不存在「不准确、会出错、不可靠」的说法。
相反,它很可靠、很快速,可能只是操作没有「软件操作」那么直观。
一个红利
在 AI 工具遍地开花的今天,你使用任何一个 AI 工具(免费额度都可以),向它们提出要求,它们都能把我们自己可能「串联不起来的需求、功能」,完成的非常好。
这就是我觉得我们处于 AI 时代最大的红利:不需要完整的了解、熟悉一个新领域,就能够用上它来干活。
比如说,我刚测完了几个样品平行数据,我把它录入进了 Excel,但是下一步要怎么分析、要用到什么软件等等,我都不知道,因为我的电脑好像既没有专业的数据分析软件,我也不会使用上面提到的那些变成语言。
那我是不是就卡在这了?No!
我们只需要知道我们会用到 Python、R 语言,然后向 AI 工具提要求,让它们告诉我们应该怎样操作,让它们为我们编写好对应的脚本,后面我们按照它的要求,在命令行工具或者 VsCode 里跑起来,可能所有的目标,都实现了,而且很快、很高效。
然后等到下一次,遇到同样的要求,我们只需要更改数据,使用同样的脚本,依旧可以跑出来满意的结果。
这,难道不是一种 AI 时代的「降本增效」嘛!
所以说,MacBook、MacOS 这套搭配,在今天,已经不存在「适不适用」于某个特殊的专业了,可能确实有一些专业不匹配,但我相信这个范围也已经无限缩小,缩小到极大的概率不会是你。
学会向 AI 提问解决方案,用 AI 串联起我们没有基础的领域,给我们创造出 1 个能跑起来的工作流,真的能解决很多「左右我们决定」的选择性难题。