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

时尚   2024-11-19 17:08   浙江  

文文今天带大家认识一位新朋友,它叫ibis,可不是那个酒店哦!这是一个Python框架,厉害之处在于它能用一套代码操作各种数据处理工具,就像拥有万能钥匙一样!想想以前,用pandas、Spark,每个语法都不一样,简直头大。现在有了ibis,一套代码走天下,省时省力!接下来,文文带你体验ibis的魅力!

安装ibis,开启数据分析之旅

俗话说,工欲善其事,必先利其器。咱们先安装ibis。文文推荐用conda或者mamba,创建一个新的虚拟环境,干净卫生,避免冲突。

mamba create -n ibis-demo python=3.9 -y
mamba activate ibis-demo
pip install ibis-framework[duckdb,examples]

安装完,验证一下:

python -c "import ibis;print(ibis.__version__)"

如果成功打印版本号,恭喜你,ibis已就位!

代码便携性:一套代码,多种玩法

ibis最大的亮点就是“便携性”,一套代码,可以在不同的数据处理引擎上运行,比如DuckDB、pandas、ClickHouse等等,超过20种!这意味着什么?意味着你可以在小数据集上用pandas调试代码,然后无缝切换到ClickHouse处理海量数据,效率提升不是一点点!

来个例子,咱们先用pandas造一个千万级别的数据集:

import numpy as np
import pandas as pd

# 生成测试用数据并导出为parquet格式
(
    pd
    .DataFrame(
        {
            
'类别': np.random.choice(list('abcdef'), 10000000),
            
'数值': np.random.uniform(010010000000)
        }
    )
    .assign(数值=lambda df: df['数值'].round(3))
    .to_parquet('demo.parquet')
)

这段代码生成一个包含“类别”和“数值”两列的数据,保存为parquet格式。

然后,咱们用DuckDB跑一下分析:

import ibis

# 连接到parquet文件
conn = ibis.duckdb.connect("demo.parquet")

# 获取表
table = conn.table("demo")

# 计算数值的平均值
mean_value = table['数值'].mean()

# 打印结果
print(mean_value.execute())

这段代码连接到parquet文件,计算“数值”列的平均值。

接下来,咱们切换到pandas,用同样的代码:

import ibis

# 连接到parquet文件,这次用pandas后端
conn = ibis.pandas.connect({"demo": pd.read_parquet("demo.parquet")})

# 获取表
table = conn.table("demo")

# 计算数值的平均值,代码和DuckDB一样!
mean_value = table['数值'].mean()

# 打印结果
print(mean_value.execute())

你会发现,代码一模一样,只是换了个后端!这就是ibis的便携性!

Python与SQL的完美融合

ibis的另一个绝招是融合了Python和SQL。你可以用Python写分析逻辑,然后转换成SQL语句,也可以直接用SQL进行分析。简直是左右逢源!

import ibis

# ... (之前的代码)

# 将ibis表达式转换为SQL语句
sql_query = table['数值'].mean().compile()

print(sql_query)

这段代码将计算平均值的ibis表达式转换成SQL语句。

你还可以直接执行SQL语句:

import ibis

# ... (之前的代码)

# 直接执行SQL语句
result = conn.sql("SELECT AVG(数值) FROM demo").execute()

print(result)

这段代码直接用SQL计算平均值。

温馨提示

  • ibis本身不执行计算,它只是把你的代码转换成底层引擎能理解的语言。
  • 不同的后端性能差异很大,选择合适的引擎很重要。
  • ibis还在不断发展,未来会支持更多功能和引擎。

总结

ibis是一个极具潜力的Python数据分析框架,它用统一的API操作各种数据引擎,让你的代码更便携,更高效。它还巧妙地融合了Python和SQL,让你可以灵活选择分析方式。还在等什么?赶紧试试ibis吧!


文文聊历史文物
中国历史文物是指中国古代遗留下来的具有历史、艺术、科学价值的物品。这些文物包括了各种类型,如青铜器、陶瓷、书画、玉器、金银器、石刻、建筑等。它们是中国历史文化的重要载体,反映了中国古代社会的政治、经济、文化、科技等方面的发展和变迁。
 最新文章