Python爬取所有人位置信息,製作任意區域人流量顯示圖

擊上方“ Python爬蟲與數據挖掘 ”,進行關注

回覆“書籍”即可獲贈Python從入門到進階共10本電子書

衣裳已施行看盡,針線猶存未忍開。

最近偶然看到了騰訊的大數據星雲圖,非常漂亮,如下圖:

這些數據代表使用騰訊定位服務的用戶實際地理位置,例如微信、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[1for i in all_data]
weight=[i[2for 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'}))


真方!

------------------- End -------------------

往期精彩文章推薦:

歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持

想加入Python學習羣請在後臺回覆【入羣

萬水千山總是情,點個【在看】行不行

/今日留言主題/

隨便說一兩句吧~

本文分享自微信公衆號 - Python爬蟲與數據挖掘(crawler_python)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章