跳转到主要内容

数据流资源规范化工具

项目描述

数据流资源写入数据库规范化

此库提供了一些数据流处理以规范化资源。

它特别支持将规范化数据存储到数据库表。

什么是规范化?

简而言之,它是在数据集中减少重复的过程。

更多关于这个概念的信息可以在这里阅读 这里

示例

让我们以这个世界城市数据集(我们将它称为 事实 资源)为例

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

似乎 countrysubcountry 列相当重复 - 让我们将它们提取到单独的、去重复的资源中(我们将它称为 维度 资源)。

为此,我们使用 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-py2.py3-none-any.whl (6.8 KB 查看哈希

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面