跳转到主要内容

一个用于使用pandas和SQL快速、高效分析的包

项目描述

siuba

快速、高效的数据分析,无缝支持pandas和SQL

CI Documentation Status Binder

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

示例

请参阅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]

请参阅siuba指南或了解更多关于懒表达式的信息。

与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指南

测试

测试使用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 查看哈希值)

上传时间 Python 3

支持