(数据科学学习手札161)高性能数据分析利器DuckDB在Python中的使用

本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

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

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

2 DuckDB在Python中的使用

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

bash 复制代码
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默认可直接导入csv、parquet、json等常见格式的文件,我们首先使用下列代码生成具有五百万行记录的简单示例数据,并分别导出为csv和parquet格式进行比较:

python 复制代码
# 利用pandas生成示例数据文件
import numpy as np
import pandas as pd

generated_df = pd.DataFrame(
    {
        '类别': np.random.choice(list('ABCDEF'), 1000000),
        '数值': np.round(np.random.uniform(0, 1000000, 1000000), 3)
    }
)

# 分别导出为csv、parquet格式
generated_df.to_csv('./demo_data.csv', index=False)
generated_df.to_parquet('./demo_data.parquet')

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

  • csv格式
  • parquet格式

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

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

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

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

2.2 执行分析运算

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

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

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

2.3 计算结果转换

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

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

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

  • csv格式
  • parquet格式

  更多有关DuckDB在Python中应用的内容,请移步官方文档(https://duckdb.org/docs/api/python/overview),费老师我也会在之后持续的分享DuckDB相关教程文章,欢迎持续关注,一起来熟练掌握这款数据分析利器😉。


  以上就是本文的全部内容,欢迎在评论区与我们进行讨论~

相关推荐
月光船幽幽15 分钟前
拓扑实验三组协同验证方案
python·算法
智鸟科技GemeOpen开发者智能设备24 分钟前
MQTT智能插座GSPM1B2 · 开发者实战指南
java·开发语言·python·物联网
Thinker QAQ25 分钟前
并发编程(七):volatile——从语言规则到 CPU
java·python·go·并发编程·volatile·memory model
Fluxproxy26 分钟前
Python BeautifulSoup4 超全实战教程|解决网页乱码、标签匹配、层级查找、数据提取难题
开发语言·python
Data analyse45637 分钟前
Cookie过期引发UV上涨的复核方法
服务器·前端·数据分析·uv
paopaokaka_luck38 分钟前
非遗文物数字化小程序(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
javascript·spring boot·mysql·数据分析·echarts·mybatis
databook1 小时前
时间序列分解:从噪声中提取有效信号
python·数据挖掘·数据分析
wang_yb1 小时前
时间序列分解:从噪声中提取有效信号
数据分析·databook
坤坤子吖1 小时前
Python基础语法学习:条件、循环与程序控制
开发语言·笔记·python·学习
伞伞悦读1 小时前
【第53期】有序插入把二叉搜索树变成链:别只看“树”的名字
python