前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
以下文章來源于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=https://www.cnblogs.com/hhh188764/p/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'}))
真方!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247950.html
標籤:Python
