查看原文
其他

利用Python获取全国人口迁徙OD数据及可视化

YuanLiang Yuan的数据分析 2021-09-20

Hello大家好!今天为大家带来一篇良心硬货文章,这篇发完的话就可能会休息一段时间(因为要专心写论文了),如果有问题的话欢迎在后台私信我,大家一起交流学习。


本篇文章的主题是利用python获取全国人口迁徙的OD数据,并将其可视化,所以主要分为两个部分:一是数据的获取;二是数据的可视化。最后可能涉及一些inference,不过我作为只学过2学分城规原理和只自学了两章许学强老师《城市地理学》的业余中的业余选手,理论方面及其匮乏,对数据结果的理解可能不是很准确,还请大家不要在意。最后声明一下,本文所用的地图数据来自与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年相比,中国的人口分布、流动格局还是没有太大的变化。最后关注一下俺的故乡与第二故乡,大东百就不说了,都懂(遥想当年,东方鲁尔,再看看现在,痛心啊);反观成都,不愧是国家中心城市、dai都市,这辐射,贼6。



下面再看看疫情之后的:



26号可能由于大家还在走亲戚,政策也在适应期,流量还是没有达到低点。





后期的话,2月1号整体流动控制的非常好;随着复工复产,珠三角和长三角也逐渐动了起来,不愧是中国经济的发动机,虽然疫情还未散去,但复工复产必须抓紧,毕竟人们还是要恰饭的。



至此,本篇文章的分析就告一段落,自己未来如果有机会的话也打算深入研究一下这个,结合一些地理类的相关研究方法,争取投一篇练笔的小文章。谢谢大家的观看!感谢大家的支持,本次的文章横跨规划、交通与地理,总有一个角度适合你(起码数据方面是扎实的,解释的部分有我瞎吹的成分还请见谅)!欢迎大家转发分享!也欢迎各位老板打赏,大家的支持将化作我的动力,持续更新自己的学习成果与大家分享!谢谢!我们下期文章再见!



往期文章:

利用Python爬取轨道交通站点周边POI数据及可视化

利用Python分析TOD轨道交通站点建成环境

利用python分析多种交通方式可达圈

利用python实现地理加权回归(GWR)与网约车订单数据挖掘

利用Python对成都市POI数据进行探索性数据分析

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

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

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