数据流资源规范化工具
项目描述
数据流资源写入数据库规范化
此库提供了一些数据流处理以规范化资源。
它特别支持将规范化数据存储到数据库表。
什么是规范化?
简而言之,它是在数据集中减少重复的过程。
更多关于这个概念的信息可以在这里阅读 这里。
示例
让我们以这个世界城市数据集(我们将它称为 事实 资源)为例
from dataflows import Flow, load, printer
Flow(
load('https://datahub.io/core/world-cities/r/world-cities.csv', name='cities'),
printer(num_rows=1)
).process()
城市
# | 名称 | 国家 | 子国家 | geonameid |
---|---|---|---|---|
1 | Les Escaldes | 安道尔 | Escaldes-Engordany | 3040051 |
2 | Andorra la Vella | 安道尔 | Andorra la Vella | 3041563 |
... | ||||
23018 | Chitungwiza | 津巴布韦 | 哈拉雷 | 1106542 |
似乎 country
和 subcountry
列相当重复 - 让我们将它们提取到单独的、去重复的资源中(我们将它称为 维度 资源)。
为此,我们使用 normalize
处理器。
此处理器接收一个资源名称和一个 NormGroup
实例列表。每个此类组指定一个要提取和去重复的新 维度 资源。
让我们看看它是如何工作的
from dataflows_normalize import normalize, NormGroup
Flow(
load('https://datahub.io/core/world-cities/r/world-cities.csv', name='cities'),
normalize([
NormGroup(['country', 'subcountry'], 'country_id', 'id')
], resource='cities'),
printer()
).process()
城市
# | 名称 | geonameid | country_id |
---|---|---|---|
1 | Les Escaldes | 3040051 | 0 |
2 | Andorra la Vella | 3041563 | 1 |
3 | Umm al Qaywayn | 290594 | 2 |
4 | Ras al-Khaimah | 291074 | 3 |
5 | Khawr Fakkān | 291696 | 4 |
... | |||
23014 | Bulawayo | 894701 | 2677 |
23015 | Bindura | 895061 | 2678 |
23016 | Beitbridge | 895269 | 2679 |
23017 | Epworth | 1085510 | 2676 |
23018 | Chitungwiza | 1106542 | 2676 |
cities_country_id
# | id | 国家 | 子国家 |
---|---|---|---|
1 | 30 | Afghanistan | Badakhshan |
2 | 27 | Afghanistan | Badghis |
3 | 21 | Afghanistan | Balkh |
4 | 33 | Afghanistan | Bāmīān |
5 | 31 | Afghanistan | Farah |
6 | 19 | Afghanistan | Faryab |
7 | 28 | Afghanistan | Ghaznī |
8 | 13 | Afghanistan | Ghowr |
9 | 22 | Afghanistan | Helmand |
10 | 11 | Afghanistan | Herat |
... | |||
2671 | 2677 | 津巴布韦 | Bulawayo |
2672 | 2676 | 津巴布韦 | 哈拉雷 |
2673 | 2673 | 津巴布韦 | Manicaland |
2674 | 2678 | 津巴布韦 | Mashonaland Central |
2675 | 2675 | 津巴布韦 | Mashonaland East |
2676 | 2674 | 津巴布韦 | Mashonaland West |
2677 | 2670 | 津巴布韦 | Masvingo |
2678 | 2671 | 津巴布韦 | Matabeleland North |
2679 | 2679 | 津巴布韦 | Matabeleland South |
2680 | 2672 | 津巴布韦 | 米德兰兹 |
如果我们遵循数据集的最后一条记录(Chitungwiza
),我们可以看到为其地区(Zimbabwe/Harare
)创建了一个条目,其ID为2676
,并且该ID被添加到原始行而不是原始值。
我们获得了多少?
原始CSV文件的大小为895,586字节。
如果我们将这两个新资源保存为CSV文件,我们会得到
事实资源为542,299字节,地区维度资源为68,023字节——总共610,322字节(或大小减少了31%)。
这不仅有助于减小大小,而且极大地提高了以规范化形式存储数据的数据库性能。
数据库规范化
运行与上述类似的代码,只需使用normalize_to_db
即可执行以下操作
- 从数据库维度表中加载现有值(以防这些表存在)
- 规范化输入数据,并将其拆分为事实和维度资源
- 使用新值更新数据库表,同时重用现有引用
与normalize
的主要区别在于提供了数据库表名。
from dataflows_normalize import normalize_to_db, NormGroup
Flow(
load('https://datahub.io/core/world-cities/r/world-cities.csv', name='cities'),
normalize_to_db(
[
NormGroup(['country', 'subcountry'], 'country_id', 'id', db_table='countries_db_table')
],
'cities_db_table', 'cities',
db_connection_str='...'
),
).process()
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。
源分布
dataflows-normalize-0.0.11.tar.gz (6.5 KB 查看哈希)
构建分布
关闭
dataflows-normalize-0.0.11.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b15b1e8dca95c82ec8918b1a662e8f8691b50d89faaac53ecb5dd29b3aa16283 |
|
MD5 | 96ca9ea357948c067300be329a99c6c5 |
|
BLAKE2b-256 | 37d3f77b3a2e7811d54bf1c55cd80a95a5157503386286bbc15e5c9ec7935ec4 |
关闭
dataflows_normalize-0.0.11-py2.py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bfc5100792865dbbf069a386d0e6d4a40a83671d94c94bf0974e755bfc5e36ec |
|
MD5 | fd14dce8352d6e1274b0f7616ef3de61 |
|
BLAKE2b-256 | 397e9b3aaf983803bed4985cf7a718d753e3915bcd4903e87125afe97a0d2341 |