Pythonはすべての人の位置情報をクロールし、任意の地域の人の流れの表示マップを作成します

上の「Pythonクローラーとデータマイニング」をクリックしてフォローしてください

Books」に返信すると、初心者から上級者まで、合計10冊のPythonの電子書籍を受け取ることができます。

鶏肉

スープ

服は処刑されましたが、針と糸はまだ耐えられません。

私は最近、以下に示すように、非常に美しいTencentのビッグデータ星雲マップに出くわしました。

これらのデータは、WeChat、QQ、Tencent MapsなどのTencentの位置情報サービスを使用しているユーザーの実際の地理的位置を表しているため、使用状況は引き続き表現されます。このグラフは、間接的に人々の流れを示すことができます。

このサイトでは、地域のヒートマップも表示できます。

しかし、ほんの少しの領域

そこで、Pythonを使用してあらゆる地域の人々の流れをマッピングするというアイデアを思いつきました。

絶え間ない努力の末、私はそれが実現することを期待していませんでした。みんなでこのプロセスを一緒に学んでみましょう。

1つは、データ収集データ収集です。

実際、Tencentはデータインターフェイスを開放しましたが、商用でのみ使用できます。

しかし、恐れることはありません。他の方法で入手できます。

ホームページに入る:https://xingyun.map.qq.com/

ホームページでパケットをキャプチャし、データインターフェイスを取得します。

分析の結果、リクエストごとに4つのポストリクエストが送信されることがわかりました。各リクエストのパラメータは次のとおりです。

ランク値が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')

これらの座標情報を使用して、地域内の人々の流れを推定できます。

パンダの知識が少ない:

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

サブセットは、特定の列を指定し、デフォルトですべての列を指定するために使用されます
。keep= "first"は、重複を削除して最初の出現を保持することを意味します。さらに、keep値は 'last'にすることもできます。値の最後の出現を保持します。 false ':同じデータがすべて削除されることを意味します

選択したエリア:

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

2.葉を使用してヒートマップを描画します。

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学習グループに参加したい場合は、バックグラウンドで返信してください[グループに参加]

何千もの川や山がいつも恋をしています。[見る]をクリックしください。

/本日のメッセージトピック/

一言か二言言ってください〜

おすすめ

転載: blog.csdn.net/pdcfighting/article/details/113409534