图解2022年城市人口迁移趋势

  • 前言
  • 一、数据提取
    • 1、抓包解析数据
    • 2、爬取数据
  • 二、数据处理
  • 三、数据分析及展示
  • 四、结论

前言

现在已经是疫情发生后的第3个年头了,截止当前疫情已经成为一个常态化的趋势,在疫情的影响下,各个行业都在发生变化,不管是之前的教培类落幕还是当前互联网裁员大潮,都是和经济环境变化有关。不管什么时候人口都是城市发展的一个重大要素,今天我们就来看下2022年,城市人口有了哪些新的变化。今天我们就是用Python爬取人口迁移的数据,一看究竟。

一、数据提取

巧妇难为无米之炊,数据分析的主材就是数据。于是,我准备用Python爬取百度迁移。数据来源百度人口迁移大数据

爬取数据前我们先来认识下百度迁徙大数据的指标,最右侧的数据是从上海6月21日的迁出人口到各个城市的占比,例如6月21日迁出1万人,分别到苏州2.7万,占比27%,到嘉兴市8790人,占比8.79%等。
下面的折现图,表示的迁出指数,迁出指数是百度脱敏后的数据,但是横向是可以对比的,例如6月21日上海流出指数市2.33,同日重庆迁出指数是3.614,那么同日重庆迁出人口多于上海。

1、抓包解析数据

使用谷歌浏览器输入 http://qianxi.baidu.com/#/,抓包的正常流程,按F12在右边栏中找出如下的网址就是我们需要的每天的人口迁入数据了

同理我们可以找到我们需要抓的数据包:

#上海每天迁入数据
1、历史迁徙指数网址解析——迁出
http://huiyan.baidu.com/migration/historycurve.jsonp?dt=province&id=310000&type=move_out&callback=jsonp_1655998090386_5878574
上面的id=310000中id就是城市的代码了,type=move_out就是迁出了,由于这个是callback=jsonp_1655998090386_5878574这一堆是时间戳的一个换算,这里删除不耽误我们取数据所以就不管这些了
所以这个就可以直接使用爬取网站http://huiyan.baidu.com/migration/historycurve.jsonp?dt=province&id=310000&type=move_out2、每天迁徙指数网址解析——迁出城市排行
http://huiyan.baidu.com/migration/cityrank.jsonp?dt=province&id=310000&type=move_out&date=20220621&callback=jsonp_1655998090383_2252003
上面的id=310000中id就是城市的代码了,type=move_out就是迁出了,date=20220621表示日期,由于这个是callback=jsonp_1655911605037_4686874这一堆是时间戳的一个换算,这里删除不耽误我们取数据所以就不管这些了
所以可以使用“http://huiyan.baidu.com/migration/cityrank.jsonp?dt=province&id=310000&type=move_out&date=”+日期,就可以爬取每天的数据了

2、爬取数据

提取数据,提取从2022年1月至2022年6月20日的数据,逻辑如下:

# -*- coding: utf-8 -*-
import requests #导入请求模块
import json #导入json模块
import re
import pandas as pd
import numpy as np
import datetime
import time #导入时间模块def get_history_migrate_data(url,param):'''使用requests包抓取网页数据,使用get请求:param url: 网址:param param: 网址所带的参数:return: 返回迁徙数据'''html = requests.get(url,params=param)city = json.loads(re.findall(r'[(](.*?)[)]', html.text)[0])try:data_list = city['data']['list']except Exception as e:print(f'获取网址{html.url}数据失败!',f'返回内容{city}',e)#由于历史迁徙数据中list只有一个if type(data_list)==list :data = pd.DataFrame(data_list)else:data =pd.DataFrame({'date':data_list.keys(),'value':data_list.values()})return datadef get_out_city(url,param,dt_date_begin='20220101',dt_date_end='20220620'):'''通过变化日期,获取每天迁出城市排名数据:param url: 网址:param param: 网址参数:param dt_date_begin: 开始提取日期:param dt_date_end: 截止提取日期:return: 返回每天迁出城市排名数据'''param['date']=dt_date_beginlist_data =get_history_migrate_data(url,param)list_data['date'] = dt_date_beginwhile dt_date_begin < dt_date_end:#监控打印if dt_date_begin in ('20220201','20220301','20220401','20220501','20220501'):print(dt_date_begin)dt_date_begin = (datetime.datetime.strptime(dt_date_begin,'%Y%m%d') + datetime.timedelta(days=1)).strftime('%Y%m%d')param['date']=dt_date_begindata = get_history_migrate_data(url,param)data['date'] = dt_date_beginlist_data = pd.concat([list_data,data])return list_data#提取历史数据
if __name__ == "__main__":#历史迁徙数据urlcities_code = pd.read_excel(r'E:\桌面\城市编号列表.xlsx')url_history = r'http://huiyan.baidu.com/migration/historycurve.jsonp?dt=province'  #历史迁徙指数url = r'http://huiyan.baidu.com/migration/cityrank.jsonp?dt=province'              #每天迁出人口所到城市排名param = {'id':'310000',   #上海市的代码'type':'move_out', #迁出类型}                                                         #get请求参数,城市排名需要加入日期,即格式如下 'date':'20220601'data_history = []#爬取285个城市历史迁出迁入指数for code_city,city_name in zip(cities_code['城市编号'],cities_code['城市']):param['id']=code_cityparam['type']='move_out'history_out_city =get_history_migrate_data(url_history,param)history_out_city.rename(columns={'value':'迁出指数'},inplace=True)history_out_city['城市']=city_nameparam['type'] = 'move_in'history_in_city = get_history_migrate_data(url_history,param)history_in_city.rename(columns={'value': '迁入指数'}, inplace=True)data_history.append(pd.merge(history_out_city,history_in_city,how='left',on='date'))data_history_data = pd.concat(data_history,axis=0)

二、数据处理

1、数据指标理解
由于当前的数据是脱敏的数据,其中迁出城市数据是排名数据,迁徙数据是脱敏后的指数,指数可以横向及纵向对比。
由全国的迁徙指数来看,迁出等于迁入,这里假设全国来看迁出=迁入,整体规模指数是相同的,这里认为迁徙指数是同量纲的,即迁出指数和迁入指数是一个量纲的。
2、指标处理逻辑
我们假设在每天的迁徙指出指数是NjiN_j^iNji​,其中表示第iii天jjj(j=0表示迁出,j=1表示迁入),PmjiP_{mj}^iPmji​ 表示第iii天mmm城迁入迁出(j=0j=0j=0表示迁出,j=1j=1j=1迁入)指数,那么∑i=1n∑j=01Nji∗(−1)j\sum_{i=1}^n\sum_{j=0}^1N_j^i*(-1)^j∑i=1n​∑j=01​Nji​∗(−1)j表示n天内净的迁出量,∑i=1n∑j=01Nji∗Pmji∗(−1)j\sum_{i=1}^n\sum_{j=0}^1N_j^i*P_{mj}^i*(-1)^j∑i=1n​∑j=01​Nji​∗Pmji​∗(−1)j表示m城在n天内净迁出的指数,然后按照净迁出多少排名,可以计算出从上海净迁出最多的几个城市。
1)找出top10迁出迁出的城市

data_history_data['净迁出指数'] = data_history_data['迁出指数']-data_history_data['迁入指数']
#选取近一年的数据,即2021年6月1日-2022年5月31日一个整年度
data_history_data_copy = data_history_data[(pd.to_datetime(data_history_data['date'])>= pd.to_datetime('20220520')) & ( pd.to_datetime(data_history_data['date'])< pd.to_datetime('20220620')) ].copy()
top_year=data_history_data_copy.groupby('城市').agg({'净迁出指数':'sum'})
#找出净迁出top10,
top_year['净迁出指数'].nlargest(10)
#净迁入top10的城市
top_year['净迁出指数'].nsmallest(10)

2)计算深圳和上海的5月20日-6月19日的迁出城市总排名

    city_rank_list =[]for code_city,city_name in zip(['440300','310000'],['深圳市','上海市']): #深圳、上海for dt in range(31):dt_date = (datetime.datetime.strptime('20220520','%Y%m%d') + datetime.timedelta(days=dt)).strftime('%Y%m%d')param['id']=code_cityparam['type']='move_out'param['date']=dt_datedata_history_data = get_history_migrate_data(url,param)data_history_data['出发城市']=city_namedata_history_data['日期']=dt_datecity_rank_list.append(data_history_data)city_rank_list = pd.concat(city_rank_list)#计算总体排名,使用城市迁出排名*当天的迁出指数 可以计算当前迁出到某个城市的指数,在综合计算近一个月内的总迁出指数city_rank_list_zhishu = pd.merge(city_rank_list,data_history_data_copy[['城市','date','迁出指数']],how='left',left_on=['日期','出发城市'],right_on=['date','城市'])city_rank_list_zhishu['城市迁出指数'] = city_rank_list_zhishu['value']*city_rank_list_zhishu['迁出指数']/100result=city_rank_list_zhishu.groupby(['出发城市','city_name']).agg({'城市迁出指数':'sum'})#查看深圳市近一个月迁出城市排名result.xs('深圳市', axis=0, level=0)['城市迁出指数'].nlargest(10).index.to_list()result.xs('上海市',axis=0,level=0)['城市迁出指数'].nlargest(10).index.to_list()

三、数据分析及展示

1、查看近5月20日至6月20日,人口净迁出指指数top的城市

城市 净迁出指数 排名
深圳市 28.203066 1
上海市 26.699317 2
成都市 23.095789 3
郑州市 20.952043 4
北京市 12.006727 5
东莞市 11.749925 6
广州市 8.524732 7
佛山市 7.691987 8
宁波市 7.484400 9
天津市 6.617992 10

查看近1个月人口净流入top的城市

城市 净迁入指数 排名
惠州市 15.156137 1
清远市 8.619307 2
眉山市 5.504857 3
忻州市 5.303200 4
江门市 5.167022 5
南京市 5.148522 6
南宁市 5.036742 7
肇庆市 4.909475 8
商丘市 4.268344 9
济南市 4.212324 10

2、下面我们查看下近一个月内净迁出指数top10城市主要迁出城市分布
深圳迁出前十的城市分别是’东莞市’, ‘惠州市’, ‘广州市’, ‘佛山市’, ‘汕尾市’, ‘河源市’, ‘中山市’, ‘揭阳市’, ‘梅州市’, ‘珠海市’。

city_rank_list_zhishu = pd.merge(city_rank_list,data_history_data_copy[['城市','date','迁出指数']],how='left',left_on=['日期','出发城市'],right_on=['date','城市'])
city_rank_list_zhishu['城市迁出指数'] = city_rank_list_zhishu['value']*city_rank_list_zhishu['迁出指数']/100
result=city_rank_list_zhishu.groupby(['出发城市','city_name']).agg({'城市迁出指数':'sum'})
#查看深圳市近一个月迁出城市排名
shenzhen=result.xs('深圳市', axis=0, level=0)['城市迁出指数'].nlargest(10)
shanghai=result.xs('上海市',axis=0,level=0)['城市迁出指数'].nlargest(10).index.to_list()
data_1=list([(x[:-1],y) for x,y in zip(shenzhen.index.to_list(),shenzhen.to_list())])
date_2=list([('深圳',x) for x in shenzhen.index.to_list()])
#使用pyecharts来看展示图
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType
c = (Geo().add_schema(maptype="china",itemstyle_opts=opts.ItemStyleOpts( color="#323c48",border_color="#111"),).add("",data_1,type_=ChartType.EFFECT_SCATTER,color="white",).add("geo",data_2,type_=ChartType.LINES,effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=6, color="blue"),linestyle_opts=opts.LineStyleOpts(curve=0.2),).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="深圳人口迁出前十城市")))
c.render_notebook()

由于深圳迁出的城市分布在广东省,这里截取了一部分的图例

四、结论

近一个月内,净流出人口的城市主要是较大,且发生疫情的城市。说明疫情对人们的生活影响相对较大。由于百度指数处理相对麻烦,且含义相对不好理解,这里只做简单分析。有兴趣,大家可以自行分析。

图解2022年城市人口迁移趋势相关推荐

  1. 2022年四季度人力资源趋势报告

    导读: 报告显示,中国宏观经济正进入关键转折期,面临转折"四重奏".国内热门城市人才政策频出,关键人才有力支撑产业发展.目前国家重点支持产业,如工业制造.信心技术产业.电子技术/半 ...

  2. 达摩院年终预测重磅出炉:AI for Science 高居榜首,2022 十大科技趋势!

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 作为"一所探索科技未知的研究院",阿里巴巴达摩院成立至今已经四年了. 这四年来,达摩院秉持着"探索科技位置 ...

  3. 达摩院发布2022十大科技趋势!

    12月28日,阿里巴巴达摩院发布2022十大科技趋势,这是达摩院连续第四年发布前沿科技趋势预测. 刚刚,阿里巴巴达摩院发布2022十大科技趋势,这是达摩院连续第四年发布前沿科技趋势预测. 达摩院分析了 ...

  4. 达摩院2022十大科技趋势发布:人工智能将催生科研新范

    来源:ScienceAI 本文约5000字,建议阅读5分钟 近日,阿里达摩院发布了 2022 十大科技趋势,其中 AI for Science 占据了卷首位置. 一个世纪以来,数字科技的演进推动了人类 ...

  5. 达摩院年终预测出炉:2022 十大科技趋势,AI for Science 高居榜首

    作为"一所探索科技未知的研究院",阿里巴巴达摩院成立至今已经四年了. 这四年来,达摩院秉持着"探索科技位置,以人类愿景为驱动力,开展基础科学和颠覆式技术创新研究" ...

  6. 【报告分享】2022电商行业趋势报告.pdf

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 [免费下载]2022年2月份热门报告盘点 2022年中国人工智能人才培养报告.pdf 2021中国AI商业落地市 ...

  7. 【报告分享】阿里达摩院:2022十大科技趋势.pdf(附下载链接)

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 大家好,我是文文(微信号:sscbg2020),今天给大家分享阿里达摩院于2021年12月发布的报告<20 ...

  8. 【报告分享】2022十大科技趋势-达摩院.pdf(附下载链接)

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 大家好,我是文文(微信号:sscbg2020),今天给大家分享阿里达摩院于2021年12月发布的报告<20 ...

  9. 【观察】从新华三2022十大技术趋势,看数字化如何重塑未来社会

    众所周知,"数字经济"自2017年政府工作报告首次提及至今,已多次被写入政府工作报告,意味着数字经济已成为当下经济发展中的核心主线. 不仅如此,今年年初,<"十四五 ...

最新文章

  1. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据
  2. div实现半透明遮盖层
  3. 分享一个测试图片的方式
  4. Vant 1.6.11 发布,有赞轻量级移动端 Vue 组件库
  5. xml.etree ElementTree简介
  6. iOS - CALayer 绘图层
  7. 帝国CMS7.5仿《问答库》题库问答学习平台网站源码 带手机版
  8. IOS中扩展机制Category和associative
  9. 作业一——根据成绩计算出至少需要发多少奖金才能让所有的组满意。
  10. css 删除线_寻创意|线描画:树
  11. java培训韩顺平_java韩顺平视频教程
  12. ACM公约数和公倍数
  13. Configured.java
  14. 计算机网络地址设置,如何设置电脑ip地址?电脑ip地址设置图文教程
  15. 程序人生,心态变化!
  16. Inversion of Java Interview - 计算机网络篇
  17. html实现好看的照片墙
  18. 数据仓库—stg层_数据仓库(一):认识数据仓库
  19. 根据百度地图API自定义切换地图类型为卫星或普通
  20. ts(TypeScript)定义服务器返回数据类型

热门文章

  1. Java自定义注解-请求限流/防刷
  2. 电子宠物小狗-内部结构是什么?
  3. Sophos防火墙v18版本访问内部服务器或者电脑SNAT地址转换的问题解决办法
  4. 职业高一计算机试题,信息技术教师考试题库
  5. FinallShell 离线激活步骤,适用MAC/WIN
  6. 字节跳动核心竞争力到底是什么?
  7. recovery的一些开发点滴
  8. 视频教程-深度学习30天系统实训-深度学习
  9. 计算机用户号电池,笔记本电脑用户中最常问的问题是:电池的使用时间有多长?...
  10. 视频教程-规范毕业论文及精美简历排版实战-Office/WPS