查看原文
其他

【数据分享·教程】20分钟做一个中国城市经济联系图

数读菌 数读城事 2021-09-21

大概是在一年前吧==我写了一篇很水的“中国的城市联系网络”=。=就是前几天又发了一次的那个玩意(第一次发是在2019年3月31日,还真是一年==)

【城事数说】中国的城市联系网络 2020-03-24

一年前的文末留了一个flag

这个“下一期”就隔了一年==我认错,我去关禁闭=。=

不管怎样--该来的还是来了不是嘛~(真是厚颜无耻之人啊这个小编)

一 准备数据

由于这个简化的联系模型是基于所谓的“城市引力模型”,不管你信不信,反正我今天用的就是它。首先你需要有“城市GDP”或者“城市常住人口”的数据。比如我整理的下面这个(没有怎么办,我分享啊~数据2017年,自己整理的地市尺度的常住人口和GDP,坐标为WGS84,不保证正确,仅作为练习勿挪作他用

2017年常住人口空间分布图

2017年GDP空间分布图
由于我们做个经济联系图,那么我们就选择GDP来做。先要把面转为点(这边有所简化,因为面转点在中心,其实“城市”并不在市域中心,但是先不考虑这个)。
需要用到的工具叫做【要素转点】:依次打开【数据管理工具】—【要素】—【要素转点】,建议勾选“内部”,这样生成的点可以控制在市域范围内。点击确定生成点要素。

生成的点要素的字段与原来的面要素应该是一样的。

2017年GDP空间分布图(点)
现在我们要给每个点添加经纬度的属性,为什么一会再说。
使用【添加XY坐标】工具,依次打开【数据管理工具】—【要素】—【添加XY坐标】。添加的“POINT_X”是经度,“ POINT_Y”是纬度(当坐标系是WGS84的情况下)


二 构建两两联系矩阵

所谓的两两联系矩阵,就是“A—B”这样的情况下的城市相关关系,直接看个图就明白了:

但是呢==我是不知道ArcGIS中怎么实现这玩意。因此需要把这个换个形式:

那么我们来说操作,怎么能形成上面的表格?我们现在有的是350多个城市各自的数据,要如何形成两两对应的关系呢?
先要把“城市数据点”导出为可编辑的CSV文件:

然后用excel打开刚刚生成的csv文件,如果出现乱码的话,建议用记事本打开,另存的时候ANSI编码。现在有369个城市,需要复制369次,当然不是说手动复制,是有技巧的。先选中第2行到第370行,“CTRL+C”复制;使用“CTRL+G”定位,输入“371:136162”;然后“CTRL+V”黏贴,就一次性黏贴完了;最后看一下,一共136162行,除去表头行就是136161行,相当于369个城市,每个出现了369次。之前的“371:136162”意思是从371行开始选中到136162行。‍

我们现在做好了一半,还剩一半的数据需要“创造”。首先把现有的表头改成“起点XX”的格式,然后照着下面,全复制到右侧,筛选后排序(仅排序新粘贴的数据),然后修改表头,完事。点击保存。


三 创建联系线

在ArcGIS中添加CSV文件,并导出至文件地理库中,成为“文件和个人地理数据库表”,之所以要到文件地理库中,是因为==在库里面字段的名称不受三个字符的限制,比较清楚。导出后检查下数量有没有问题,没问题的话是136161条数据。
添加一个双精度字段“乘积”,使用【字段计算器】为其赋值:起点GDP*终点GDP
使用【XY转线】工具:依次打开【数据管理工具】—【要素】—【XY转线】,如下设置:

线类型那边,选择“GEODESIC”的话,出来的效果就是有一定弧度,别的也可以自己试一下。结果要等一阵子==毕竟数据不少。
我没猜错的话==生成的结果就是一大陀==就像这下面的样子,不要管他,直接关了它的图层,卡的要命==打开它的属性表进行操作。

我们可以新建一个双精度字段“长度”,使用【计算几何】来计算长度,计算的时候坐标系建议选择投影坐标系,我使用的是数据框的坐标系“Krasovsky 1940 Albers”,单位就选择千米吧。
打开编辑器,选中长度为0的线段,删除后保存编辑。这一步是为了筛选掉“A—A”这样的自己与自己联系的城市,如果之前操作没问题的话,筛选掉的数量为369,筛选后还剩的线段数量为135792。
然后新建一个双精度字段“联系度”,计算值:[乘积] /( [长度] * [长度])
也就是根据公式(这边暂且选取的k为1):

现在还有最后一步,因为之前的操作中“A—B”“B—A”其实是一致的,所以,需要通过融合来减少重复的线。
融合前的要素一共135792条,理论上因为每一个城市组合都有两条,所以融合后的数据量理应为67896条。我才疏学浅不知道为什么使用双精度字段融合达不到预期,所以新建了一个长整型字段“长整型厘米”,计算其长度(以厘米为单位),不用毫米是因为超出了字段限制。
使用【融合】工具,以“长整型厘米”为融合字段,统计字段为“联系度”,统计类型可以选择“MEAN”,不过因为是一样的值,选什么也没差别。(这一步也会花比较多的时间,建议点开新番看一集=。=或者看三个鬼畜视频也行,另外要在电脑旁常备可乐和薯片,不想干活了可以肥宅快乐一下==比如我现在这样)融合设置的时候,“创建多部件要素”前的勾建议不要打上。
最后出来的结果为67898条数据,多了两条不知道为啥==先不管了,删除一些“联系度”为0的线段(0是因为这里原本就没数据),最后的结果就像下面这样(这是个动的很慢的动图,在你以为他停止的时候,它还会继续动==):

城市联系(所有城市间)
所有城市的联系线都放上会==emmmm,我们试着只放前20%联系度的线条在图上,也就是大概1万3千条左右的数据,或者使用属性选择联系度大于10的线段,差不多也是1万多条。根据联系度的数值可以分区间用颜色表示,分类的时候如果提示采样数达到最大可以像下面这样调整:

继续看一下选择联系度大于10的线段后的效果:

城市联系(前1W的联系度)
接下来就是一些自己的调整了,不详细说了。比如我最后选择的效果是前50%的线:

城市联系(前50%的联系度)

今天会分享一些练习数据。主要还是城市统计数据的要素文件,包括了2017年末的常住人口和GDP,还有一些结果文件。

后台回复“城市联系”四个字。数据是我自己整理的,主要是城市统计年鉴和各省市的统计年鉴,城市统计年鉴中的数据也就290个左右,剩下的是省市统计年鉴的补充,整理过的人也知道其中的麻烦,所以获取数据有套路,也不保证正确,请自行检查。
文件有点大--我也不知道为啥

END>

使用关键词搜索历史文章请点击【阅读原文

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存