使用PostgreSQL的实用程序库
pg-utils的Python项目详细描述
在分析大型数据集时,让数据库尽可能多地进行分析通常是有用的。虽然Pandas is great at manipulating datasets that are large enough to fit on one machine, but possibly not large enough to fit into memory,但对性能和数据安全的关注有时会使数据库中的分析更加方便。
这个包是为postgresql而构建的。支持其他数据库可能会跟随(但不要屏住呼吸)。
等等,什么?为什么?!?
让我们用几个例子来说明。首先,建立连接很简单:
In [1]: from pg_utils import connection, table In [2]: conn = connection.Connection()
环境变量pg_username、pg_password、pg_hostname和pg_database可用于存储相应连接信息的值。当然,任何用户名、密码、主机名或数据库都可以被覆盖。
接下来,让我们构建一个简单的表,由一百万行组成,其中一列是随机选择的,另一列是从标准正态分布(通过Box-Muller transform)中采样的。
In [1]: from pg_utils import table In [2]: t = table.Table.create("pg_utils_test", ...: """create table pg_utils_test as select random() as x, ...: sqrt(-2 * ln(u1))*cos(2*PI()*u2) as y ...: from( ...: select random() as u1, random() as u2 ...: from generate_series(1, 1000000) ...: )a""")
对象t是元数据对象。它不保存表中的任何实际数据。但是,我们有一个通过数据库工作的熊猫api的有限子集。例如:
In [3]: t.describe() Out[3]: x y count 1000000.000000 1000000.000000 mean 0.499628 -0.000075 std_dev 0.288671 0.999630 minimum 0.000001 -4.589661 25% 0.249420 -0.672603 50% 0.499709 0.000695 75% 0.749733 0.673413 maximum 0.999999 4.867347
注意,none这些计算是在本地完成的。它们都在数据库里完成了。
另外,t.x.distplot(bins=1000)和t.y.distplot(bins=1000)生成以下直方图(带kde):
注
Tableapi已从0.3.x显著更改为0.4.0。特别是,schema和connection参数现在是可选的(分别替换为用户名和新连接)。这使得表名成为许多这些方法唯一需要的参数。如果table_name已经被模式限定(例如"foo.bar"),那么pg utils将做正确的事情,只需设置schema="foo"和table_name="bar"。
目标
此套餐的目标是:
- 提供一个简单的Connection对象,该对象基于环境变量构建到数据库的简单连接(如果指定,则使用参数重写)。
- 分别使用Column和Table元数据构造模拟pandas系列和dataframe对象。列和表将实现在数据库中进行计算的pandas api的某些部分。
- 可能还有其他工具,用于自动化简单任务和方便地显示元数据(如果需要)。
非目标
这个包裹永远不会是:
- 对象关系映射器(ORM)。唯一的sql-ish操作将是那些已实现的操作,以及用于序列和/或数据帧的pandas api的模拟sql-ish位。