用Python和用户实际地理位置,做任意区域人员流量图[Python基础]

python

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章来源于python数据分析之禅 ,作者小dull鸟

Python爬虫、数据分析、网站开发等案例教程视频免费在线观看

https://space.bilibili.com/523606542

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

 

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

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

 

但是只有个别区域

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

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

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

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

 

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

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

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

 

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

 

 

 

 

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

返回数据如下:

 

主要是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和用户实际地理位置,做任意区域人员流量图[Python基础] 的全部内容, 来源链接: utcz.com/z/531038.html

回到顶部