当前位置:首页 > 科技  > 软件

Python数据分析专用数据库,与pandas结合,10倍提速+极致体验

来源: 责编: 时间:2023-12-11 09:28:45 354观看
导读你有想过在 pandas 中直接使用 sql吗?我知道许多小伙伴已经知道一些库也可以做到这种体验,不过他们的性能太差劲了(基于sqlite,或其他服务端数据库)。今天我要介绍另一个专用于数据分析的列式数据库,性能是其他同体验的库

你有想过在 pandas 中直接使用 sql吗?我知道许多小伙伴已经知道一些库也可以做到这种体验,不过他们的性能太差劲了(基于sqlite,或其他服务端数据库)。P3628资讯网——每日最新资讯28at.com

今天我要介绍另一个专用于数据分析的列式数据库,性能是其他同体验的库的1000倍以上。可以无缝接入 pandas ,做到了性能与使用体验同时提升。P3628资讯网——每日最新资讯28at.com

这就是今天的主角,duckdb。P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

特点

duckdb 是一个单机数据库,你大概率会用它与 sqlite 比较。P3628资讯网——每日最新资讯28at.com

最明显的区别就是,duckdb 是一个分析数据管理系统,而 sqlite 是一个事务型关系数据库。P3628资讯网——每日最新资讯28at.com

这意味着,如果你现在有一大堆数据处理任务,期间无须顾忌会有其他用户插入新数据或删除数据。那么 duckdb 就可以非常好应对这种场景。P3628资讯网——每日最新资讯28at.com

对于我们这种 pandas 老用户,duckdb 支持 pandas 的 dataFrame 通用底层格式(parquet/arrow等)上并行运行查询,而且没有单独的导入步骤。这就是它能保持使用体验的同时,大幅提升查询性能的最大原因。P3628资讯网——每日最新资讯28at.com

我们需要安装这些库 :P3628资讯网——每日最新资讯28at.com

pip install pandas duckdb -U

先看一个例子,看看它是如何便捷与 dataframe 交互。P3628资讯网——每日最新资讯28at.com

变量等于表名?

首先,导入今天需要用到的库:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

我们有一大堆销售数据,加载其中一份数据看看:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

此时,希望使用 sql 做一些数据查询处理,你认为下面的 sql 简单吗?P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

(1) 直接使用 dataframe 的变量名作为表名查询P3628资讯网——每日最新资讯28at.com

这真的可以做到吗?加上一点点 duckdb 的调用即可:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

(2) duckdb.query 做查询P3628资讯网——每日最新资讯28at.com

(3) df,把查询结果转回 dataframeP3628资讯网——每日最新资讯28at.com

也就是,可以直接使用当前环境下的变量作为表名。P3628资讯网——每日最新资讯28at.com

我知道之前就有其他的库可以做到这种体验,但是必需强调,duckdb 是直接使用 dataframe 的内存数据(因为底层数据格式通用),因此,这个过程中的输入和输出数据的传输时间几乎可以忽略不计。P3628资讯网——每日最新资讯28at.com

并且,这个过程中,duckdb比 pandas 更快处理数据(多线程),并且内存使用量也比 pandas 要低得多。P3628资讯网——每日最新资讯28at.com

特别在一些需要分组的数据处理任务上,就算只使用单线程的 duckdb 也会比 pandas 的快两倍。如果是过滤+分组+列投影,会存在 5-8倍 的差异。P3628资讯网——每日最新资讯28at.com

如果加上表连接,则可能会到 15倍 的差异。P3628资讯网——每日最新资讯28at.com

如果使用其他的一些 pandas 使用 sql 的库,比如 pandasSql ,它比 duckdb 性能差距 1000倍 以上!P3628资讯网——每日最新资讯28at.com

以上性能对比指标,均是 duckdb 官方说明,以后有机会实际操作对比。P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

性能方面,就"吹"到这里。但是,我说 duckdb 有极致的使用体验,不仅仅只是可以直接使用 dataframe 变量名作为表名写 sql 。而是它提供了许多 sql 引擎没有的优化语法体验。P3628资讯网——每日最新资讯28at.com

sql 的一些语法小痛点,duckdb 也在努力解决

现在我们需要加载所有的销售数据文件,如果使用 pandas 加载,则是这样子:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

  • 行3:得到 data 目录下所有 csv 的文件路径
  • 行2:使用 pandas 加载

duckdb提供了许多方便的内置函数:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

  • 行3:表名可以直接是本地的文件。同时还支持通配符

默认情况下,duckdb 会把 csv 的第一行也加入到记录中:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

可以使用内置函数,通过参数设定一些加载规则:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

  • 行4: read_csv_auto 可以设置具体加载文件时的设定

不过,这个 header 参数其实是加载所有数据之后,再设置第一行为表头。所以会看到实际数据仍然有一些表头行:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

我们可以直接在条件过滤中一步到位过滤掉无用的行:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

此时,我们可以随时切换使用方式。P3628资讯网——每日最新资讯28at.com

sql 中有一些语句在特定场景下,会显得"无意义"。比如我希望查询所有的列:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

每次都写一句 select * ,有点麻烦。在 duckdb 里面,我们可以直接省略 select 语句。P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

有时候,我们希望排除某几列,可以这么写:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

  • 行2:使用 * exclude ,里面指定你希望排除的列名即可。注意,因为有一些列名有空格,你需要用双引号或单引号包围

这些功能都得益于它基于的列式数据储存方式。P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

再看几个小小的 sql 体验改进。P3628资讯网——每日最新资讯28at.com

别名用在过滤条件中:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

自动识别分组列名:P3628资讯网——每日最新资讯28at.com

P3628资讯网——每日最新资讯28at.com

它还有许多有意思的特性,如果希望我后续做更多的教学,评论区告诉我。P3628资讯网——每日最新资讯28at.com

duckdb 是一个很有潜力的数据分析处理工具,结合 pandas 能否大幅提升我们的工作效率,值得大家尝试使用。P3628资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-41716-0.htmlPython数据分析专用数据库,与pandas结合,10倍提速+极致体验

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 五个令人惊叹的Jupyter黑科技

下一篇: 数据加密难做?试试这个库

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
Top