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是它支持 keylists 和 keypaths 。这使得访问和操作复杂字典中的值变得容易,而无需手动挖掘嵌套级别。例如:
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 是一个库,可以更轻松地使用 Spark、 Dask和 Ray等分布式计算框架。它为分布式计算提供了一个 统一的接口 ,使你可以在 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 2、 Imagen和 Stable 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 等软件的人(几乎每个人?)都能快速开始贡献代码。
如果你发现我的任何文章对你有帮助或者有用,麻烦点赞、转发或者赞赏。 谢谢!
传奇归来!!!2022年TOP10传奇手游大家好,我是你们的渊潭,今天给大家带来大侠传奇这款传奇手游,有什么不对的地方,还请批评指正。今天给家人说说攻速龙装。在我们大侠传奇攻速版中,除了我们最基本的装备外,还有着特殊的龙装
封神之作红月传奇封神传奇之红月战神这是一款以中国传统神话故事为主题背景的传奇类手游,完美的延续美杜莎传奇的游戏机制并在此基础上又增添了很多的新颖玩法让其尤为火热,在7月2日开服当天原规划只开一个区
德国西班牙会师欧锦赛半决赛,施罗德能否带领球队复制传奇?记者冯子涵目前,男篮欧锦赛14决赛赛程已经过半,德国男篮和西班牙男篮分别战胜了希腊和芬兰,成功会师半决赛。接下来,他们将争夺一张决赛的入场券。不仅是足球赛场,在篮球领域,德国和西班
吃鸡着魔是啥表现?玩家在现实找到弹射炮波波车自救器大家好,欢迎来到由小鱼干开讲的吃鸡新鲜事速报,其实吃鸡在一众游戏中,在设计之初已经算是相对贴近现实的了,但如今无论是手游还是端游都越来越魔幻。如今的手游都已经拓展到太空去了,所以各
COD19电脑端玩家怎样参加抢先测试?具体图文步骤来了COD19是一款第一人称多人在线射击动作游戏大作,跟往前使命召唤系列的其他作品属于同一游戏系列作品,不过新作将会加入新的玩法和机制以及画面上的提升,质量上的飞跃。为了能让大家提前游
5000多预算不一定要选苹果,这4款国产手机或有一战之力如果在几年前,5000预算买手机,我一定给你推荐苹果,但现在却不一定了,除了苹果手机,国产手机一样给力,这4款国产我个人觉得不输最新的iPhone14。第一款小米12SUltra5
缺了大杀器,武汉三镇队何以移泰山极目新闻记者徐平9月14日晚,2022赛季中超联赛第18轮的一场巅峰对决将在济南奥体中心体育场进行,武汉三镇队将对阵山东泰山队。作为锋线上的大杀器,目前在中超射手榜排名第一的马尔康
手指疼痛?可能是这三种疾病在发信号很多人问小王医生为什么我的手指会突然没有原因的就疼起来了呢?在这里小王医生告诉大家手指疼痛不会是突然出现的,更不会是没有原因的就疼痛起来了。那么是因为什么原因手指疼痛起来了呢?早上
健康无小事,手指疼痛不容忽视来源人民网湖南频道长沙夏天湿热,天气变幻莫测,时而艳阳时而雨。天气的变化极易导致风湿疼痛,不少市民就出现了手指疼痛的症状。手指疼痛是一种比较常见的症状,是指手指的指骨部位或者手指关
读一个人的好天气,道尽年轻一代的孤独和彷徨我们不知从何时起,因某些事变得沉默,有的因为贫穷,有的因为样貌,有的因为工作,有的因为爱情渐渐地,我们成为我们行走世间的常态。孤独地活着,孤独的做任何事,孤独的面对人生的委屈和痛苦
乳腺结节患者到底能不能吃鸡肉?这3种食物要少吃很多人认为鸡在喂养的过程中,会吃一些含有激素的食品,如果人体服用之后,会对人体的激素分泌有一定的影响,但是根据我国某著名的乳腺专家研究表示乳腺结节的患者是可以吃鸡肉的,不必担心鸡肉