数据集笔记:Telecom Shanghai Dataset

0 数据地址

📱Telecom Shanghai Dataset (kaggle.com)

1 数据描述

  • 该数据集由上海电信提供,包含超过720万条记录,记录了9481部手机通过3233个基站访问互联网的情况,时间跨度为六个月。
  • 例如,下图显示了基站的分布情况。每个节点代表中国上海的一个基站。
  • 这个数据集可以帮助研究人员评估他们在移动边缘计算主题上的解决方案,如边缘服务器部署、服务迁移、服务推荐等。

2 数据介绍

  • 电信数据集展示了6个参数,例如月份、数据、开始时间、结束时间、基站位置、手机ID。
  • 通过数据集可以找到用户的轨迹。

每15天一个表

3 python读取+可视化

3.1 读取数据

python 复制代码
import pandas as pd

data=pd.read_excel('Downloads/Telecom Shanghai Dataset/data_10.110.15.xlsx',names=['Data','start time','end time','cell station lon','cell station lat','user id'])

3.2 剔除经纬度为NaN的record

python 复制代码
data1=data.dropna()
data1

3.3 选择某一天的数据

python 复制代码
import datetime
data2=data1[(data1['start time']>=datetime.datetime(2014,10,15)) & (data1['start time']<datetime.datetime(2014,10,16))]
data2

3.4 根据user id和时间排序

python 复制代码
data2=data2.sort_values(by=['user id','start time'])
data2

3.5 停留的记录只保留第一条

3.5.1 首先确定哪些时刻在移动

记录当前位置和前一时刻的位置

python 复制代码
data2['location']=data2['cell station lon'].astype(str)+'_'+data2['cell station lat'].astype(str)
data2
python 复制代码
data2['prev_location']=data2['location'].shift(1)
data2
python 复制代码
data2['location_changed']=(data2['location']!=data2['prev_location'])
data2

3.5.2 保留当前时刻在移动的记录

python 复制代码
data3=data2[data2['location_changed']==True]
data3
python 复制代码
data3=data3[[ 'start time', 'end time', 'cell station lon',
       'cell station lat', 'user id']]
data3

3.6 保留轨迹长度大于10的轨迹

计算每一个用户id出现的次数

python 复制代码
iid=data3.groupby('user id').size().reset_index(name='count')
iid
python 复制代码
iid['count'].describe()
'''
count    2956.000000
mean        4.675237
std         4.769128
min         1.000000
25%         2.000000
50%         3.000000
75%         6.000000
max        69.000000
Name: count, dtype: float64
'''
python 复制代码
iid=iid[iid['count']>10]
iid
python 复制代码
data4=data3[data3['user id'].isin(iid['user id'])]
data4

3.7 绘制一条轨迹(使用folium)

python 复制代码
import numpy as np
tmp=data4[data4['user id']=='00a05a4f2b937fd38888c03213c4deb2'].reset_index()
tra_lst=[]
for j in range(tmp.shape[0]):
        tra_lst.append([tmp.at[j,'cell station lon'],tmp.at[j,'cell station lat']])
tra_lst=np.array(tra_lst)
m=folium.Map(location=tra_lst.mean(axis=0),zoom_start=13)
for i in tra_lst:
    folium.Marker(location=i).add_to(m)
folium.PolyLine(locations=tra_lst).add_to(m)
    
m
相关推荐
Rabitebla2 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
库玛西2 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法
小李不想当小白3 小时前
PCB结构与组成(PCB设计入门学习笔记)
经验分享·笔记·单片机·嵌入式硬件·学习·pcb工艺·pcb
hanlin034 小时前
刷题笔记:力扣第76题-最小覆盖子串
笔记·算法·leetcode
hengmeida4 小时前
楼宇控制柜标准化项目交付完整规范
大数据·网络·笔记
蒸蒸yyyyzwd4 小时前
cpp 选手秋招学习笔记 day40
笔记·八股
有范先生4 小时前
速食米饭:如何避开闷味、干硬的速食主食
笔记
长葡萄的叶子4 小时前
AI Agent 中的 Skill:从 Tool 调用到任务能力封装
笔记·skill
LuminousCPP5 小时前
Linux系统编程(二):从目录树到命令执行|路径、环境变量、alias 与文件操作入门
linux·经验分享·笔记
摇滚侠5 小时前
《Spring Boot 3:高级与架构设计》第 1 章 Bean 与 BeanDefinition 个人理解 2
java·spring boot·笔记·后端