性能碾压pandas、polars的数据分析神器来了

简介: 性能碾压pandas、polars的数据分析神器来了

1 简介

大家好我是费老师,就在几天前,经过六年多的持续开发迭代,著名的开源高性能分析型数据库DuckDB发布了其1.0.0正式版本。

4c1439c6e2cca0d27ece1d8f13a82518.png

DuckDB具有极强的单机数据分析性能表现,功能丰富,具有诸多拓展插件,且除了默认的SQL查询方式外,还非常友好地支持在PythonRJavaNode.js等语言环境下使用,特别是在Python中使用非常的灵活方便,今天的文章,费老师我就将带大家一起快速了解DuckDBPython中的常见使用姿势😎~

2 DuckDB在Python中的使用

DuckDB的定位是嵌入式关系型数据库,在Python中安装起来非常的方便,以当下最主流的开源Python环境管理工具mamba为例,直接在终端中执行下列命令,我们就一步到位的完成了对应演示虚拟环境的创建,并在环境中完成了python-duckdbjupyterlabpandaspolars等相关分析工具的安装:

mamba create -n duckdb-demo python=3.9 -y && mamba activate duckdb-demo && mamba install python-duckdb jupyterlab pandas polars pyarrow -y

2.1 数据集的导入

2.1.1 直接导入文件

作为一款数据分析工具,能够方便灵活的导入各种格式的数据非常重要,DuckDB默认可直接导入csvparquetjson等常见格式的文件,我们首先使用下列代码生成具有五百万行记录的简单示例数据,并分别导出为csvparquet格式进行比较:

# 利用pandas生成示例数据文件
import numpy as np
import pandas as pd
generated_df = pd.DataFrame(
    {
        '类别': np.random.choice(list('ABCDEF'), 5000000),
        '数值': np.round(np.random.uniform(0, 1000000, 5000000), 3)
    }
)
# 分别导出为csv、parquet格式
generated_df.to_csv('./demo_data.csv', index=False)
generated_df.to_parquet('./demo_data.parquet')

针对两种格式的文件,分别比较默认情况下DuckDBpandaspolars的读取速度:

  • csv格式

fa251dde74e8ee08adb1ce97391a3852.png

  • parquet格式

f94b95879f006ce0eb9957705fb23a81.png

可以看到,无论是对比pandas还是polarsDuckDB的文件读取性能都是大幅领先甚至碾压级的⚡。

除此之外,DuckDB也可以通过SQL语句的方式进行等价操作:

5f2a59b16c30827e1278206e28f67d46.png

2.1.2 读取其他框架的数据对象

除了默认可直接读取少数几种常见数据格式外,DuckDBPython中还支持直接以执行SQL语句的方式,直接读取pandaspolars等框架中的数据框,这一点可太强大了,意味着只要是pandaspolars等框架可以读取的格式,DuckDB都可以直接“拿来吧你”🤣:

33ac3f61dce64ec2994c49c6f0b48ad9.png

2.2 执行分析运算

DuckDB作为一款关系型数据库,其执行分析运算最直接的方式就是写SQL,针对DuckDB默认读取到内存中的对象(DuckDB中称作「关系」):

41319e58bc654da24a2c30073846869d.png

我们可以通过duckdb.sql()直接将关系当作表名,书写SQL语句进行查询分析,下面是一些简单的例子:

416e88d36c7335441bee2233f2279c31.png

比较一下与pandaspolars之间执行相同任务的耗时差异,DuckDB依旧是碾压级的存在👍:

70c0252a7d964f21038a4eb736e95337.png

2.3 计算结果转换

DuckDB默认自带的文件写出接口比较少,依旧是只针对csvparquet等主流格式具有相应的write_parquet()write_csv()可以直接导出文件,但是针对PythonDuckDB提供了多样化的数据转换接口,可以快捷高效地将计算结果转换为Python对象、pandas数据框、polars数据框、numpy数组等常用格式:

94196bf899700472029ac2c0ffba06bd.png

基于此,就不用担心通过DuckDB计算的数据结果不好导出为其他各种格式文件了~

如果你恰好需要转出为csvparquet等格式,那么直接使用DuckDB的文件写出接口,性能依旧是非常强大的:

  • csv格式

94d7902cc479f180140e9147618e25c8.png

  • parquet格式

50ba84359a7b6c489a32c5b3e6a8a6f1.png

目录
相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
138 71
|
2月前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
154 73
|
5月前
|
Rust 数据挖掘 数据处理
Polars库:数据分析的新星,性能与易用性的完美结合
Polars库:数据分析的新星,性能与易用性的完美结合
213 1
|
1月前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
82 22
|
1月前
|
Cloud Native 关系型数据库 MySQL
无缝集成 MySQL,解锁秒级数据分析性能极限
在数据驱动决策的时代,一款性能卓越的数据分析引擎不仅能提供高效的数据支撑,同时也解决了传统 OLTP 在数据分析时面临的查询性能瓶颈、数据不一致等挑战。本文将介绍通过 AnalyticDB MySQL + DTS 来解决 MySQL 的数据分析性能问题。
|
3月前
|
数据挖掘 关系型数据库 Serverless
利用数据分析工具评估特定业务场景下扩缩容操作对性能的影响
通过以上数据分析工具的运用,可以深入挖掘数据背后的信息,准确评估特定业务场景下扩缩容操作对 PolarDB Serverless 性能的影响。同时,这些分析结果还可以为后续的优化和决策提供有力的支持,确保业务系统在不断变化的环境中保持良好的性能表现。
99 48
|
2月前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
95 5
|
2月前
|
机器学习/深度学习 分布式计算 数据挖掘
MaxFrame 性能评测:阿里云MaxCompute上的分布式Pandas引擎
MaxFrame是一款兼容Pandas API的分布式数据分析工具,基于MaxCompute平台,极大提升了大规模数据处理效率。其核心优势在于结合了Pandas的易用性和MaxCompute的分布式计算能力,无需学习新编程模型即可处理海量数据。性能测试显示,在涉及`groupby`和`merge`等复杂操作时,MaxFrame相比本地Pandas有显著性能提升,最高可达9倍。适用于大规模数据分析、数据清洗、预处理及机器学习特征工程等场景。尽管存在网络延迟和资源消耗等问题,MaxFrame仍是处理TB级甚至PB级数据的理想选择。
70 4
|
3月前
|
SQL 并行计算 数据挖掘
一份写给数据工程师的 Polars 迁移指南:将 Pandas 速度提升 20 倍代码重构实践
Polars作为现代化的数据处理框架,通过先进的工程实践和算法优化,为数据科学工作者提供了高效的数据处理工具。在从Pandas迁移时,理解这些核心概念和最佳实践将有助于充分发挥Polars的性能优势。
117 4
|
4月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
99 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用