38

真实感受一下县比省大不包邮,省市区乡镇多级数据重装上阵

 4 years ago
source link: https://www.tuicool.com/articles/3qiE3yv
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

以前采集的旧版省市区三级或四级城市数据总是觉得怪怪的,经过多方探讨,终于下定决心进行了一次重大更新,发布了这个重(chong)装版。除了省市区乡镇数据外,坐标和边界范围、还有拼音都是有的。

GitHub: https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov

在线预览: 多级联动测试和预览、转换成JSON

城市的坐标和边界范围

坐标边界数据全部来自高德地图接口( GCJ-02坐标系 ),几个地图里面质量算是最好的。保存为csv格式,导入SQL Server也是很方便的,先睹为快(大到不包邮:open_mouth:):

fu2Uniq.gif

从一幅中国地图里面去看,那种大到不包邮地方可能看不出什么太大的感觉;没有对比就没有伤害,单独把最大的县抠出来对比一下就有感觉了,:point_right:看左边那一块纯色:grin:

这些坐标和边界数据使用js代码采集的,得到的csv文件有130M+,压缩成7z文件后有13M大小,采集速度很快,省市区三级数据大概3分钟就采集完成了。目前GitHub库里面的省市区三级和高德地图的城市蛮匹配,除了台湾的城市没有边界外,其他城市均有匹配的数据。

采集源码见此目录: https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/tree/master/2019/坐标和边界

另外贴一张图片乐呵乐呵:

zE3Ifyv.jpg!web

新版城市数据采集

原何重装

  1. 以前只从统计局获取数据,数据源过于单一,后来合并了民政部数据,还是感觉数据不太好使。
  2. 很多人提醒只用民政部的数据会比用统计局的更好;甚至有的会从很多数据源获取城市数据,唯独不要统计局的。
  3. 研究发现高德地图行政区域、腾讯地图行政区划,这些地图都有开放接口提供数据,并且数据开起了也不错。
  4. 强迫症又要犯了。

技能要点

综合分析了一下统计局、民政部、高德地图行政区域、腾讯地图行政区划,并且结合各大网站的城市选择数据,如:淘宝、QQ、58这些有城市选择的,发现统计局的数据主要问题出现在以下两点:

  1. 数据缺失,有些确实是没有,有些是因为数据没有更新导致的滞后,只能靠自己去补全。
  2. 包含了大约160来个开发区、经济区、高新区、国家级新区,这种区划应该算专门的区域,一般由多个城市的区域组成,在区级内算是重复的区域,因此需要剔除,但剔除后这些区域下面的镇级需要划分到实际的归属城市下面,这就很困难了,因为量太大了,一个个去查归属地几乎不可能。

围绕着这主要两点,从多个数据源里采集数据,然后上人工+智能(人工多些),问题才能够解决。为什么要这么麻烦?因为没有找到特别优秀的数据源,其他各大平台、网站的数据在感官上显得都不够完美,综合一下舒畅多了。

采集源码见此目录(其中1-3打头的js文件): https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/tree/master/2019

数据特性

  1. id编号和国家统计局的编号基本一致,方便以后更新,有很多网站接口数据中城市编号是和这个基本是一致的,包括民政部、腾讯地图和高德地图的城市数据这套编号都是大部分通用的。

  2. 东莞中山儋州 等不设区的直筒子市没有第三级区级,自动添加同名的一级作为区级,以保证整个数据结构的一致性,添加的城区编号以上级的ID结尾加两个0作为新ID,此结构ID兼容性还不错,比如:东莞(4419)下级只有一个区 东莞(441900)。

  3. 省直辖县级市(河南济源、湖北潜江、海南五指山、新疆昆玉等)根据编号来看本来只能放到区级,但为了便于用户选择,所有直辖市自动添加一个同名的市级,比如: 湖北-直辖市-仙桃-*镇 调整后为 湖北-仙桃-仙桃-*镇 ,新添加数据的编号规则和第二条规则相同。

  4. 如果市、区没有下级,自动添加同名的一个城镇作为下级,编号规则和上一条规则相同,以保证数据层次的一致性(任何一个数据都能满足省市区镇4级结构,没有孤立的);比如: 福建-泉州-金门 没有镇,调整后为 福建-泉州-金门-金门 ;另外从民政部等数据源中补全的新增城市也会缺失下级,照此规则自动补齐。

  5. 台湾数据只有省市区三级没有镇级,因此镇级通过前面几条规则自动补齐;香港、澳门数据源有两级,当做直筒子市来处理,比如把香港当做东莞,从面积和人口来看还算合理,因此港澳数据中省市区三级是完全相同的,第四级镇级才有城市数据,如:香港-香港-香港-湾仔区。

  6. 地区名字是直接去掉常见的后缀进行精简的,如直接清除结尾的 市|区|县|街道办事处|XX族自治X ,数量较少并且移除会导致部分名字产生歧义的后缀并未精简。

  7. 省市区前三级数据的合并:统计局采集过来的数据会先和民政部的数据交叉对比后进行合并;由于统计局的数据明显的滞后,民政部内新添加的市、区将不会有镇级(自动补齐同名镇级);如果民政部数据存在明文撤销的市、区,那么合并的时候会删除统计局对应的数据,如: 山东-莱芜市 于2019-01撤销,并在 济南市 新加 莱芜区钢城区 ;如果统计局中的数据在民政部数据内不存在,将原样保留。高德地图行政区域会和腾讯地图行政区划数据进行交叉对比,然后择优选取需要的数据。最后(统计局+民政部)和(高德+腾讯的数据)的前三级数据进行交叉融合,得到的【省市区】 ≈ 【统计局的数据】 - 【160来个开发区、经济区、高新区、国家级新区】 - 【撤销城市】 + 【新设城市】 + 【港澳台】。

  8. 第四级镇级主要采用腾讯地图行政区划数据,综合高德和统计局的数据,和统计局的数据差异在3000个左右,占比7.5%(3000/40000),得到的【镇级】 ≈ 【腾讯地图行政区划数据】。

数据应用和更新

综合应用

库里面提供了一个在线测试的页面,提供3级或4级数据的多级选择测试,并且提供数据格式转换导出,方便转换成需要的格式。

  1. 城市数据、坐标和边界均可导入数据内使用。
  2. 城市数据因为全部有拼音,因此在选择界面显示时很容易分组和显示拼音前缀,省市区3级拼音准确度奇高,第4级稍微差点。
  3. 边界坐标可用来根据用户坐标解析出城市信息,除台湾外全部城市均能覆盖到。
  4. 库里面提供了采集源码,采集方式为浏览器控制台内执行js采集,全部自己采集也很快速,大约30分钟以内就搞定了;当然直接下载也是可以的。

更新计划

目前来看,新版的数据前3级看起来和其他大网站的区别不会太大了,并且比他们新,主要是丢弃了那160多个开发区、经济区的功劳。第4级由于直接采用的腾讯地图的数据,对照统计局的来看,区别不大,其他网站没有对比,蛮很少有提供这么深层级的,并且数据量太大也不好怎么对比出一个可信的数据。

目前更新主要看民政部,民政部有新数据放出后,会去对比一下数据是否有变化,如果没有变化就会全量更新。不过对已在使用的数据库内的老数据的更新,目前并没有什么简洁的解决方案,因为这种数据在数据库里面更新时一件很麻烦的事情。

== 完 ==


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK