LineaPy可以解决哪些问题?
用例1:清理杂乱的笔记本
在Jupyter笔记本中日复一日地工作时,很容易写出杂乱的代码 — 你可能会不按顺序执行单元格,重复执行同一个单元格,编辑或删除单元格,直到获得满意的结果,特别是在生成表格、模型和图表时。然而,这种高度动态和交互式的笔记本使用可能会引入一些问题。我们的同事可能无法通过重新运行我们的笔记本来重现我们的结果,更糟糕的是,我们自己可能会忘记产生之前结果所需的步骤。
避免这个问题的一种方法是在开发过程中不断重新执行整个笔记本,保持笔记本的顺序性。然而,这种方法会打断我们自然的工作流程和思路,降低我们的生产力。因此,更常见的做法是在开发后清理笔记本。这是一个耗时的过程,而且不能免于由删除的单元格和不按顺序执行单元格造成的可重现性问题。
要了解LineaPy如何帮助处理杂乱的笔记本,请查看此处的演示或。
用例2:回顾之前的工作
数据科学通常是一项团队努力,一个人的工作依赖于其他人的结果。例如,构建模型的数据科学家可能会使用其他同事设计的特征。在使用其他人生成的结果时,我们可能会遇到数据质量问题,包括缺失值、可疑数字和难以理解的变量名。当我们遇到这些问题时,我们可能需要检查这些结果是如何产生的。通常,这意味着要追溯用于生成相关结果的代码。在实践中,这可能是一项具有挑战性的任务,因为我们可能不知道是谁产生了这个结果。即使我们知道该问询谁,那个人可能也不记得确切版本的代码存储在哪里,更糟糕的是,可能在没有版本控制的情况下覆盖了代码。此外,该人可能已经离开了组织,没有移交相关知识。在这些情况下,识别任何问题的根源变得极其困难,使得结果不可靠甚至无法使用。
要了解LineaPy如何在这里提供帮助,请查看此处的演示或。
用例3:构建管道
随着我们的笔记本变得更加成熟,我们可能会像使用管道一样使用它们。例如,我们的笔记本可能会处理最新的数据以更新仪表板,或者预处理数据并将其转储到文件系统中以供下游模型开发使用。为了保持结果的最新状态,我们可能需要定期重新执行这些过程。手动运行笔记本是一个容易出错的脆弱过程,因此我们可能希望为生产环境设置适当的管道。如果没有相关的工程支持,我们需要清理和重构我们的笔记本代码,以便在编排系统或作业调度器中使用,如cron、Apache Airflow、Argo、Kubeflow、DVC或Ray。当然,这假设我们已经知道这些工具是如何工作的以及如何使用它们 — 如果不知道,我们需要先花时间学习它们!所有这些操作工作都非常耗时,会分散我们作为数据科学家的核心职责。
要了解LineaPy如何在这里提供帮助,请查看此处的演示或。
入门
LineaPy是一个用于捕获、分析和自动化数据科学工作流程的Python包。 从高层次来看,LineaPy跟踪代码执行的顺序,以全面理解代码及其上下文。 这种理解使LineaPy能够提供一套工具,帮助数据科学家更快、更轻松地将工作投入生产,仅需两行代码。
查看本节了解LineaPy可以帮助解决的问题类型。
先决条件
LineaPy运行在Python>=3.7,<3.11
和IPython>=7.0.0
上。它不附带Jupyter安装,
因此您需要安装一个用于交互式计算。
安装
要安装LineaPy,运行:
pip install lineapy
如果您想直接从源代码运行最新版本的LineaPy,请按照这里的说明进行操作。
LineaPy提供了几个扩展来扩展其核心功能,例如对PostgreSQL或Amazon S3的支持。 在这里了解更多关于这些和其他安装选项的信息。
接口
Jupyter和IPython
要在交互式计算环境(如Jupyter Notebook/Lab或IPython)中使用LineaPy,请在会话开始时执行以下命令来加载其扩展:
%load_ext lineapy
请注意:
-
您必须将此命令作为给定会话中的第一个命令运行。在会话中途执行它 将导致LineaPy的错误行为。
-
此命令仅为当前会话加载扩展。它不会延续到不同的会话,因此您需要为每个新会话重复执行它。
或者,您可以使用lineapy
命令启动环境,如下所示:
lineapy jupyter notebook
lineapy jupyter lab
lineapy ipython
这将在相应的交互式shell应用程序中自动加载LineaPy扩展, 您无需为每个新会话手动加载它。
注意: 如果您的Jupyter环境有多个内核,请选择lineapy
默认使用的Python 3 (ipykernel)
。
命令行界面
您也可以将LineaPy作为CLI命令或可运行的Python模块使用。要查看可用选项,请运行以下命令:
# 将LineaPy作为CLI命令
lineapy python --help
或
# 将LineaPy作为可运行的Python模块
python -m lineapy --help
快速入门
一旦安装并加载了LineaPy,您就可以开始使用该软件包了。让我们看一个使用鸢尾花数据集的简单示例,来演示如何使用LineaPy:1) 存储变量的历史,2) 获取其清理后的代码,以及3) 为该变量构建可执行的管道。
以下开发代码将线性回归模型拟合到鸢尾花数据集:
import lineapy
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 加载数据
url = "https://raw.githubusercontent.com/LineaLabs/lineapy/main/examples/tutorials/data/iris.csv"
df = pd.read_csv(url)
# 将每个物种映射到一种颜色
color_map = {"Setosa": "green", "Versicolor": "blue", "Virginica": "red"}
df["variety_color"] = df["variety"].map(color_map)
# 按物种绘制花瓣宽度与萼片宽度的散点图
df.plot.scatter("petal.width", "sepal.width", c="variety_color")
plt.show()
# 创建编码物种的虚拟变量
df["d_versicolor"] = df["variety"].apply(lambda x: 1 if x == "Versicolor" else 0)
df["d_virginica"] = df["variety"].apply(lambda x: 1 if x == "Virginica" else 0)
# 初始化模型
mod = LinearRegression()
# 拟合模型
mod.fit(
X=df[["petal.width", "d_versicolor", "d_virginica"]],
y=df["sepal.width"],
)
假设您对上面的代码感到满意,并决定保存训练好的模型。您可以使用以下代码将模型存储为LineaPy工件:
# 将模型保存为工件
lineapy.save(mod, "iris_model")
LineaPy工件同时封装了值和代码,因此您可以轻松检索模型的代码,如下所示:
# 检索模型工件
artifact = lineapy.get("iris_model")
# 查看模型工件的代码
print(artifact.get_code())
打印语句将输出:
import pandas as pd
from sklearn.linear_model import LinearRegression
url = "https://raw.githubusercontent.com/LineaLabs/lineapy/main/examples/tutorials/data/iris.csv"
df = pd.read_csv(url)
color_map = {"Setosa": "green", "Versicolor": "blue", "Virginica": "red"}
df["variety_color"] = df["variety"].map(color_map)
df["d_versicolor"] = df["variety"].apply(lambda x: 1 if x == "Versicolor" else 0)
df["d_virginica"] = df["variety"].apply(lambda x: 1 if x == "Virginica" else 0)
mod = LinearRegression()
mod.fit(
X=df[["petal.width", "d_versicolor", "d_virginica"]],
y=df["sepal.width"],
)
请注意,这些是生成模型所需的最小必要步骤。也就是说,LineaPy已自动清理了原始代码,删除了不影响模型的多余操作(例如绘图)。
假设您被要求定期重新训练模型以考虑源数据的任何更新。您需要设置一个管道来训练模型 — LineaPy使这一过程变得简单,只需一个函数调用:
lineapy.to_pipeline(
artifacts=["iris_model"],
input_parameters=["url"], # 指定要参数化的变量
pipeline_name="iris_model_pipeline",
output_dir="output/",
framework="AIRFLOW",
)
该命令生成了几个可用于从UI或CLI执行管道的文件。(有关更多详细信息,请查看此教程。)
简而言之,LineaPy自动化了数据科学工作流程中耗时的手动步骤,帮助我们更快、更轻松地将工作投入生产。
使用报告
LineaPy收集匿名使用数据,以帮助我们的团队改进产品。只报告LineaPy的API调用和CLI命令。我们尽可能去除潜在的敏感信息,绝不会收集用户代码、数据、变量名或堆栈跟踪。
您可以通过设置环境变量来选择退出使用跟踪:
export LINEAPY_DO_NOT_TRACK=true
接下来做什么?
要了解有关LineaPy的更多信息,请查看项目文档,其中包含许多可供参考的示例。一些关键资源包括: