Python Polars:为大规模数据分析释放速度和效率

简介: Python Polars:为大规模数据分析释放速度和效率

Polars 是一个 Python 库,以闪电般的速度处理海量数据集,在性能和内存管理方面超越了 pandas。

在数据科学领域,Python 因其多功能性和丰富的库生态系统而占据主导地位。从使用 pandas 进行数据操作到使用 NumPy 进行数值计算,Python 使我们能够应对各种分析挑战。但随着数据集的规模和复杂性不断膨胀,对高性能解决方案的需求也在增加。这就是  Polars 挺身而出的地方。

Polars 是一个革命性的开源 Python 库,专为闪电般的数据操作和分析而设计。Polars 以性能为核心,为熊猫等传统图书馆提供了一个引人注目的替代方案,尤其是在处理突破内存边界的海量数据集时。

为什么选择 Polars?

以下是 Polars 脱颖而出的原因:

炽热的速度:Polars 用 Rust 编写,利用多线程查询引擎实现高效的并行处理。与基于 Python 的库相比,这意味着显着的性能提升。

大数据友好:Polars 可无缝处理超出可用 RAM 的数据集。其惰性评估方法构建了操作的计算图,在执行之前优化查询,并实现对内存不足数据的高效处理。

直观的 API:Polars 拥有熟悉的 DataFrame 界面,让 pandas 用户轻松过渡。其富有表现力的语法允许清晰简洁的数据操作,提高代码的可读性。

无缝集成:Polars 与 NumPy 和 PyArrow 等流行的 Python 数据科学库顺利集成。这促进了有凝聚力的工作流程,并扩大了您可以使用的工具范围。

与熊猫相比的优势和相似之处

虽然 Polars 和 pandas 都擅长数据处理,但它们迎合了不同的需求。以下是它们的优点和相似之处的细分:

Polars 的优势

卓越的速度:对于海量数据集,Polars 的延迟评估和列式处理可显著提高性能。

大数据友好:Polars 可高效处理内存不足数据,是大 数据分析的理想选择。

熊猫的优势

成熟的生态系统:Pandas 拥有庞大的库和扩展生态系统,提供更广泛的功能。

社区和资源:Pandas 拥有更大的用户群和更广泛的文档和教程。

相似 之 处

直观的 API:两者都提供了 DataFrame 接口,使熟悉 pandas 的人易于学习和使用。

数据探索和操作:两者都提供了用于数据检查、筛选、选择、转换和聚合的工具。

与其他库集成:两者都与 NumPy 和 Matplotlib 等流行的数据科学库很好地集成。

揭开极地的力量

让我们深入探讨使 Polars 成为游戏规则改变者的一些关键功能:

懒惰评估:Polars 的延迟 API 可让您定义一系列操作,而无需立即执行。这支持对海量数据集进行高效的查询优化、前期架构验证和内存感知处理。

柱状加工:与 pandas 的面向行的方法不同,Polars 独立处理数据列。这种矢量化处理利用现代 CPU 架构来实现卓越的性能和缓存利用率。

精确筛选和选择:Polars 使用布尔表达式提供强大的过滤和选择机制。这样可以有针对性地进行数据检索和操作,从而提高分析效率。

聚合变得简单:Polars 提供了一组丰富的聚合函数来汇总数据。从基本计算到更复杂的操作,Polars 简化了数据探索和特征工程。meansum

Polars 入门

拥抱极地是一件轻而易举的事。下面是一个快速指南:

安装:用于安装库。pip install polars

数据加载:Polars 支持从 CSV、Parquet 和 Arrow 文件等各种来源加载数据。

数据探索:Polars 提供数据检查方法,包括头部/尾部视图和基本统计摘要。

数据操作:熟悉的 DataFrame 语法支持筛选、选择、转换和聚合任务。

除了基础知识:Polars 拥有自定义功能、窗口操作以及与其他数据科学工具的集成等高级功能。

何时考虑极性

极坐标在处理大型数据集或性能至关重要的场景时大放异彩。以下是一些理想的用例:

财务数据分析:处理海量财务数据集,用于风险评估、投资组合优化和市场趋势分析。

科学计算:处理用于模拟、建模和复杂计算的大规模科学数据。

大数据分析:高效探索和分析来自各种来源的海量数据集。

使用极地的潜在限制或权衡

虽然 Polars 具有显着的优势,但在深入研究之前必须考虑一些潜在的限制:

不断发展的生态系统:与 pandas 成熟的库和扩展生态系统相比,Polars 是一个相对较新的项目。这意味着第三方库池较小,可用资源可能更少。

学习曲线:虽然 DataFrame 界面让 pandas 用户熟悉 Polars,但某些功能可能需要额外的学习,尤其是对于那些习惯了广泛的 pandas 库的用户。

有限的社区:作为一颗冉冉升起的新星,与熊猫相比,Polars 的社区规模较小。这可能会导致联机资源和故障排除支持减少。

尽管存在这些潜在的缺点,但 Polars 正在积极开发中,其功能也在不断扩展。速度、效率和大数据处理的优势使其成为处理不断增长的数据集的数据科学家的有力选择。仔细评估您的项目要求并权衡利弊,以确定 Polars 是否适合您。

Polars 的实际应用:代码示例以及使用 Polars 的解释

以下是一些代码示例,展示了如何使用 Polars 完成常见的数据操作任务:

1. 从 CSV 加载数据

import polars as pl  
# Load data from a CSV file
df = pl.read_csv("cars.csv")  # Replace "cars.csv" with your actual file path


进口:为了方便起见,我们首先导入库。polarspl

数据加载:该函数从路径指定的 CSV 文件中读取数据。请记住替换为 CSV 文件的实际位置。这将创建一个名为 Polars DataFrame 的对象,用于保存加载的数据。pl.read_csv"cars.csv"df

2. 数据探索

# Get basic information about the DataFrame
print(df.shape)  # Print number of rows and columns
print(df.dtypes)  # Print data types of each column
# View the first few rows
print(df.head())  
# Get descriptive statistics for numerical columns
print(df.describe())


数据形状:我们用来获取一个元组,其中包含 DataFrame 中的行数和列数。df.shape

数据类型:该方法显示 DataFrame 中每列的数据类型(例如,整数、字符串)。df.dtypes

头部视图:调用检索并显示 DataFrame 的前几行,从而提供对数据的一瞥。df.head()

描述统计学:该函数计算 DataFrame 中数值列的汇总统计量(平均值、标准差等)。df.describe()

3. 过滤数据

# Filter cars with horsepower greater than 200
filtered_df = df[df["Horsepower"] > 200]  
# Filter cars manufactured before 2010
filtered_df = df[(df["Year"] < 2010)]


布尔索引:在这里,我们使用布尔索引来根据特定条件筛选行。该表达式创建一个布尔序列,指示马力超过 200 的行的 True。然后,此系列用于筛选 DataFrame,从而生成仅包含这些行的新 DataFrame()。同样,我们使用操作员过滤 2010 年之前制造的汽车。df["Horsepower"] > 200filtered_df<

4. 选择列

# Select specific columns
selected_df = df[["Model", "Cylinders", "Price"]]


列选择:方括号用于按名称选择特定列。在此示例中,我们创建一个新的 DataFrame(),仅包含原始 DataFrame() 中的“Model”、“Cylinders”和“Price”列。[]selected_dfdf

5. 对数据进行排序

# Sort by horsepower in descending order
sorted_df = df.sort("Horsepower", ascending=False)  
# Sort by multiple columns (Year first, then Horsepower)
sorted_df = df.sort(["Year", "Horsepower"], ascending=[True, False])


排序:该方法根据一列或多列对 DataFrame 进行排序。我们将列名指定为字符串,并选择性地提供一个参数(默认值:True)来控制排序顺序(升序或降序)。在第一个示例中,我们按“马力”降序排序。第二个示例演示了按多列排序 - 首先按“Year”(升序),然后按“Horsepower”(降序)。df.sortascending

6. 分组和聚合

# Group by manufacturer and calculate average price
avg_price_by_manufacturer = df.groupby("Manufacturer")["Price"].mean() print(avg_price_by_manufacturer)  
# Group by year and count the number of cars in each model
model_count_by_year = df.groupby("Year")["Model"].nunique() print(model_count_by_year)


分组和聚合:Polars 擅长对数据进行分组和执行聚合。该方法将列名称作为输入,根据该列中的值将 DataFrame 拆分为多个组。在这里,我们按“制造商”分组,并使用该函数计算每个制造商的平均价格。同样,我们按“年份”分组,并计算每个年份组中唯一模型 () 的数量。结果存储在单独的 Series 对象中。groupbymeannunique

这些示例展示了 Polars 用于数据操作和分析的核心功能。Polars 专注于速度和效率,是有效处理大型数据集的强大工具

总之

Polars 是 Python  数据科学生态系统中的一颗冉冉升起的新星。它专注于速度、效率和大数据友好性,使其成为处理不断增长的数据集的数据分析师和科学家的有力选择。无论您是经验丰富的熊猫用户,还是热衷于高性能数据分析,Polars 都值得探索。因此,潜入其中,释放 Polars 的力量,并在一个全新的水平上体验数据分析!


目录
相关文章
|
23天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
15天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2572 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
159 2
|
19天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1570 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
21天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
942 14
|
3天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
185 2
|
16天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
711 12