2022 年不可错过的10个顶级Python 库

1.Ruff——一个快速的 linter

有没有人在 2022 年没有使用 linter?

多年来,社区已经认识到 linters 是软件开发过程的重要组成部分。他们分析源代码中潜在的错误和样式问题,提供有价值的反馈和改进建议。最终,它们帮助开发人员编写更干净、更高效的代码。为了充分利用这个过程,拥有快速有效的 linter 非常重要。

Ruff 是一个用 Rust 编写的非常快的 Python linter。它比现有的 linters快 10-100 倍,并且可以通过 pip 安装。

从头开始检查 CPython 代码库。

除了 linting 之外,Ruff 还可以作为高级代码转换工具,能够升级类型注释、重写类定义、排序导入等等。

它是一个强大的工具,旨在取代各种其他工具,包括 Flake8、isort、pydocstyle、yesqa、eradicate,甚至是 pyupgrade 和 autoflake 的子集,同时以闪电般的速度执行。

绝对是 2023 年加入你的武器库的一大亮点!

2. python-benedict

字典是 Python 中重要的数据结构,但使用复杂的字典可能是一个挑战。内置dict类型功能强大,但它缺少许多使访问和操作嵌套值或将字典与不同数据格式相互转换的功能。如果你发现自己在 Python 中使用字典时遇到困难,那么 python-benedict 可能是你一直在寻找的解决方案。

benedict是内置dict类型的子类,这意味着它与现有词典完全兼容,并且在大多数情况下可以用作直接替代品。

的关键特性之一benedict是它支持keylistskeypaths。这使得访问和操作复杂字典中的值变得容易,而无需手动挖掘嵌套级别。例如:


d = benedict()
 
# set values by keypath
d['profile.firstname'] = 'Fabio'
d['profile.lastname'] = 'Caccamo'
print(d) # -> { 'profile':{ 'firstname':'Fabio', 'lastname':'Caccamo' } }
print(d['profile']) # -> { 'firstname':'Fabio', 'lastname':'Caccamo' }
 
# check if keypath exists in dict
print('profile.lastname' in d) # -> True
 
# delete value by keypath
del d['profile.lastname']


除了它的键列表和键路径支持之外,benedict还提供了广泛的 I/O 快捷方式来处理各种数据格式。你可以轻松地从 JSON、YAML 和 INI 等格式以及 CSV、TOML 和 XML 等更专业的格式读取和写入字典。它还支持多个 I/O 操作后端,例如filepath(读/写)、url(只读)和云端存储(读/写)。

3.Memray— 内存分析器

优化系统的内存使用对于提高其性能和稳定性至关重要。内存泄漏会导致程序消耗越来越多的内存,降低整体系统性能并最终崩溃。虽然垃圾收集器通常易于使用,但 Python 并没有使你免受这些问题的影响。没有什么可以阻止循环引用或无法访问的对象(有关更多信息,请阅读垃圾收集的工作原理);如果我们谈论 C/C++ 扩展,则更是如此。

内存分析器可以帮助你识别和修复这些问题,使其成为优化程序内存使用的重要工具。这就是 Memray 派上用场的地方!

它是一个内存分析器,跟踪 Python 代码、本机扩展模块和 Python 解释器本身的内存分配,提供内存使用情况的综合视图。Memray 生成各种报告,包括火焰图,以帮助你分析收集的数据并识别泄漏热点等问题。它速度快,可与 Python 和本机线程一起使用,使其成为调试多线程程序中内存问题的多功能工具。

Memray 可以用作命令行工具或用作更细粒度分析任务的库。它的实时模式允许你在脚本或模块运行时以交互方式检查内存使用情况,这对于调试复杂的内存模式非常有用。

Bloomberg 为认真的 Python 程序员准备的必备工具。

4.Codon— 使用 LLVM 的 Python 编译器

我们都喜欢 Python,因为它简单易用,但有时我们需要一点额外的运行速度。即使进行了所有优化,Python 解释器(如 CPython)也只能走这么远。当需要进一步提高性能时,编译器就会出现。它们将我们的 Python 代码转换为处理器可以直接执行的机器代码,跳过解释器步骤,并给我们带来一些显着的性能提升。

Codon 是一种高性能的提前 Python 编译器,甚至可以在速度方面与 C/C++ 竞争,据报道典型的加速10-100 倍或更多(在单线程上)。它可以使用@codon.jit装饰器在更大的 Python 代码库中使用,也可以使用 Python 互操作性从 Codon 中调用纯 Python 函数和库。

天下没有免费的午餐,因此你可能需要对你的 Python 代码进行一些修改,以便它可以被 Codon 编译。但是 Codon 对语言施加的限制最终会带来性能提升。然而,编译器将通过生成详细的错误消息来指导你识别和帮助你解决不兼容问题。

如果你希望加快代码速度,绝对值得一试。

5. LangChain— 构建 LLM 支持的应用程序

除非你一直生活在岩石下,否则你很清楚生成人工智能今年一直在席卷全球。其中很大一部分是大型语言模型(LLM)

我们过去几年为解决 AI 问题而编写的许多代码都可以扔掉并用 LLM 代替(例如 GPT-3 或其演变——InstructGPT 或 ChatGPT——T5,或任何其他)。此外,我们还见证了LLM 接口的一种新编程语言的诞生:基于文本的提示

LangChain 的出现是为了帮助充分利用 LLM 的全部力量。

第一:在任何认真使用 LLM 的情况下,人们通常不需要将提示视为一次性的东西,而是将这些东西的组合:模板、用户输入和 LLM 可以作为参考的输入/输出示例。LangChain 通过提供接口,可以直接根据各个组件构建不同的提示,帮助你简化这种“提示管理”。

其次,为了构建提示,有时你需要注入外部知识(甚至其他模型)。例如,假设你需要执行数据库查询以提取个性化电子邮件的客户姓名。这就是链的概念,LangChain为此提供了统一的接口。

然后是获取和扩充数据的概念,以便 LLM 可以处理你自己的数据,这与训练模型所依据的“通用”数据相反。

你可以使用 LangChain 做更多的事情,例如准备在不更改代码的情况下切换到另一个模型/提供商,构建具有内存的代理等。

当然,我们期望的创新工具将在 2023 年大幅增长!

6.fugue——轻松完成分布式计算

如果你熟悉 Pandas 或 SQL,就会知道这些工具非常适合处理中小型数据集。但是在处理更大量的数据时,往往需要像Spark这样的分布式计算框架来高效处理。问题是,Spark 与 Pandas 或 SQL 完全不同。语法和概念完全不同,将代码从一个迁移到另一个可能是一个挑战。这就是赋格曲的用武之地。

Fugue 是一个库,可以更轻松地使用SparkDaskRay等分布式计算框架。它为分布式计算提供了一个统一的接口,使你可以在 Spark、Dask 和 Ray 上执行 Python、pandas 和 SQL 代码,而只需进行最少的重写。

最好的起点是使用 Fugue 的transform()函数。它允许你通过将单个函数引入 Spark、Dask 或 Ray 来并行执行单个函数。请参阅以下示例,其中将map_letter_to_food()函数引入 Spark 执行引擎:

import pandas as pd
from typing import Dict
from pyspark.sql import SparkSession
from fugue import transform
 
input_df = pd.DataFrame({"id":[0,1,2], "value": (["A", "B", "C"])})
map_dict = {"A": "Apple", "B": "Banana", "C": "Carrot"}
 
def map_letter_to_food(df: pd.DataFrame, mapping: Dict[str, str]) -> pd.DataFrame:
    df["value"] = df["value"].map(mapping)
    return df
 
spark = SparkSession.builder.getOrCreate()
 
# use Fugue transform to switch execution to spark
df = transform(input_df,
               map_letter_to_food,
               schema="*",
               params=dict(mapping=map_dict),
               engine=spark
               )
 
print(type(df))
df.show()

 
+---+------+
| id| value|
+---+------+
|  0| Apple|
|  1|Banana|
|  2|Carrot|
+---+------+


Fugue 允许你为 Spark、Dask 和 Ray 项目维护一个代码库,其中逻辑和执行完全分离,从而使程序员不必学习每个不同的框架。

该库还有其他一些有趣的功能和不断壮大的社区,所以一定要检查一下!

7.Diffusers——生成人工智能

2022 年将永远被铭记为生成式人工智能突破人工智能社区前沿并扩展到外部世界的一年。这主要由Diffusion models提供支持,由于其在生成高质量图像方面令人印象深刻的能力而受到广泛关注。DALL·E 2ImagenStable Diffusion只是今年引起轰动的扩散模型的几个例子。他们的结果激发了讨论和钦佩,因为他们生成图像的能力突破了以前认为可能的界限——甚至是 AI 专家。

Hugging Face 的 Diffusers 库是用于处理扩散模型的工具和技术的集合,包括稳定扩散模型,该模型已被证明在生成高度逼真和详细的图像方面特别有效。该库还包括用于优化图像生成模型性能和分析图像生成实验结果的工具。

开始使用此库进行文本到图像的生成可能就像删除以下几行代码一样简单:

import torch
from diffusers import StableDiffusionPipeline
 
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipe = pipe.to("cuda")
 
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]


但漫射器并不止于图像。音频生成甚至分子生成(!) 的功能即将推出。

看起来大多数扩散模型的开源实现都将利用该库提供的构建块。

8.LineaPy— 将笔记本转换为生产流水线

Jupyter notebooks 是一种非常有用的原型设计和代码开发工具。它们使你可以轻松地将代码、绘图、媒体和交互式小部件混合在一个文档中,从而在你开发代码时轻松记录和理解你的代码。它们是试验代码和测试想法的完美游乐场,对于数据分析和机器学习任务尤其方便。但随着想法的进展,人们对结果感到满意并希望将代码投入生产,挑战开始显现。

notebook 中的代码可能并不总是以易于部署到生产环境的方式构建。你是否应该使用笔记本的代码并在别处重写、模块化并使其遵循最佳实践?这是最常见的方法,但缺点是如果以后想要改进或调试某些东西,就会失去笔记本的交互性。所以现在你必须同时维护笔记本和单独的生产代码,这远非理想。

感谢 LineaPy,有一条可以做得更好的途径。

LineaPy 是一个 Python 库,可帮助你从原型设计快速过渡到创建强大的数据管道。它可以处理你凌乱的笔记本,帮助清理和重构代码,使其更容易在编排系统或作业调度程序(如 cron、Apache Airflow 或 Prefect)中运行。

它还有助于提高可重复性:它具有“工件”的概念,它封装了数据和代码,可以帮助你追溯价值是如何产生的。在高层次上,LineaPy 跟踪代码执行的顺序以形成对代码及其上下文的全面理解。

最好的部分?集成非常简单,只需两行代码就可以在Notebook环境下运行!

请务必查看文档,它通过非常全面的示例很好地展示了该工具解决的问题。

9.whylogs——模型监控

随着 AI 模型为企业创造实际价值,必须持续监控它们在生产中的行为,以确保价值随着时间的推移而持续。也就是说,必须有一种方法可以表明模型预测是可靠准确的,并且提供给模型的输入与用于训练它的数据类型没有显着差异。

但模型监控不仅限于 AI 模型——它可以应用于任何类型的模型,包括统计和数学模型。因此这个选秀权的用处。

whylogs 是一个开源库,可让你记录和分析任何类型的数据。它提供了一系列功能,首先是生成数据集摘要的能力:whylogs profiles

配置文件捕获原始数据的统计信息,例如分布、缺失值和许多其他可配置指标。它们是使用库在本地计算的,甚至可以合并以允许对分布式和流式系统进行分析。它们形成了一种数据表示,方便地不需要公开数据本身,而只需要公开从中导出的指标——这有利于隐私。

配置文件很容易生成。例如,要从 Pandas 生成配置文件,DataFrame你可以执行以下操作:

import whylogs as why
import pandas as pd
 
#dataframe
df = pd.read_csv("path/to/file.csv")
results = why.log(df)


但是配置文件只有在你决定用它们做什么时才有用。为此,可视化是必须的。你可以安装 可以为你创建交互式报告的viz模块 。pip install "whylogs[viz]"这是 Jupyter Notebook 中的示例漂移报告:

使用 whylogs viz 模块的示例漂移报告。

你还可以设置约束,以便在数据不符合预期时收到通知,有效地对你的数据/模型进行某种测试。毕竟,这不是我们从一开始就要做的吗?

10.Mito——笔记本中的电子表格

在数据科学时代,许多人正在从在电子表格中手动分析数据转变为编写代码来执行此操作。但不可否认的是,电子表格是一种很有吸引力的工具,它提供了一个简化的编辑界面和允许快速迭代的即时反馈。

很多时候,我们使用电子表格处理数据。但是如果我们想对新数据再次做同样的事情,我们必须从头开始!代码在这方面做得更好,为我们节省了宝贵的时间。

我们能否两全其美?遇见美图。

Mito 派上用场,因为它是一个库,允许你在 Jupyter Notebooks 中以类似电子表格的界面处理数据。它允许你导入和编辑 CSV 和 XLSX 文件、生成数据透视表和图形、过滤和排序数据、合并数据集以及执行各种其他数据操作任务。

最重要的功能:Mito 将生成对应于你的每个编辑的Python 代码!

美图的工作原理。

Mito 还支持使用 Excel 样式的公式,并提供数据列的汇总统计。它旨在成为数据科学工具包中的第一个工具,这意味着它被构建为一个用户友好的数据探索和分析工具。

像 Mito 这样的工具降低了进入数据科学世界的门槛,让熟悉 Excel 或 Google Sheets 等软件的人(几乎每个人?)都能快速开始贡献代码。


如果你发现我的任何文章对你有帮助或者有用,麻烦点赞、转发或者赞赏。 谢谢!

展开阅读全文

页面更新:2024-04-01

标签:编译器   分布式   示例   字典   模型   图像   内存   代码   工具   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top