fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接

1、需求分析

 

fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接_第1张图片

 1.shp为原始数据,包含了图形信息和属性信息,可以看到姓名作为挂接项,包含的干扰项目很多,让我们根本没有办法用正则表达式过滤出来fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接_第2张图片

 2.xlsx为表格数据,里面包含了我们需要挂接的属性,我们需要将表格的属性通过姓名模糊匹配挂接到shp中。

fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接_第3张图片

2、需要工具

完成这个需求,我们需要有fme,以及安装到fme里面的python3.7 pandas包。不会安装的小伙伴可以看我第一期的博客内容,里面有fme安装pandas详细介绍。

3、实现过程

1、核心转换器为pythoncaller,但是因为fme特性的原因,没有办法生成两个接口来分开处理两组数据,所以我们需要用featuremerger来讲属性合并。

fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接_第4张图片

 用counter造一个随机数来作为关联基础。我们可以看到合并之后属性并不是对应的。fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接_第5张图片

 因为这只是简单的将两组数据组合了起来,接下来需要用pandas来进行数据处理。

2、直接这是pythoncalller源码

fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接_第6张图片

 原理是将我需要挂接的表格数据转换为字典格式,且key值为姓名,value为count的自然数

然后用pandas数据处理三板斧的经典方法apply,将我们的shp属性,按行要素一行一行的输入进去merge_fuc函数中,匹配字典里面的符合项,将字典value值(自然数)匹配出来。然后两组数据都获得了对应的自然数,再通过pandas的merge方法匹配出二维数组,最后将匹配出来的二维数组输出为字段要素。

fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接_第7张图片

 写出后可以看到属性是挂接上去了。

4、难点分析

这个案例一个包含了三个难点,请教了多位大佬,才将这三个难点解决。同时也感谢fme群的几位大佬的指点,才让我实现了这个案例。

1、如何实现模糊匹配,这也是这个模板的核心所在,使用了re的search方法,通过apply传参逐行查询。

2、pandas的datafrom数据格式如何转换到fme的要素中:

fme结合python-pandas实现图形数据和表格数据的模糊匹配挂接_第8张图片将datafrom格式的数据转换成list格式,然后按个数遍历,然后添加要素。

3、apply方法如何在fme中实现传参数:这其实是这个基础问题,涉及python的类的基础知识,要实现参数的传递,需要在init函数中定义参数,然后必须要有self参数,self指代实例对象,字面意思就是自己本身。

 5、总结

不推荐使用这种方法进行模糊匹配,最简便的方法依旧是将数据导入到sql中直接用模糊匹配like来实现。但是该案例体现了pandas在fme数据处理中的强大的一面,如果pandas用的熟练,那么只要是数据,应该都没有什么处理不了的问题了。同时这个代码冗余较多,如果匹配项目多了,还得一个一个添加字段,优势是可以实现图形数据的属性挂接。后续会持续更新fme的一些有用的模板。

你可能感兴趣的:(fme,python,正则表达式,python,etl)