Python¶
pandas rolling exponential 滚动计算指数加权标准差会受起点影响
在使用 rolling(win_type="exponential").std() 计算标准差时,结果可能会受数据起点的影响。
本文将通过几个简单的代码示例,探究数据具有不同数据起点(通过 iloc[1:] 手动构造不同的数据起点进行模拟)对 Pandas rolling(win_type="exponential").std() 计算结果的影响,并提供了一个自定义函数实现严格控制滚动回看窗口,以获得一致的结果。
使用 papermill 运行 Jupyter Notebook
当执行两个具有前后依赖关系的 Jupyter Notebook 时,我们需要等待第一个 Notebook 运行完成,再开始运行第二个 Notebook。
一个笨拙的方法是,先预估好第一个 Notebook 运行需要的时间(例如 1 小时),然后在第二个 Notebook 的第一个 Cell 添加:
这将使第二个 Notebook 运行 1 小时后,再运行后续的 Cell。
上述方法需要事先预估第一个 Notebook 运行需要的时间,预估时间过短会导致第二个 Notebook 提前运行,预估时间过长又会导致第二个 Notebook 浪费很多时间在 time.sleep() 上。
本文介绍了如何使用 papermill 运行 Jupyter Notebook,实现控制先后运行两个 Notebook 的功能。

在 pypika 中使用 Criterion.all() 作为筛选条件占位符及其注意事项
pypika 能够通过编程方式动态生成 SQL 查询。本文介绍了 Criterion.all() 作为筛选条件占位符及其注意事项。
在 pypika 中自定义 SQL 函数
pypika 是一个在 Python 中构建 SQL 语句的工具。这篇文章提供了一个很棒的入门教程,介绍了许多 pypika 的基本用法。
本文以 ClickHouse 中的 quantileExact 函数为例,介绍如何在 pypika 中自定义函数,尤其是自定义字符串拼接方式的实现方法。

使用 np.polynomial.Polynomial 进行一元线性回归的一个注意事项
在使用 np.polynomial.Polynomial 进行一元线性回归时,未能得到预期的结果。经检查发现, Polynomial.fit() 会将数据缩放和平移到 window 参数上后,再进行回归估计。如果需要得到未缩放和平移的估计量,可以用 .convert().coef。

Python 类型检查工具 beartype
Python 代码中的类型提示并不是需要强制满足的。如果我们希望代码使用者严格遵循类型提示,在类型不符时抛出错误,可以使用 beartype 进行类型检查。
静态类型检查推荐使用 pyright
beartype 的功能是:当你真正调用函数时,才进行参数和返回值的类型检查。若我们不想真正运行代码,而只希望进行静态类型检查,可以使用 pyright。
多线程下调试 Python 代码
当启用 n_jobs 超过 1 时,直接调试 Python 代码可能会报错 "Couldn't find a debug adapter descriptor for debug type 'Python Kernel Debug Adapter' (extension might have failed to activate)"。

本文记录了一个解决方案,可以在 n_jobs 超过 1 的多线程环境下调试 Python 代码。
使用 blacken-docs 对文档中的 Python 代码进行格式化
ruff 等代码格式化工具可以美化 Python 代码,但是不方便美化文档文本中的 Python 代码。如果想要格式化 markdown、字符串文档等中间的 Python 代码,经常需要手动地去统一格式。
本文介绍了 blacken-docs 这款工具,它可以轻松实现对文档中的 Python 代码进行格式化。