FireDucks:以零学习成本获得超越 pandas 的性能!
Pandas 是最受欢迎的库之一,当我在寻找一种更简单的方法来加速其性能时,我发现了 FireDucks 并对它产生了兴趣!
与 pandas 的比较:为什么选择 FireDucks?
Pandas 程序可能会遇到严重的性能问题,具体取决于其编写方式。然而,作为一名数据科学家,我想花越来越多的时间分析数据,而不是提高代码性能。因此,如果它能够执行诸如交换进程顺序并自动加速程序性能之类的事情,那就太好了。例如,Process A => Process B 会比较慢,所以我们将其替换为 Process B => Process A。(当然,结果保证是一样的。)据说数据科学家花费了大约他们 45% 的时间都在准备数据,当我考虑做一些事情来加速这个过程时,我遇到了一个名为 FireDucks 的模块。
从 FireDucks 文档来看,它似乎仅支持 Linux 平台。由于我在我的主机上使用 Windows,所以我想从 WSL2(Windows Subsystem for Linux)尝试一下,这是一个可以在 Windows 上运行 Linux 的环境。
我尝试的环境如下
- 操作系统 Microsoft Windows 11 Pro
- 版本 10.0.22631 内部版本 22631
- 系统型号 Z690 Pro RS
- 系统类型基于 x64
- PC 处理器第 12 代 Intel(R) Core(TM) i3–12100、3300 Mhz、4 核、8 个逻辑处理器
- 底板产品 Z690 Pro RS
- 平台角色桌面
- 安装的物理内存 (RAM)64.0 GB
安装和配置 FireDucks
安装 WSL
WSL 是在以下 Microsoft 文档的帮助下安装的; Linux 发行版是 Ubuntu 22.04.1 LTS。
安装 FireDucks
然后实际安装FireDucks。不过安装起来非常简单。
pip install fireducks
安装 FireDucks(以及 pyarrow、pandas 和其他库)需要几分钟时间。
我尝试执行下面的代码,加载速度非常快,pandas 花了 4 秒,fireDucks 只花了 74.5 ns。
# 1. analysis based on time period and creative duration # convert timestamp to date/time object df['timestamp_converted'] = pd.to_datetime(df['timestamp'], unit='s ') # define time period def get_part_of_day(hour): if 5 <= hour < 12: return 'morning' elif 12 <= hour < 17: return 'afternoon' else: return 'evening' # Add time period in new column df['part_of_day'] = df['timestamp_converted'].apply(lambda x: get_part_of_day(x.hour)) # Calculate average creative duration by time period df_ duration_by_time = df.groupby('part_of_day')['creative_duration'].mean() print(df_duration_by_time) # 2. campaign performance per different advertiser df_ campaigns_per_advertiser = df.groupby('advertiser_id')['campaign_id'].nunique() df_creatives_per_advertiser = df.groupby('advertiser_id ')['creatives_id'].nunique() print(df_campaigns_per_advertiser) print(df_creatives_per_advertiser) # 3. language and website association df_common_website_ per_language = df.groupby('placement_language')['website_id'].apply(lambda x: x.mode()[0]) print(df_common_website_per_language) # 4. Analyze referrer information def extract_domain(referrer): # if referrer is a float (e.g. NaN), return empty string if isinstance(referrer, float): return '' # otherwise, extract domain name return referrer.split('/')[0] df['referrer_domain'] = df['referrer_deep_three'].apply(extract_domain) df_referrer_distribution = df['referrer_domain'].value_counts() print(df_referrer_distribution)
所有这些数据预处理和分析在 pandas 中大约需要 8 秒,而使用 FireDucks 时可以在 4 秒内完成。几乎可以实现 2 倍的速度。
提高性能
使用pandas最有压力的事情之一是加载大数据集时的等待,然后我必须等待像groupby这样的复杂操作。另一方面,由于FireDucks进行惰性评估,加载本身根本不需要时间,因此在需要的地方进行处理,我觉得这非常重要,大大减少了总等待时间。
至于其他性能,据该组织官方宣布,与 pandas 相比,似乎已经实现了高达 16 倍的速度提升。 (下次我会与各个竞争库进行性能比较。)
零学习成本
能够遵循精确的 pandas 符号而无需考虑任何事情是一个巨大的优势。除了FireDucks之外,还有其他数据帧加速库,但它们学习成本太高,而且太容易忘记。
例如,如果你想添加带有极坐标的列,你必须这样写。
# pandas df["new_col"] = df["A"] + 1 # polars df = df.with_columns((pl.col("A") + 1).alias("new_col"))
几乎不需要更改现有代码
我有几个使用 pandas 的 ETL 和其他项目,如果仅通过安装 FireDucks 并替换 import 语句就能看到性能改进,那就太好了。
如果您想进一步添加,请随时在下面评论。
以上是FireDucks:以零学习成本获得超越 pandas 的性能!的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。
