Python技术迷

ibis:极具潜力的Python数据分析新框架

嗨,我是虎哥。
今天,我们要聊聊一个极具潜力的数据分析新框架:Ibis。

Image

Ibis是由Wes McKinney创建的,没错,就是那个开发了pandas和Arrow的大神。
Ibis的核心理念是通过统一的API来操作各种数据运算框架,使得数据分析过程更加轻松一致。让我们看看Ibis是如何实现这种魔法的吧!

Ibis基础用法介绍

Ibis的安装


为了展示Ibis的强大功能,我们首先要安装它。建议使用conda或mamba创建新的虚拟环境,这样可以保持环境的干净整洁。
以下是通过mamba安装Ibis的步骤:
# 创建新的虚拟环境mamba create -n ibis-demo python=3.9 -y
# 激活虚拟环境mamba activate ibis-demo
# 安装ibis和相关模块pip install ibis-framework[duckdb,examples]
安装完成后,可以通过以下命令验证:
python -c "import ibis;print(ibis.__version__)"
此时,应该会显示当前版本号,比如9.0.0。看吧,安装就是这么简单!👍

Ibis的主要功能

构建具有便携性的分析逻辑
Ibis并不直接执行分析计算,而是将用户编写的计算逻辑转换为当前计算后端支持的操作。它支持超过20种计算后端,包括单机分析和分布式分析领域的主流框架。这意味着用Ibis构建的数据分析工作流可以在不同的计算后端上无缝迁移。
例如,Ibis默认使用DuckDB作为后端进行单机分析运算。我们可以在本地使用部分数据验证业务逻辑,然后将相同的代码应用于其他后端(如ClickHouse)进行分布式运算。🐣

Image

让我们用一个简单的例子来演示Ibis的便携性:
import numpy as npimport pandas as pd
# 生成测试用数据并导出为parquet格式( pd .DataFrame( { '类别': np.random.choice(list('abcdef'), 10000000), '数值': np.random.uniform(0, 100, 10000000) } ) .assign(数值=lambda df: df['数值'].round(3)) .to_parquet('demo.parquet'))
在这个例子中,我们生成了一个包含一千万行记录的示例数据并导出为parquet格式。接下来,我们使用Ibis在不同后端上执行相同的分析逻辑。
import ibis
# 使用DuckDB后端加载数据con = ibis.connect("duckdb://")t = con.read_parquet("demo.parquet")
# 进行简单的聚合操作result = t.group_by("类别").aggregate( count=t.count(), sum_value=t["数值"].sum()).order_by("count")print(result.execute())
通过这种方式,我们可以轻松切换后端,而不需要修改数据分析逻辑。要是pandas也有这个功能,那可就太好了。不过,pandas可是要被气哭了,因为DuckDB的性能在大数据集上更胜一筹。😅
充分搭配Python与SQL
Ibis另一个强大的功能是结合Python代码和SQL代码开展分析工作。你可以将Ibis分析代码直接转换为SQL语句,甚至可以在Ibis中执行SQL语句。
Image
例如,将Ibis的表达式转换为SQL:
sql_query = ibis.to_sql(result)print(sql_query)
生成的SQL语句可以直接在SQL环境中执行,为数据工程师和数据科学家架起了一座桥梁。这样的结合让数据分析的可读性和可维护性大大提高。
此外,Ibis支持混合使用Python数据框和SQL代码,这使得分析工作更加灵活。例如:
# 直接使用SQL语句进行分析sql_result = t.sql(    "SELECT 类别, COUNT(*) AS count, SUM(数值) AS sum_value FROM t GROUP BY 类别").order_by("count")print(sql_result.execute())
这种灵活性让Ibis可以充分利用Python的动态特性和SQL的强大计算能力。既能撸Python,也能写SQL,这简直是双赢!🎉

Ibis的便携性与灵活性

Ibis通过将数据框API与后端执行分离,实现了数据分析的便携性。用户可以在本地使用DuckDB进行开发,然后通过更改一行代码将应用程序部署到远程数据库,如BigQuery。这使得Ibis在数据分析过程中更加高效和灵活。
以下是如何在本地使用DuckDB开发并在远程使用BigQuery部署的示例:
# 本地使用DuckDBlocal_con = ibis.connect("duckdb://")local_table = local_con.read_parquet("penguins.parquet")print(local_table.head(3))
# 部署到BigQueryremote_con = ibis.connect("bigquery://")remote_table = remote_con.table("penguins")print(remote_table.head(3))
这种便携性不仅提高了数据分析的效率,还为数据科学家和工程师节省了大量的时间和精力。

结语

总之,Ibis作为一个新兴的数据分析框架,凭借其强大的便携性和灵活性正在迅速崛起。它不仅可以轻松结合Python和SQL,还能在不同的计算后端之间无缝切换,为数据分析工作带来了极大的便利。
通过Ibis,你可以在本地轻松地进行数据探索和开发,然后将分析结果部署到生产环境中,无需担心代码迁移的问题。Ibis无疑是数据分析师的得力助手,为我们提供了一种高效而优雅的解决方案。🎈
如果你还没试过Ibis,那不妨试一试,说不定下一个数据分析项目就靠它了呢!
项目地址:github.com/ibis-project/ibis
目前,对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。

🔥虎哥私藏精品 热门推荐🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB。全部免费领取!全面满足各个阶段程序员的学习需求。