跳转至

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 添加:

Python
import time

time.sleep(1 * 60 * 60)

这将使第二个 Notebook 运行 1 小时后,再运行后续的 Cell。

上述方法需要事先预估第一个 Notebook 运行需要的时间,预估时间过短会导致第二个 Notebook 提前运行,预估时间过长又会导致第二个 Notebook 浪费很多时间在 time.sleep() 上。

本文介绍了如何使用 papermill 运行 Jupyter Notebook,实现控制先后运行两个 Notebook 的功能。

screen-capture

pypika 中自定义 SQL 函数

pypika 是一个在 Python 中构建 SQL 语句的工具。这篇文章提供了一个很棒的入门教程,介绍了许多 pypika 的基本用法。

本文以 ClickHouse 中的 quantileExact 函数为例,介绍如何在 pypika 中自定义函数,尤其是自定义字符串拼接方式的实现方法。

image-20240711001853859

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)"

image-20240325190005418

本文记录了一个解决方案,可以在 n_jobs 超过 1 的多线程环境下调试 Python 代码。

使用 blacken-docs 对文档中的 Python 代码进行格式化

ruff 等代码格式化工具可以美化 Python 代码,但是不方便美化文档文本中的 Python 代码。如果想要格式化 markdown、字符串文档等中间的 Python 代码,经常需要手动地去统一格式。

本文介绍了 blacken-docs 这款工具,它可以轻松实现对文档中的 Python 代码进行格式化。