干货分享 | 利用Python获取全国人口迁徙OD数据及可视化
The following article is from Yuan的数据分析 Author YuanLiang
本文的主题是利用python获取全国人口迁徙的OD数据,并将其可视化,所以主要分为两个部分:一是数据的获取;二是数据的可视化。可能涉及一些inference。声明,本文所用的地图数据来自与aliyun的api,如果有什么问题请找aliyun,与作者无关,话不多说,我们下面开始介绍。
01. 百度迁徙及数据获取
关于百度迁徙,因为这次疫情,机缘巧合之下我了解到百度竟然还有这样一个产品(百度搜索百度迁徙即可)。总体概括一下就是,百度根据百度app用户的数据,搞了一个网站,上面包括了推算出来的全国各个城市、省份之间的迁徙数据,十分详细。具体长这样:
数据大概分为三个方面:迁入、迁出和城内出行强度。迁入和迁出包括两大部分:迁徙指数和来源地(目的地)排名,其中迁徙指数反映了迁徙的人数,是可以横向对比的。这样的话,我们就可以通过迁徙指数和排名,算出一个无量纲城市之间的迁徙指数,代表OD对之间的流量,用来做可视化分析。同时,百度迁徙这个网站十分的良心,我们直接可以抓包json,解析一下即可,我抓取了所有的数据,具体长这样:
迁徙指数:
城市排名:
此外还有城市级别的、市内出行强度今年去年同期对比数据等等,太多了我就不展示了,大家有兴趣的话欢迎后台私信我与我联系。
02. 数据的可视化
现在,我们数据有了,下面就要开始可视化。具体的思路是:先计算出所有城市之间的迁徙指数,然后获取每个城市形心的坐标,然后对每一个OD pair进行循环,每次循环画一条od线,OD线的宽度为流量,具体代码如下(这次加上了水印,大家做汇报或者做作业用我的图我不反对,但还是通知我一下比较好,至少也要说一下是我公众号上的吧
def plot_od(od,date):
fig,ax = plt.subplots(figsize=(12,12))
province_map.plot(ax=ax,facecolor='none',edgecolor='black',linewidth=0.2)
bound.plot(ax=ax,facecolor='none',edgecolor='black',linewidth=1)
plt.ylim(1900000,7300000)
right_inset_ax = fig.add_axes([0.75745, 0.226, 0.12, 0.12])
province_map.plot(ax=right_inset_ax,facecolor='none',edgecolor='black',linewidth=0.4)
right_inset_ax.set_ylim(100000,2800000)
right_inset_ax.set_xlim(11800000,13700000)
ax.axis('off')
right_inset_ax.xaxis.set_major_locator(plt.NullLocator())
right_inset_ax.yaxis.set_major_locator(plt.NullLocator())
for i in od.index:
ax.plot([od.loc[i,'origin_x'],od.loc[i,'destination_x']],[od.loc[i,'origin_y'],od.loc[i,'destination_y']],linewidth=od.loc[i,'flow']*0.8,color='red',alpha=0.7)
ax.text(10000000,4400000,'公众号:Yuan的数据分析',fontsize=30,alpha=0.32)
ax.set_title('{}全国人口迁徙OD(省级) 数据来源:百度迁徙'.format(date),fontsize=20)
plt.savefig('./省级od动态变化gif/{}全国人口迁徙OD(省级)水印.jpg'.format(date),dpi=300,bbox_inches='tight')
plt.show()
这样我们便能画出指定日期的OD图了,先看看按照省份(港澳台数据缺失)集计的OD:
嘎嘎,1.5号的OD就画出来了,可以看出,由于大家还在上班没有放假,所以全国并没有哪个地区的流量特别的大,(除了北京和河北,OD线贼粗,我估计是很多住到河北的人通勤所致)。
然后,我们看看春运的:
这个春运确实给力,大家都要回家过年,其中20号(腊月26左右)人流最大,可以看出,我国现在的几大地区内部的联系还是非常密切的:以广东为大哥的珠三角,带着广西、江西和湖南三个小弟;以上海为大哥的长三角,与江苏、浙江和安徽形成强大的互动;京津冀就不用说了;作为俺的第二故乡,成渝的联系也比较紧密,有老四的架势,未来可期;河南和湖北的话,混的比较开,跟谁都能勾搭上,九省通衢实至名归;至于我的hometown 大东百,算了不说了,看着几条小细线,都懂
值得注意的是,23号起武汉开始封城,随后全国各地也陆续开始封城,整个国家投入到抗击新冠的战斗中去,中国人民以极大的勇气与毅力与病毒斗争,其中最重要的一步就是控制人口的流动,避免病毒的传播,下面我们来看看1.23以后的迁徙状况:
显而易见,由于封城措施的强力实施,各省之间人口的流动降到了最低,31号几乎没有线与湖北相连了,事实上正是由于强有力的应对措施,我们国家的抗疫才能取得今天的成绩。
后期的话,直到现在,各省之间的人口流动也始终维持在一个较低的水平,要想恢复正常的运转(比如达到1.5号的水平),还是需要很长的时间。
最后做一个gif,动态展示一下从1.1至3.30号省级OD的变化情况:
看到这里,大家肯定大饱眼福了吧,不过还没完!省级的集计数据缺失了省内人口流动的信息(突然想起了位空间与流空间的概念),如果想更全面地了解mobility,更细粒度的分析必不可少,于是我同样用上面的方法画出了全国所有城市之间的OD图:
以上是在疫情之前的城市级迁徙OD,可以看出,各省还是以省会为中心向省内地区辐射,全国层面的话还是京津冀、长三角、珠三角的流量最大,其中珠三角似乎最具影响力,几乎辐射了整个华南地区;还有一点比较有意思,几乎所有大规模的流动都集中在胡焕庸线(蓝线)以东,即便在交通与科技如此发达的现在,与100年相比,中国的人口分布、流动格局还是没有太大的变化。最后关注一下俺的故乡与第二故乡,大东百就不说了,都懂(遥想当年,东方鲁尔,再看看现在,痛心啊)
下面再看看疫情之后的:
26号可能由于大家还在走亲戚,政策也在适应期,流量还是没有达到低点。
后期的话,2月1号整体流动控制的非常好;随着复工复产,珠三角和长三角也逐渐动了起来,不愧是中国经济的发动机,虽然疫情还未散去,但复工复产必须抓紧,毕竟人们还是要恰饭的。
经作者授权转载
文章仅代表作者观点,与本公众号无关,版权归原作者所有
原文标题:利用Python获取全国人口迁徙OD数据及可视化
责任编辑:魏雪馨
审编:鲁嘉颐
终审:顾伟男 田巍 梁龙武
猜你喜欢
1. 招贤纳士 | 临沂大学资源环境学院2020年高层次人才招聘
邮箱:gpuc_xmt2020@163.com
注明 “微信投稿” 字样
都看到这里了,点个【在看】再走呗~