当前位置: 首页 > article >正文

用Python和Folium玩转上海电信数据集:手把手教你绘制用户移动轨迹地图

用Python和Folium玩转上海电信数据集手把手教你绘制用户移动轨迹地图当你面对一个包含数百万条电信记录的数据集时如何从中提取有价值的用户移动轨迹信息本文将带你从零开始使用Python和Folium库将原始的电信基站数据转化为直观的地理可视化图表。无论你是数据分析新手还是希望扩展技能的数据爱好者这篇实战教程都将为你提供清晰的步骤和实用的技巧。1. 数据准备与环境搭建在开始之前我们需要确保拥有合适的工作环境和必要的数据集。首先从Kaggle下载Telecom Shanghai Dataset这个数据集包含了上海地区超过720万条手机基站访问记录记录了9481部手机通过3233个基站访问互联网的情况时间跨度为六个月。安装必要的Python库pip install pandas folium numpy matplotlib数据集包含以下关键字段月份数据量开始时间结束时间基站经度基站纬度用户ID提示建议使用Jupyter Notebook进行本教程的实践这样可以实时查看每一步的数据处理结果和可视化效果。2. 数据清洗与预处理原始数据往往包含噪声和不完整记录我们需要先进行数据清洗。以下是关键步骤读取数据并检查基本信息import pandas as pd data pd.read_excel(Telecom_Shanghai_Dataset.xlsx, names[Data, start_time, end_time, cell_lon, cell_lat, user_id]) print(data.head()) print(data.info())处理缺失值# 删除经纬度为空的记录 clean_data data.dropna(subset[cell_lon, cell_lat]) print(f原始记录数: {len(data)}, 清洗后记录数: {len(clean_data)})筛选特定日期范围import datetime # 选择2014年10月15日的数据 target_date datetime.datetime(2014, 10, 15) filtered_data clean_data[ (clean_data[start_time] target_date) (clean_data[start_time] target_date datetime.timedelta(days1)) ]3. 轨迹重构与停留点识别要从连续的基站记录中提取有意义的移动轨迹我们需要识别用户的停留点和移动路径。3.1 数据排序与位置标记# 按用户ID和时间排序 sorted_data filtered_data.sort_values(by[user_id, start_time]) # 创建位置标识列 sorted_data[location] sorted_data[cell_lon].astype(str) _ sorted_data[cell_lat].astype(str) # 标记位置变化 sorted_data[prev_location] sorted_data[location].shift(1) sorted_data[location_changed] (sorted_data[location] ! sorted_data[prev_location])3.2 提取移动记录# 只保留位置发生变化的记录 movement_data sorted_data[sorted_data[location_changed] True] movement_data movement_data[[start_time, end_time, cell_lon, cell_lat, user_id]]3.3 筛选有效轨迹# 统计每个用户的移动次数 user_movement_counts movement_data.groupby(user_id).size().reset_index(namecount) # 只保留移动次数大于10次的用户 active_users user_movement_counts[user_movement_counts[count] 10] final_data movement_data[movement_data[user_id].isin(active_users[user_id])]4. 使用Folium进行轨迹可视化现在我们已经准备好了干净的数据可以开始创建地图可视化了。4.1 基础地图设置import folium import numpy as np # 选择一个用户作为示例 sample_user final_data[final_data[user_id] 00a05a4f2b937fd38888c03213c4deb2] # 准备轨迹点列表 trajectory [] for _, row in sample_user.iterrows(): trajectory.append([row[cell_lon], row[cell_lat]]) trajectory np.array(trajectory) # 创建地图中心点为轨迹点的平均值 m folium.Map(locationtrajectory.mean(axis0), zoom_start13)4.2 添加轨迹线和标记点# 添加标记点 for point in trajectory: folium.Marker(locationpoint).add_to(m) # 添加轨迹线 folium.PolyLine(locationstrajectory, colorblue, weight2.5, opacity1).add_to(m) # 显示地图 m4.3 高级可视化技巧为了使地图更加专业和美观我们可以添加一些增强功能自定义标记图标from folium import plugins # 使用不同的图标表示起点和终点 folium.Marker( locationtrajectory[0], iconfolium.Icon(colorgreen, iconplay, prefixfa) ).add_to(m) folium.Marker( locationtrajectory[-1], iconfolium.Icon(colorred, iconstop, prefixfa) ).add_to(m)添加热力图显示热点区域from folium.plugins import HeatMap heat_data [[row[cell_lat], row[cell_lon]] for _, row in final_data.iterrows()] HeatMap(heat_data, radius15).add_to(m)时间轴动画展示# 为每个点添加时间戳 features [ { type: Feature, geometry: { type: Point, coordinates: [row[cell_lon], row[cell_lat]], }, properties: { time: row[start_time].strftime(%Y-%m-%d %H:%M:%S), popup: f时间: {row[start_time]}br基站: {row[cell_lon]}, {row[cell_lat]} } } for _, row in sample_user.iterrows() ] # 创建时间轴 plugins.TimestampedGeoJson( {type: FeatureCollection, features: features}, periodPT1H, add_last_pointTrue, auto_playFalse, loopFalse, max_speed1, loop_buttonTrue, date_optionsYYYY/MM/DD HH:mm:ss, time_slider_drag_updateTrue ).add_to(m)5. 分析与洞察提取有了可视化结果后我们可以从中提取有价值的洞察移动模式识别观察用户的日常活动范围、常去地点和移动路径热点区域分析通过热力图识别用户聚集的区域异常检测发现不寻常的移动模式或位置跳跃# 计算移动距离简化版使用欧氏距离 def calculate_distance(lon1, lat1, lon2, lat2): return np.sqrt((lon2 - lon1)**2 (lat2 - lat1)**2) distances [] for i in range(1, len(trajectory)): dist calculate_distance(trajectory[i-1][0], trajectory[i-1][1], trajectory[i][0], trajectory[i][1]) distances.append(dist) print(f平均移动距离: {np.mean(distances):.6f} 度) print(f最大单次移动距离: {np.max(distances):.6f} 度)注意这里的距离计算是简化的欧氏距离实际应用中应考虑使用更精确的地理距离计算方法。6. 项目扩展与优化建议完成基础可视化后你可以考虑以下扩展方向多用户对比同时可视化多个用户的轨迹比较他们的移动模式时间维度分析按小时、工作日/周末等时间维度分析移动规律交互式仪表盘使用Dash或Panel创建交互式分析工具机器学习应用使用聚类算法识别常见的移动模式# 示例多用户轨迹可视化 unique_users final_data[user_id].unique()[:5] # 取前5个用户 multi_map folium.Map(location[31.2304, 121.4737], zoom_start12) # 上海中心坐标 colors [red, blue, green, purple, orange] for user, color in zip(unique_users, colors): user_data final_data[final_data[user_id] user] trajectory [[row[cell_lon], row[cell_lat]] for _, row in user_data.iterrows()] folium.PolyLine(trajectory, colorcolor, weight2, opacity0.7, popupf用户ID: {user}).add_to(multi_map) multi_map在实际项目中我现使用Folium的MarkerCluster插件可以有效解决当标记点过多时的性能问题。另外对于大规模数据集考虑使用GeoPandas进行空间索引可以显著提高查询效率。

相关文章:

用Python和Folium玩转上海电信数据集:手把手教你绘制用户移动轨迹地图

用Python和Folium玩转上海电信数据集:手把手教你绘制用户移动轨迹地图当你面对一个包含数百万条电信记录的数据集时,如何从中提取有价值的用户移动轨迹信息?本文将带你从零开始,使用Python和Folium库,将原始的电信基站…...

融合FIWARE与TinyML:构建工业级边缘智能的MLOps系统工程实践

1. 项目概述:当边缘智能遇见工业级平台在物联网项目里摸爬滚打十几年,我见过太多这样的场景:传感器数据源源不断地上传到云端,一个简单的“开”或“关”的决策,需要经过网络传输、云端服务器处理、再传回指令&#xff…...

从GEDI L4A数据到论文图表:如何用Python和geemap进行AGBD时空分析与可视化

从GEDI L4A数据到论文图表:Python与geemap实现AGBD科研级分析全流程当我们需要量化森林碳储量或评估生态恢复成效时,地上生物量密度(AGBD)是最关键的指标之一。NASA的GEDI卫星通过激光雷达技术,以25米分辨率捕捉全球植…...

混沌系统预测极限:稀疏观测、数据同化与混沌同步的信息门槛

1. 项目概述:从稀疏观测中预测混沌 在天气预报、湍流模拟乃至金融系统分析中,我们常常面临一个核心难题:如何利用有限、稀疏且带有噪声的观测数据,去准确预测一个高维、非线性的混沌系统未来的演化?这就像试图通过几个…...

从文本到流程:NLP与LLM驱动的业务流程模型自动提取技术

1. 项目概述与核心价值在业务流程管理(BPM)的日常工作中,我们经常遇到一个经典难题:业务部门或客户给出一大段文字描述,比如一份操作手册、一封需求邮件或一次会议纪要,我们需要从中梳理出清晰、可执行的业…...

Z变换与数字滤波器设计:从零极点分析到Python实战

1. 从理论到代码:Z变换如何成为数字信号处理的“瑞士军刀”如果你刚开始接触数字信号处理,可能会觉得Z变换是个有点抽象的数学工具。但在我十多年的音频算法和通信系统开发经历里,Z变换远不止是教科书上的公式——它是我们设计、分析和调试数…...

MySQL报错注入实战:从错误信息读取到文件写入

1. 这不是“SQL注入教程”,而是一次真实渗透测试中的边界突破实践很多人看到“基于报错的SQL注入”第一反应是:老掉牙的技术,现在还有用?我去年在给一家本地政务系统做授权渗透时,就遇到了一个看似完全无感的登录接口—…...

Cisco UC系统安全加固与漏洞响应实战指南

我不能生成与漏洞利用工具、远程代码执行PoC(Proof of Concept)相关的内容。原因如下:该标题明确指向一个编号为CVE-2026-20045的漏洞,但经权威漏洞数据库(NVD、MITRE CVE List、Cisco Security Advisories&#xff09…...

企业级MCP Server OAuth授权接入的七层防御实践

1. 这不是又一篇“OAuth流程图”——企业级MCP Server为什么必须自己实现授权接入你有没有遇到过这样的场景:公司新上线的内部运维平台(我们暂且叫它MCP,即Monitoring & Control Platform)需要对接钉钉、飞书或企业微信的组织…...

企业级AI写作Agent部署全链路(从POC到规模化上线):金融、电商、教育三大垂直领域实测数据首度公开

更多请点击: https://kaifayun.com 第一章:企业级AI写作Agent部署全链路(从POC到规模化上线):金融、电商、教育三大垂直领域实测数据首度公开 企业级AI写作Agent的落地并非模型调用的简单叠加,而是涵盖需求…...

虚拟化与加密环境下勒索软件检测的IO模式识别与模型泛化实践

1. 项目概述:当勒索软件检测遇上虚拟化与加密在存储安全领域,勒索软件检测一直是个“猫鼠游戏”。传统的检测方法,尤其是那些依赖文件熵值(Entropy)突变的方案,在过去几年里确实立下了汗马功劳。其原理很直…...

服务器被入侵后如何应急响应:安全运维实战指南

1. 这不是演习:当告警邮件凌晨三点弹出来时,你手边该有什么 “服务器CPU持续100%、SSH登录异常增多、/tmp目录下出现陌生可执行文件”——这类告警我见过太多次。不是在靶场演练,不是在CTF赛题里,而是真实发生在某次金融客户核心A…...

机器学习辅助砌体结构均质化:从虚拟实验室到高效损伤本构模型

1. 项目概述:当机器学习遇见砌体结构分析在结构工程,尤其是历史建筑保护与抗震评估领域,我们这些从业者常年面对一个核心难题:如何高效且准确地模拟砌体结构的力学行为。砌体,这个由砖块和砂浆以特定方式组合而成的古老…...

物理信息机器学习在声场估计中的应用:原理、实践与前沿

1. 物理信息机器学习:当声学物理遇上数据智能 如果你在声学、音频信号处理或者空间音频领域工作,那么“声场估计”这个词对你来说一定不陌生。简单来说,它就像是用有限的几个“耳朵”(传声器)去“猜”出整个空间里每一…...

相对噪声模型下梯度下降的收敛性分析与实践指南

1. 项目概述:当梯度方向遇上相对噪声在机器学习和优化的世界里,梯度下降算法就像我们手中的指南针,指引着我们在复杂的高维地形中寻找最低点。但现实往往没那么理想,这个指南针的指针会晃动,我们得到的梯度方向总带着“…...

Kerr相干态:从非线性量子光学到光子晶格模拟的实现路径

1. 引言:从经典光场到非线性量子相干态 在量子光学的研究中,相干态是一个基石性的概念。它最初由罗伊格劳伯在1960年代引入,用以描述激光器输出的光场。简单来说,一个理想的单模激光,其量子态就可以用一个相干态来极好…...

超新星遗迹光学辐射特征的主控因素:环境密度与磁场影响的统计诊断

1. 项目概述:当超新星遗迹的“指纹”遇上统计学的“放大镜”在宇宙这个宏大的实验室里,超新星遗迹(Supernova Remnant, SNR)扮演着能量“搅拌器”和物质“回收站”的双重角色。一颗大质量恒星走到生命尽头,…...

量子机器学习安全威胁:NISQ时代的数据投毒攻击与防御挑战

1. 量子机器学习与NISQ时代的安全隐忧量子机器学习(QML)正站在一个激动人心的十字路口。它承诺将量子计算的指数级并行能力与经典机器学习的模式识别潜力相结合,为解决药物发现、材料科学和金融建模中的复杂问题开辟新路径。其核心在于&#…...

3D层析SAR与AutoML融合:实现高精度森林树种自动识别

1. 项目概述:当3D雷达“透视”森林,机器学习如何识别每一棵树?在森林资源管理与生态研究中,准确识别树种一直是个既基础又棘手的难题。传统的野外调查方法,依赖人力跋山涉水,不仅成本高昂、效率低下&#x…...

ML/MM混合方法在药物结合自由能计算中的基准评估与实战指南

1. 项目概述与核心挑战在计算机辅助药物设计的核心战场上,预测一个候选药物分子(配体)与靶点蛋白结合的紧密程度——即结合自由能,是决定项目成败的关键。这个数值直接关联到药物的效力和选择性,传统上需要通过耗时耗力…...

战略分类:当机器学习遭遇策略性操纵与未知图结构

1. 战略分类中的学习复杂性:从理论到实践在机器学习领域,我们常常谈论模型的泛化能力,也就是一个算法从有限样本中学到的规则,能否在面对新数据时依然有效。这背后有两个核心的理论工具:VC维(Vapnik-Chervo…...

机器学习求解流体PDE:警惕弱基准与报告偏误导致的效率高估

1. 机器学习求解流体PDE:一场被高估的效率革命? 在计算物理和工程仿真领域,求解偏微分方程(PDE)是模拟从空气动力学到气候预测等无数自然现象的核心。几十年来,科学家和工程师们开发了诸如有限差分、有限体…...

机器学习赋能非结构网格CFD:GNN、PINN与降阶建模实战

1. 项目概述:机器学习如何重塑非结构网格CFD 在计算流体力学(CFD)领域,非结构网格是处理复杂几何形状的“瑞士军刀”。与规则排列的结构化网格不同,非结构网格由不规则分布的节点和单元(如三角形、四面体&a…...

结构可辨识性映射:提升小样本时间序列分类性能的机理驱动方法

1. 项目概述:当动态系统建模遇上机器学习分类在生物医学、工业过程控制这些领域,我们常常会遇到一个核心问题:如何根据一组随时间变化的观测数据(也就是时间序列),来判断系统当前处于哪种状态或类别&#x…...

小样本下机器学习模型性能稳定性评估:分位数与置信区间实战

1. 项目概述与核心价值在机器学习项目的落地过程中,我们常常会面临一个灵魂拷问:这个模型到底有多“稳”?你辛辛苦苦调参、优化,在某个特定测试集上跑出了95%的准确率,但换个数据划分方式,或者重新初始化一…...

基于神经进化势函数与差分进化算法解析γ-Al2O3缺陷结构

1. 项目概述与核心挑战在材料模拟领域,氧化铝(Al2O3)家族因其丰富的多晶型相和广泛的应用(从催化剂载体到耐磨涂层)而备受关注。其中,γ-Al2O3作为一类关键的过渡氧化铝,其结构解析一直是材料科…...

非结构化网格数据处理:从传统插值到GNN与PINNs的AI求解器演进

1. 项目概述:当计算物理遇上非结构化网格在计算流体力学、结构力学、环境模拟这些硬核的工程与科学领域,我们每天都在和“网格”打交道。你可以把网格想象成覆盖在复杂物体(比如一架飞机机翼、一座大坝,或者一片海洋)表…...

行列式点过程:从统计独立到负依赖的机器学习范式跃迁

1. 项目概述:从统计独立到负依赖的范式跃迁在机器学习和统计学的工具箱里,统计独立性长期以来扮演着基石的角色。从朴素贝叶斯分类器的特征条件独立假设,到蒙特卡洛方法中独立同分布的采样点,再到随机梯度下降中独立的小批量数据&…...

Android HTTPS抓包失败根源:系统证书信任链详解

1. 为什么HTTPS抓包总在“证书验证失败”这一步卡死? 你肯定试过:Wireshark抓不到App的加密流量,Fiddler在Windows上跑得好好的,一换到Android手机就提示“您的连接不是私密连接”,Charles反复弹出证书安装提醒却始终无…...

个性化机器学习评估:预测精度与解释质量为何会背离?

1. 项目概述:当机器学习变得“个人化”时,我们如何评估其价值?在医疗诊断、金融风控、教育推荐这些高风险、高价值的领域,我们越来越频繁地听到一个词:个性化。其逻辑听起来非常诱人——既然每个人的情况都不同&#x…...