一个用于使用pandas和SQL快速、高效分析的包
项目描述
siuba
快速、高效的数据分析,无缝支持pandas和SQL
siuba (小巴) 是 R 库 dplyr 的移植,支持以 5 个常见操作为中心的表格数据分析工作流程
select()
- 保留数据的一定列。filter()
- 保留数据的一定行。mutate()
- 创建或修改现有列的数据。summarize()
- 将一个或多个列减少到单个数字。arrange()
- 重新排序数据行。
这些操作可以由 group_by()
预先执行,这将导致它们单独应用于分组后的数据行。此外,许多 SQL 概念,如 distinct()
、count()
和连接,也得到了实现。这些函数的输入可以是 pandas DataFrame
或 SQL 连接(目前为 postgres、redshift 或 sqlite)。
有关类似 dplyr 等工具背后的原理的更多信息,请参阅此 tidyverse 论文。有关 siuba 的示例,请参阅 siuba 指南。
安装
pip install siuba
示例
基本使用
以下代码使用示例DataFrame mtcars
,以获取每缸的平均马力(hp)。
from siuba import group_by, summarize, _
from siuba.data import mtcars
(mtcars
>> group_by(_.cyl)
>> summarize(avg_hp = _.hp.mean())
)
Out[1]:
cyl avg_hp
0 4 82.636364
1 6 122.285714
2 8 209.214286
本例中有三个关键概念
概念 | 示例 | 含义 |
---|---|---|
动词 | group_by(...) |
一个在表格上操作的函数,如DataFrame或SQL表格 |
siu表达式 | _.hp.mean() |
使用siuba._ 创建的表达式,表示您想执行的操作 |
管道 | mtcars >> group_by(...) |
一种语法,允许您使用>> 运算符链式调用动词 |
请参阅siuba指南概述以获取完整介绍。
siu表达式(例如_.cyl == 4
)是什么意思?
siu表达式是指定您想执行什么操作的一种方式。这允许siuba动词根据您的数据是本地DataFrame还是远程表格来决定如何执行操作。
from siuba import _
_.cyl == 4
Out[2]:
█─==
├─█─.
│ ├─_
│ └─'cyl'
└─4
您还可以将siu表达式视为lambda函数的简写。
from siuba import _
# lambda approach
mtcars[lambda _: _.cyl == 4]
# siu expression approach
mtcars[_.cyl == 4]
Out[3]:
mpg cyl disp hp drat wt qsec vs am gear carb
2 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
7 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
.. ... ... ... ... ... ... ... .. .. ... ...
27 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
31 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
[11 rows x 11 columns]
与SQL数据库一起使用
siuba的一个杀手级特性是相同的分析代码可以在本地DataFrame或SQL源上运行。
在下面的代码中,我们设置了一个示例数据库。
# Setup example data ----
from sqlalchemy import create_engine
from siuba.data import mtcars
# copy pandas DataFrame to sqlite
engine = create_engine("sqlite:///:memory:")
mtcars.to_sql("mtcars", engine, if_exists = "replace")
接下来,我们使用第一个示例中的代码,但现在执行的是SQL表格。
# Demo SQL analysis with siuba ----
from siuba import _, tbl, group_by, summarize, filter
# connect with siuba
tbl_mtcars = tbl(engine, "mtcars")
(tbl_mtcars
>> group_by(_.cyl)
>> summarize(avg_hp = _.hp.mean())
)
Out[4]:
# Source: lazy query
# DB Conn: Engine(sqlite:///:memory:)
# Preview:
cyl avg_hp
0 4 82.636364
1 6 122.285714
2 8 209.214286
# .. may have more rows
请参阅此处查询SQL介绍。
示例笔记本
以下是一些我在开发siuba时保留的示例。有关最新解释,请参阅siuba指南
- siu表达式
- dplyr风格的pandas
- 使用dplyr风格的sql
- tidytuesday示例
- tidytuesday是一个每周R数据分析项目。为了测试siuba,我一直在用它来完成作业。更具体地说,我一直在将Dave Robinson的tidytuesday分析移植到使用siuba。
测试
测试使用pytest进行。可以使用以下方式运行。
# start postgres db
docker-compose up
pytest siuba
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
siuba-0.4.4.tar.gz (170.5 kB 查看哈希值)
构建分发
siuba-0.4.4-py3-none-any.whl (208.6 kB 查看哈希值)