Python爬取所有人位置信息,制作任意区域人流量显示图

Karen110
• 阅读 1797

最近偶然看到了腾讯的大数据星云图,非常漂亮,如下图:

Python爬取所有人位置信息,制作任意区域人流量显示图

这些数据代表使用腾讯定位服务的用户实际地理位置,例如微信、QQ、腾讯地图等,所以使用量还是表达的,此图可以间接显示人流量情况

该网站还可以查看区域热力图:

Python爬取所有人位置信息,制作任意区域人流量显示图

但是只有个别区域

于是我萌生一个想法,用python任意区域人员流量图

经过不懈努力,没想到还真给实现了,下面带大家一起学习一下这一过程:

一、首先是数据获取数据获取

腾讯其实开放了数据接口,但是只能商用:

Python爬取所有人位置信息,制作任意区域人流量显示图

但是不用怕,我们还有其他办法获取

进入主页:https://xingyun.map.qq.com/

在主页抓包,获得数据接口:

Python爬取所有人位置信息,制作任意区域人流量显示图

经过分析发现,每次请求都会发送4个post请求,每次请求的参数如下:

Python爬取所有人位置信息,制作任意区域人流量显示图

Python爬取所有人位置信息,制作任意区域人流量显示图

Python爬取所有人位置信息,制作任意区域人流量显示图

Python爬取所有人位置信息,制作任意区域人流量显示图

rank值从1变化到4,咱也不知道是啥意思,索性就都爬了,大不了再去重

返回数据如下:

Python爬取所有人位置信息,制作任意区域人流量显示图

主要是locs字段,以第一组数据为例,3295代表纬度信息,11590代表经度信息,分别除100既是经纬度原始值,6代表该位置人数。

下面我们开始写写代码获取数据:

import requests  
import json  
header={  
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'}  
url = 'https://xingyun.map.qq.com/api/getXingyunPoints'  
for i in range(1,5):  
    payload = {'count': i, 'rank': 0}  
    response = requests.post(url, data=json.dumps(payload))  
    datas=json.loads(response.text)['locs']  
    datas=datas.split(',')  
    datas=[int(i) for i in datas[:-1]]  
    all_data=[]  
    a=[]  
    for n,data in enumerate(datas):  
        a.append(data)  
        all_data.append(a)  
        if (n+1)%3==0:  
            a=[]  
all_data=[[i[0]/100,i[1]/100,i[2]] for i in all_data]

将数据转换为DataFrame格式:

import pandas as pd  
lat=[float(i[0]) for i in all_data]  
long=[i[1] for i in all_data]  
weight=[i[2] for i in all_data]  
dataframe=pd.DataFrame({'纬度':lat,'经度':long,'人数':weight})  

对数据进行去重:

dataframe=dataframe.drop_duplicates(keep='first')  

有了这些坐标信息,我们可以估算一个区域人流量

pandas小知识:

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)  

subset用来指定特定的列,默认所有列;
keep="first"表示删除重复项并保留第一次出现的项,此外,keep值还可以为'last':表示保留最后一次出现的值;'false':表示所有相同的数据都删除

选定区域:

data1=dataframe[(dataframe.纬度.between(39.26,41.03)) & (dataframe.经度.between(115.25,117.30))]  

二、用folium画热力图:

import folium  
from folium.plugins import HeatMap  
map_data = data1[['纬度', '经度', '人数']].values.tolist()  
hmap = folium.Map(  
    location=[data1['纬度'].mean(), data1['经度'].mean()],  #地图中心坐标  
    control_scale=True,   
    zoom_start=13    #地图显示级别  
)  
hmap.add_child(HeatMap(map_data, radius=5, gradient={.1: 'blue',.3: 'lime', .5: 'yellow',.7:'red'}))  

Python爬取所有人位置信息,制作任意区域人流量显示图

真方!

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

Python爬取所有人位置信息,制作任意区域人流量显示图

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/YN7AfHXEHWegpYInZTT8IA,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python爬取所有人位置信息,制作任意区域人流量显示图
击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤衣裳已施行看尽,针线犹存未忍开。最近偶然看到了腾讯的大数据星云图,非常漂亮,如下图:!(https://oscimg.oschina.net/oscnet/6dc6022d4dfb49
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这