(数据科学学习手札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
等相关分析工具的安装:
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
格式进行比较:
# 利用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
相关教程文章,欢迎持续关注,一起来熟练掌握这款数据分析利器。
以上就是本文的全部内容,欢迎在评论区与我们进行讨论~
(数据科学学习手札161)高性能数据分析利器DuckDB在Python中的使用的更多相关文章
- (数据科学学习手札73)盘点pandas 1.0.0中的新特性
本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 毫无疑问pandas已经成为基于Pytho ...
- (数据科学学习手札08)系统聚类法的Python源码实现(与Python,R自带方法进行比较)
聚类分析是数据挖掘方法中应用非常广泛的一项,而聚类分析根据其大体方法的不同又分为系统聚类和快速聚类,其中系统聚类的优点是可以很直观的得到聚类数不同时具体类中包括了哪些样本,而Python和R中都有直接 ...
- (数据科学学习手札72)用pdpipe搭建pandas数据分析流水线
1 简介 在数据分析任务中,从原始数据读入,到最后分析结果出炉,中间绝大部分时间都是在对数据进行一步又一步的加工规整,以流水线(pipeline)的方式完成此过程更有利于梳理分析脉络,也更有利于查错改 ...
- (数据科学学习手札75)基于geopandas的空间数据分析——坐标参考系篇
本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的数据结 ...
- (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg
*从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...
- (数据科学学习手札80)用Python编写小工具下载OSM路网数据
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
- (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播图
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信 ...
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札49)Scala中的模式匹配
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...
随机推荐
- 国产gowin开发板GW1NR-9K的PSRAM使用说明
开发板子采用GW1NNR-LV9LQ144PC6/I5 FPGA器件.具有低功耗,瞬时启动,高安全性,低成本,方便扩展等特点.本开发板价格价格便宜,板子扩张性容易,帮助用户比较快速进入国产FPGA学习 ...
- Pytorch风格迁移代码
最近研究了一下风格迁移,主要是想应用于某些主题节日时动态融合背景,生成一些抽象的艺术图片,这里给大家分享一个现成的代码,我本地把环境搭建好后跑了试试,有兴趣的可以直接拿去运行: 1 import to ...
- TypeScript 的理解?与 JavaScript 的区别?
一.是什么 TypeScript 是 JavaScript 的类型的超集,支持ES6语法,支持面向对象编程的概念,如类.接口.继承.泛型等 ❝ 超集,不得不说另外一个概念,子集,怎么理解这两个呢,举个 ...
- 5G新基建 边缘计算乘风破浪
作者 | 张羽辰(同昭)阿里云交付专家 导读:如今,几乎所有的事情都离不开软件,当你开车时,脚踩上油门,实际上是车载计算机通过力度感应等计算输出功率,最终来控制油门,你从未想过这会是某个工程师的代码. ...
- Let's Fluent:更顺滑的MyBatis
简介: 只需瞅一眼Google Trends上全球Java界最热门的两款SQL映射框架近一年的对比数字,就不难了解其实力分布:在此领域,MyBatis早已占领东亚地区开发者市场,并以绝对优势稳居中国最 ...
- [FAQ] swagger-php @OA\JsonContent 与 @MediaType @OA\Schema 的用法
@OA\JsonContent 是对 @MediaType @OA\Schema 两者的封装,类似于 laravel 中 JsonResponse 对 Response 的封装. @OA\JsonCo ...
- [Contract] truffle-flattener 合并 Solidity 文件的依赖到一个文件
使用 $ npm install truffle-flattener -g $ truffle-flattener <solidity-files> > output.sol 为什么 ...
- vue应用el-tabel封装
<template> <div class="table"> <el-table :data="tableList" style= ...
- ansible系列(34)--ansible实战之部署WEB集群架构(4)
目录 1. 业务环境部署 1.1 wordpress-base编写 1.2 wordpress-web编写 1.3 wordpress-mysql编写 1.4 wordpress-proxy编写 1. ...
- three.js介绍和学习资料说明
1.three.js能做什么 Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多.使用最广泛的三维引擎.既然Threejs是一款WebGL ...