基于python的百度迁徙迁入、迁出数据分析(七)

参考:【Python】基于Python的百度迁徙2——迁徙规模指数(附代码)-CSDN博客

记录于2024年8月,这篇是获取百度迁徙指数,之前我们都在讨论不同城市的迁徙比例关系,这篇我们来获取百度迁徙指数这个数据,代码整体逻辑没变,简化了一下步骤,保存结果为.xlsx,另外把代码拆分成三部分,城市尺度、省份尺度、全国尺度,为了降低读者对这个函数migration_index(FileTittle,classname,direction,CodeDict)的理解成本,需要用哪个部分直接使用即可,但是这里还是解释一下,migration_index(文件夹名称,城市级别(city/province/country),迁徙方向(in/out),城市编码字典);

城市编码第一篇有说明,只需要新建一个.py的文件 文件名叫''ChineseAdminiDivisionsDict'',把城市编码复制进去即可,另外城市编码这个文件一定要和下面运行的这个.py在同一个目录下面,城市编码说明:

基于python的百度迁徙迁入、迁出数据分析(一)_百度迁徙数据怎么爬取-CSDN博客

完整代码#运行环境 Python 3.11(城市尺度版)

import requests  # 导入请求模块
import json  # 导入JSON解析模块
import time  # 导入时间模块
import xlsxwriter  # 导入Excel文件操作模块
from ChineseAdminiDivisionsDict import CitiesCode, ProvinceCode  # 导入中国行政区划字典def write_header(worksheet, cities):worksheet.write(0, 0, '城市代码')  # 写入城市代码标题worksheet.write(0, 1, '城市')  # 写入城市名称标题cities_order = {}  # 存放城市序号的字典for idx, (city_name, code) in enumerate(cities.items(), start=1):worksheet.write(idx, 0, str(code))  # 写入城市代码worksheet.write(idx, 1, str(city_name))  # 写入城市名称cities_order[str(city_name)] = idx  # 记录城市序号return cities_orderdef fetch_migration_data(url):try:response = requests.get(url, timeout=2)  # 发送HTTP请求time.sleep(3)  # 等待3秒以避免频繁访问raw_data = response.text[4:-1]  # 去除响应文本的首尾非数据字符data_dict = json.loads(raw_data)  # 解析JSON数据if data_dict['errmsg'] == 'SUCCESS':return data_dict['data']['list']  # 返回成功数据else:print('Error fetching data:', data_dict['errmsg'])  # 打印错误信息return Noneexcept Exception as e:print(f"An error occurred: {e}")  # 打印异常信息return Nonedef migration_index(file_title, class_name, direction, code_dict):direction_name = '迁入' if direction == 'in' else '迁出'  # 根据方向设置标题file_path = f'{file_title} {direction_name}规模指数.xlsx'workbook = xlsxwriter.Workbook(file_path)  # 创建Excel工作簿worksheet = workbook.add_worksheet('Sheet')  # 添加工作表cities_order = write_header(worksheet, code_dict)  # 写入头部信息并获取城市序号字典for area, code in code_dict.items():url = f'http://huiyan.baidu.com/migration/historycurve.jsonp?dt={class_name}&id={code}&type=move_{direction}'print(f'{area}: {url}')  # 输出正在处理的城市及URLdata = fetch_migration_data(url)  # 获取迁移数据if data:counter_date = 2  # 用于记录日期的位置dates = sorted(data.keys())  # 排序日期for date in dates:index = data[date]  # 获取某天的迁移规模指数worksheet.write(0, counter_date, float(date))  # 写入日期worksheet.write(cities_order[str(area)], counter_date, float(index))  # 写入迁移规模指数counter_date += 1  # 移动到下一个日期列workbook.close()  # 关闭工作簿if __name__ == "__main__":migration_index('城市', 'city', 'in', CitiesCode)  # 处理迁入数据migration_index('城市', 'city', 'out', CitiesCode)  # 处理迁出数据print('全部完成')  # 完成提示

输出结果展示:

完整代码#运行环境 Python 3.11(省份尺度版)

import requests  # 导入请求模块
import json  # 导入JSON解析模块
import time  # 导入时间模块
import xlsxwriter  # 导入Excel文件操作模块
from ChineseAdminiDivisionsDict import CitiesCode, ProvinceCode  # 导入中国行政区划字典def write_header(worksheet, cities):worksheet.write(0, 0, '城市代码')  # 写入城市代码标题worksheet.write(0, 1, '城市')  # 写入城市名称标题cities_order = {}  # 存放城市序号的字典for idx, (city_name, code) in enumerate(cities.items(), start=1):worksheet.write(idx, 0, str(code))  # 写入城市代码worksheet.write(idx, 1, str(city_name))  # 写入城市名称cities_order[str(city_name)] = idx  # 记录城市序号return cities_orderdef fetch_migration_data(url):try:response = requests.get(url, timeout=2)  # 发送HTTP请求time.sleep(3)  # 等待3秒以避免频繁访问raw_data = response.text[4:-1]  # 去除响应文本的首尾非数据字符data_dict = json.loads(raw_data)  # 解析JSON数据if data_dict['errmsg'] == 'SUCCESS':return data_dict['data']['list']  # 返回成功数据else:print('Error fetching data:', data_dict['errmsg'])  # 打印错误信息return Noneexcept Exception as e:print(f"An error occurred: {e}")  # 打印异常信息return Nonedef migration_index(file_title, class_name, direction, code_dict):direction_name = '迁入' if direction == 'in' else '迁出'  # 根据方向设置标题file_path = f'{file_title} {direction_name}规模指数.xlsx'workbook = xlsxwriter.Workbook(file_path)  # 创建Excel工作簿worksheet = workbook.add_worksheet('Sheet')  # 添加工作表cities_order = write_header(worksheet, code_dict)  # 写入头部信息并获取城市序号字典for area, code in code_dict.items():url = f'http://huiyan.baidu.com/migration/historycurve.jsonp?dt={class_name}&id={code}&type=move_{direction}'print(f'{area}: {url}')  # 输出正在处理的城市及URLdata = fetch_migration_data(url)  # 获取迁移数据if data:counter_date = 2  # 用于记录日期的位置dates = sorted(data.keys())  # 排序日期for date in dates:index = data[date]  # 获取某天的迁移规模指数worksheet.write(0, counter_date, float(date))  # 写入日期worksheet.write(cities_order[str(area)], counter_date, float(index))  # 写入迁移规模指数counter_date += 1  # 移动到下一个日期列workbook.close()  # 关闭工作簿if __name__ == "__main__":migration_index('省份', 'province', 'in', ProvinceCode)  # 处理迁入数据migration_index('省份', 'province', 'out', ProvinceCode)  # 处理迁出数据print('全部完成')  # 完成提示

输出结果展示:

完整代码#运行环境 Python 3.11(全国尺度版)

import requests  # 导入请求模块
import json  # 导入JSON解析模块
import time  # 导入时间模块
import xlsxwriter  # 导入Excel文件操作模块
from ChineseAdminiDivisionsDict import CitiesCode, ProvinceCode  # 导入中国行政区划字典def write_header(worksheet, cities):worksheet.write(0, 0, '城市代码')  # 写入城市代码标题worksheet.write(0, 1, '城市')  # 写入城市名称标题cities_order = {}  # 存放城市序号的字典for idx, (city_name, code) in enumerate(cities.items(), start=1):worksheet.write(idx, 0, str(code))  # 写入城市代码worksheet.write(idx, 1, str(city_name))  # 写入城市名称cities_order[str(city_name)] = idx  # 记录城市序号return cities_orderdef fetch_migration_data(url):try:response = requests.get(url, timeout=2)  # 发送HTTP请求time.sleep(3)  # 等待3秒以避免频繁访问raw_data = response.text[4:-1]  # 去除响应文本的首尾非数据字符data_dict = json.loads(raw_data)  # 解析JSON数据if data_dict['errmsg'] == 'SUCCESS':return data_dict['data']['list']  # 返回成功数据else:print('Error fetching data:', data_dict['errmsg'])  # 打印错误信息return Noneexcept Exception as e:print(f"An error occurred: {e}")  # 打印异常信息return Nonedef migration_index(file_title, class_name, direction, code_dict):direction_name = '迁入' if direction == 'in' else '迁出'  # 根据方向设置标题file_path = f'{file_title} {direction_name}规模指数.xlsx'workbook = xlsxwriter.Workbook(file_path)  # 创建Excel工作簿worksheet = workbook.add_worksheet('Sheet')  # 添加工作表cities_order = write_header(worksheet, code_dict)  # 写入头部信息并获取城市序号字典for area, code in code_dict.items():url = f'http://huiyan.baidu.com/migration/historycurve.jsonp?dt={class_name}&id={code}&type=move_{direction}'print(f'{area}: {url}')  # 输出正在处理的城市及URLdata = fetch_migration_data(url)  # 获取迁移数据if data:counter_date = 2  # 用于记录日期的位置dates = sorted(data.keys())  # 排序日期for date in dates:index = data[date]  # 获取某天的迁移规模指数worksheet.write(0, counter_date, float(date))  # 写入日期worksheet.write(cities_order[str(area)], counter_date, float(index))  # 写入迁移规模指数counter_date += 1  # 移动到下一个日期列workbook.close()  # 关闭工作簿QUANGUO = {'全国': 0}  # 全国编码if __name__ == "__main__":migration_index('全国', 'country', 'in', QUANGUO)  # 处理全国迁入数据migration_index('全国', 'country', 'out', QUANGUO)  # 处理全国迁出数据print('全部完成')

输出结果展示:

三个尺度的版本都在这里了,需要哪个尺度的直接用即可,另外这个数据是获取的是百度迁徙数据库有的所有历史数据,数据范围(20190112, 20190309),(20230104, 20230506),(20240123, 20240807(也就是截止数据获取日期前一天));

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395348.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职场要懂“3不急”,否则走不远

在职场中,我们经常会遇到各种各样的人和事,有的同事能够得到领导的重视和喜爱,有的则始终处于“不温不火”的状态,这其中到底是什么原因导致的呢? 其实,很大一部分原因是因为在工作中犯了一些“急于表现”…

Vue - progressive-image 渐进式图片加载(Vue2)

Vue - progressive-image 渐进式图片加载(Vue2) 在追求高分辨率图片的网页中,其图片加载速度影响着用户的体验,特别在低网速加载慢的情况下,简单的图片加载图标无法满足用户需求,progressive-image实现了渐…

硬盘文件数据销毁|文件销毁|硬盘销毁|数据销毁|中国成就的伟大与数据安全在新时代国家安全中的关键作用

在当今世界,中国的发展成就举世瞩目,但令人惊讶的是,大多数人可能并未充分意识到其伟大之处。与此同时,数据安全作为国家安全的重要组成部分,其重要性在新时代愈发凸显。 二、中国取得的伟大成就 中国在经济领域的崛起…

mp4视频声音小怎么增强放大?全网视频声音增强放大的方法汇总

在观看或编辑MP4视频时,声音作为传递情感、信息和氛围的关键元素,其质量往往直接决定了观众的沉浸感和内容的表达效果。然而,不少时候,我们可能会遇到视频声音过小的情况,这可能是由于录制时环境噪音干扰、设备收音不佳…

学懂C++ (二十一):高级教程——深入C++多线程开发详解

C多线程开发详解 多线程编程是现代应用程序开发中不可或缺的一部分。C11引入了对多线程的支持,使得程序员能够更方便地利用多核处理器,提高程序的性能和响应能力。本文将全面而深入地探讨C的多线程相关概念,包括线程的创建与管理、互斥量…

Android Fragment:详解,结合真实开发场景Navigation

目录 1)Fragment是什么 2)Fragment的应用场景 3)为什么使用Fragment? 4)Fragment如何使用 5)Fragment的生命周期 6)Android开发,建议是多个activity,还是activity结合fragment&…

免费【2024】springboot 二手图书交易系统的设计与实现

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

Llama 3.1用了1.6万个英伟达H100 GPU,耗费......

目录 Llama 3.1发布简介 Llama 3.1模型规模与训练 大模型企业发展面临的问题与困境 算力和能耗算力方面 数据和资金方面 技术和人才方面 Llama 3.1发布简介 当地时间 2024年 7月 23号,Meta 公司发布了迄今为止最强大的开源 AI 模型 Llama 3.1。该模型不仅规模…

Java二十三种设计模式-享元模式(12/23)

享元模式:高效管理大量对象的设计模式 引言 在软件开发中,有时需要处理大量相似或重复的对象,这可能导致内存使用效率低下和性能问题。享元模式提供了一种解决方案,通过共享对象的共同部分来减少内存占用。 基础知识&#xff0c…

谷粒商城实战笔记-145-性能压测-性能监控-jvisualvm使用-解决插件不能安装

文章目录 jvisualvm的作用安装查看gc相关信息的插件解决jvisualvm不能正常安装插件的问题1,查看java版本2,打开网址3,修改jvisualvm的设置 jvisualvm的作用 JVisualVM是一个集成在Java Development Kit (JDK) 中的多功能工具,它提…

LLMOps — 使用 BentoML 为 Llama-3 模型提供服务

使用 BentoML 和 Runpod 快速设置 LLM API 经常看到数据科学家对 LLM 的开发感兴趣,包括模型架构、训练技术或数据收集。然而,我注意到,很多时候,除了理论方面,许多人在以用户实际使用的方式提供这些模型时遇到了问题…

【C++】—— 类与对象(三)

【C】—— 类与对象(三) 4、拷贝构造函数4.1、初识拷贝构造4.1.1、为什么要传引用4.1.2、引用尽量加上 const 4.2、深入拷贝构造4.2.1、为什么要自己实现拷贝构造4.2.2、传值返回先调用拷贝构造的原因4.2.3、躺赢的 MyQueue4.2.4、传值返回与引用返回 4.…

世界500强排行榜公布 中国互联网企业表现突出

在2024年8月5日,《财富》杂志公布了最新的全球500强企业排行榜。 这些公司的总营收接近41万亿美元,占到了全球GDP的三分之一,其净利润同比增长2.3%,总计约2.97万亿美元。 中国有133家公司入选这一榜单,以11万亿美元的…

SpringMVC学习笔记---带你快速入门和复习

一、初识SpringMVC 1.1、什么是SpringMVC 1.1.1、什么是MVC MVC是一种软件架构模式(是一种软件架构设计思想,不止Java开发中用到,其它语言也需要用到),它将应用分为三块: M:Model&#xff0…

数学建模--蒙特卡洛算法之电子管更换刀片寿命问题

目录 1.电子管问题重述 2.电子管问题分析 3.电子管问题求解 4.刀片问题重述 5.刀片问题分析 6.刀片问题求解 1.电子管问题重述 某设备上安装有4只型号规格完全相同的电子管,已知电子管寿命服从100~200h之间的均匀分布. 只要有一个电子管…

在线办公小程序的设计

管理员账户功能包括:系统首页,个人中心,通知公告管理,员工管理,部门信息管理,职位信息管理,会议记录管理,待办事项管理,系统管理 微信端账号功能包括:系统首…

Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在Android中,可以通过以下步骤获取图片的经纬度信息以及根据这些经纬度信息获取对应的地点名称。这里主要涉及两部分:从…

从0开始搭建vue + flask 旅游景点数据分析系统(七):可视化前后端对接实现

这一期继续编写flask后端,并且完成echarts折线图、柱状图和饼图的对接。 1 新增一些依赖 pip install Flask-SQLAlchemy Flask-Marshmallow pymysql修改 init.py文件,下面给出完整代码: from flask import Flask from flask_sqlalchemy im…

leetcode70_爬楼梯

思路 动态规划 爬到第n阶楼梯的方法数为&#xff1a;第n-1阶楼梯的方法数 第n-2阶楼梯的方法数 func climbStairs(n int) int {if n < 2 {return 1}dp : make([]int, n1)dp[1] 1dp[2] 2for i:3; i<n; i {dp[i] dp[i-1] dp[i-2]}return dp[n] }

Kubernetes中的PV)和 PVC深度剖析

在容器化的世界里&#xff0c;持久化存储一直是一个重要且复杂的问题。Kubernetes&#xff08;以下简称K8s&#xff09;为了解决容器中的数据持久化问题&#xff0c;提出了Persistent Volume&#xff08;PV&#xff09;和Persistent Volume Claim&#xff08;PVC&#xff09;这…