数据流的资源规范化器

dataflows-normalize的Python项目详细描述


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

此库提供一些数据流处理,用于规范化资源。

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

什么是标准化?

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

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

示例

以这个世界城市数据集为例(我们称之为fact资源):

fromdataflowsimportFlow,load,printerFlow(load('https://datahub.io/core/world-cities/r/world-cities.csv',name='cities'),printer(num_rows=1)).process()

城市: |#|名称国家次国家大地水准面 |—————————————————————————————————--- |安道尔埃斯卡尔德酒店 | 2安道尔拉维拉安道尔安道尔拉维拉3041563 |… | 23018{str 1}$chitungwiza{str 1}$津巴布韦{str 1}$harare1106542

似乎countrysubcountry列是相当重复的—让我们将它们提取到一个单独的、重复数据消除的资源中(我们将称之为dimension资源)。

为此,我们使用normalize处理器。

这个处理器接收一个资源名和一个NormGroup实例列表。每个组指定一个新的dimension要提取和消除重复的资源。

让我们看看它的实际效果:

fromdataflows_normalizeimportnormalize,NormGroupFlow(load('https://datahub.io/core/world-cities/r/world-cities.csv',name='cities'),normalize([NormGroup(['country','subcountry'],'country_id','id')],resource='cities'),printer()).process()

城市: |#|名称地理名称ID国家ID |——————————————————————————— | 1 Les Escaldes 3040051 0 | 2安道尔拉维拉3041563 1 | 3 umm al-qaywayn 290594 2 | 4哈伊马角291074 3 | 5 khawr fakk_n 291696 4 |… | 23014布拉瓦约894701 2677 | 23015宾杜拉895061 2678 | 23016北桥895269 2679 | 23017艾普沃斯1085510 2676 | 23018{str 1}$chitungwiza1106542{str 1}$2676

城市/国家标识: |#| ID国家次国家 |————————————————————————————————————————————————— | 1 30阿富汗巴达赫尚 | 2 27阿富汗巴德吉斯 | 3 21阿富汗巴尔赫 |阿富汗 | 5 31阿富汗法拉 | 6 19阿富汗法里亚布 | 7 28阿富汗加兹恩 | 8 13阿富汗高尔 | 9 22阿富汗赫尔曼德 | 10 11阿富汗赫拉特 |… | 2671 2677津巴布韦布拉瓦约 | 2672{str 1}$2676津巴布韦{str 1}$harare | 2673 2673津巴布韦马尼卡兰 | 2674 2678津巴布韦马绍兰中部 | 2675 2675津巴布韦马绍兰东部 | 2676 2674津巴布韦马绍兰西部 | 2677 2670津巴布韦马辛戈 | 2678 2671津巴布韦马塔贝莱兰北部 | 2679 2679津巴布韦马塔贝莱兰南部 | 2680 2672津巴布韦中部地区

如果我们跟随数据集中的最后一行(Chitungwiza),我们可以看到其区域(Zimbabwe/Harare)的条目是用id2676创建的,并且该id被添加到原始行而不是原始值。

我们得到了多少?

原始csv文件的大小为895586字节。

如果我们将这两个新资源保存为csv,我们将得到

对于fact资源,为542299字节;对于区域dimension资源,为68023字节—总共610322字节(或大小减少31%)。

这不仅有助于提高大小,还大大提高了以规范化形式存储数据的数据库性能。

数据库规范化

运行类似代码to以上,仅使用normalize_to_db将执行以下操作:

    从数据库中加载现有的值,如表>表>(如果这些表存在)
  • 规范化输入数据,并分成factdimension资源
  • 用新值更新DB表,同时重用现有引用

用法与normalize的主要区别在于提供了db表的名称。

fromdataflows_normalizeimportnormalize_to_db,NormGroupFlow(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()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ArrayList Java中的搜索字符串   另一个web应用程序的java访问会话   另一个应用程序中的活动和服务之间的java通信   java根据Json字符串类型将Json字符串转换为对象   eclipse如何解决java中的错误异常。lang.NoSuchMethodError:'java。字符串javax。摆动JOptionPane。showInputDialog(java.lang.String)'   线程“main”java中的安卓异常。lang.NoClassDefFoundError:org/codehaus/jackson/JsonParseException   java如何在安卓 emulator上显示Mat图像?使用NDK   Java在本地读取测试源文件,但在服务器上读取失败   java dowhile循环用于计算输入数字中的数字。故障排除代码   JAva初学者在编写获取成本的方法时遇到困难   java是shell游戏。我如何让物体移动,特别是在特定的曲线上,但顺序是随机的?   java如何区分两个同名的JButton   java为什么我在Spring Boot中需要一个接口?   java将文件路径插入数据库将删除\   使用InterfaceType初始化java对象   java如何部署一个分为Angular、Spring Boot和MySQL的项目?   java如何使用Symja解决不等式?