中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python展示全國高校的分布情況

發布時間:2023-04-12 09:54:53 來源:億速云 閱讀:114 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么用Python展示全國高校的分布情況”,在日常操作中,相信很多人在怎么用Python展示全國高校的分布情況問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python展示全國高校的分布情況”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

數據獲取

要展示高校的分布情況,就得先獲取全國高校的位置數據。本文的數據來源于掌上高考網

在2022年6月寫本文時,共獲取到了2822所高校的信息。檢查了數據,除了極個別空值外,整份數據是非常完整的,不影響使用。數據一共有44個字段,本文只會用幾個字段,可以不做處理,使用時按需獲取即可。

怎么用Python展示全國高校的分布情況

數據獲取方法介紹(基礎爬蟲知識):

1.注冊登錄掌上高考網。在<查學校>頁面選擇全部學校。

2.按F12鍵,點擊到 Network > Fetch/XHR,然后點擊幾次<查學校>頁面的<上一頁>、<下一頁>按鈕,在XHR的頁面會顯示訪問的API等信息。

3.將每次翻頁時的API復制出來進行對比,發現翻頁時變化的參數有兩個:page和signsafe,page為當前訪問的頁數,signsafe是一個md5值,沒法反解,但可以把前面幾次的值保存下來,后面隨機變化使用。有了這個信息,不斷改變訪問的頁數和signsafe值,就可以獲取到所有的學校數據。

Response中的numFound參數值是學校總數,除以每頁顯示的學校個數可以得到總頁數,也可以直接點擊頁面的<尾頁>查看總頁數,這樣就確定了訪問的次數。

4.因為網站需要登錄才能使用,所以還要獲取訪問時的Headers,如Request Method(此次用POST)、User-Agent等。

5.有了上面的信息,循環拼接出所有頁面的url,用requests發送請求即可獲取到所有高校的數據,然后用pandas將數據寫到excel中。

溫馨提示:獲取數據時需遵守網站的相關聲明,爬蟲代碼盡量設置一定的時間間隔,不要在訪問高峰期運行爬蟲代碼。

經緯度獲取

掌上高考網是為高考填志愿服務的網站,雖然獲取的數據有44個字段,但里面并沒有學校的經緯度。為了更好地在地圖上展示高校位置, 需要根據學校的地址獲取對應的經緯度。

本文使用百度地圖開放平臺:https://lbsyun.baidu.com/apiconsole/center#/home,可以用百度地圖的開放接口獲取地理位置的經緯度。

使用步驟為:

1.注冊登錄百度賬號,這個賬號可以是整個百度生態通用的賬號(如網盤、文庫等的賬號是通用的)。

2.登錄到百度地圖開放平臺,點擊進入<控制臺>,然后在<應用管理>中點擊<我的應用>,再點擊<創建應用>創建一個應用。應用名稱自定義,其他信息按提示和要求填寫完整,并進行實名認證,成為個人開發者。

怎么用Python展示全國高校的分布情況

3.創建應用完成后,會獲得一個應用的<訪問應用(ak)>,用這個AK值可以調用百度的API,參考代碼如下。

import requests


def baidu_api(addr):
url = "http://api.map.baidu.com/geocoding/v3/?"
params = {
"address": addr,
"output": "json",
"ak": "復制你創建的應用AK到此"
}
req = requests.get(url, params)
res = req.json()
if len(res["result"]) > 0:
loc = res["result"]["location"]
return loc
else:
print("獲取{}經緯度失敗".format(addr))
return {'lng': '', 'lat': ''}

4.成功調用百度地圖API后,讀取所有高校的位置,依次調用上面的函數,獲取所有高校的經緯度,重新寫入excel中。

import pandas as pd
import numpy as np


def get_lng_lat():
df = pd.read_excel('school.xlsx')
lng_lat = []
for row_index, row_data in df.iterrows():
addr = row_data['address']
if addr is np.nan:
addr = row_data['city_name'] + row_data['county_name']
# print(addr)
loc = baidu_api(addr.split(',')[0])
lng_lat.append(loc)
df['經緯度'] = lng_lat
df['經度'] = df['經緯度'].apply(lambda x: x['lng'])
df['緯度'] = df['經緯度'].apply(lambda x: x['lat'])
df.to_excel('school_lng_lat.xlsx')

最終數據結果如下圖:

怎么用Python展示全國高校的分布情況

個人開發者使用百度地圖開放平臺時需注意,每天有額度限制,所以調試代碼時先不要用所有數據,先用demo跑通,否則得等一天或購買額度。

怎么用Python展示全國高校的分布情況

高校位置展示

數據準備好了,接下來將他們展示到地圖上。

本文使用百度開源的數據可視化工具Echarts,Echarts為Python語言提供了pyecharts庫,使用很方便。

安裝命令:

pip install pyecharts

1.標注高校的位置

from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import GeoType
import pandas as pd

def multi_location_mark():
"""批量標注點"""
geo = Geo(init_opts=opts.InitOpts(bg_color='black', width='1600px', height='900px'))
df = pd.read_excel('school_lng_lat.xlsx')
for row_index, row_data in df.iterrows():
geo.add_coordinate(row_data['name'], row_data['經度'], row_data['緯度'])
data_pair = [(name, 2) for name in df['name']]
geo.add_schema(
maptype='china', is_roam=True, itemstyle_opts=opts.ItemStyleOpts(color='#323c48', border_color='#408080')
).add(
'', data_pair=data_pair, type_=GeoType.SCATTER, symbol='pin', symbol_size=16, color='#CC3300'
).set_series_opts(
label_opts=opts.LabelOpts(is_show=False)
).set_global_opts(
title_opts=opts.TitleOpts(title='全國高校位置標注圖', pos_left='650', pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=16))
).render('high_school_mark.html')

怎么用Python展示全國高校的分布情況

從標注結果來看,高校主要分布沿海、中部和東部,西部尤其是高海拔地區分布相對較少。

2.繪制高校分布熱力圖

from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType
import pandas as pd

def draw_location_heatmap():
"""繪制熱力圖"""
geo = Geo(init_opts=opts.InitOpts(bg_color='black', width='1600px', height='900px'))
df = pd.read_excel('school_lng_lat.xlsx')
for row_index, row_data in df.iterrows():
geo.add_coordinate(row_data['name'], row_data['經度'], row_data['緯度'])
data_pair = [(name, 2) for name in df['name']]
geo.add_schema(
maptype='china', is_roam=True, itemstyle_opts=opts.ItemStyleOpts(color='#323c48', border_color='#408080')
).add(
'', data_pair=data_pair, type_=ChartType.HEATMAP
).set_series_opts(
label_opts=opts.LabelOpts(is_show=False)
).set_global_opts(
title_opts=opts.TitleOpts(title='全國高校分布熱力圖', pos_left='650', pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=16)),
visualmap_opts=opts.VisualMapOpts()
).render('high_school_heatmap.html')

怎么用Python展示全國高校的分布情況

從熱力圖看,高校分布較集中的地方主要是沿海、北上廣、長江黃河流域,西部較多的地方只有川渝。

3.繪制按省劃分的分布密度圖

from pyecharts.charts import Map
from pyecharts import options as opts
import pandas as pd


def draw_location_density_map():
"""繪制各省高校分布密度圖"""
map = Map(init_opts=opts.InitOpts(bg_color='black', width='1200px', height='700px'))
df = pd.read_excel('school_lng_lat.xlsx')
s = df['province_name'].value_counts()
data_pair = [[province, int(s[province])] for province in s.index]
map.add(
'', data_pair=data_pair, maptype="china"
).set_global_opts(
title_opts=opts.TitleOpts(title='全國高校按省分布密度圖', pos_left='500', pos_top='70',
title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=16)),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True, pos_left='100', pos_bottom='100',textstyle_opts=opts.TextStyleOpts(color='white', font_size=16))
).render("high_school_density.html")

怎么用Python展示全國高校的分布情況

從省級分布密度圖可以看出,高校數量多的省份集中在中部和東部,尤其是北京和上海附近的幾個省。

4.211和985高校的分布情況

篩選出211和985的高校數據,再繪制一次。(代碼不重復粘貼,只需要加一行篩選代碼即可)

怎么用Python展示全國高校的分布情況

到此,關于“怎么用Python展示全國高校的分布情況”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴彦县| 潜江市| 山东省| 岗巴县| 五河县| 泊头市| 广安市| 漳浦县| 昭苏县| 正镶白旗| 得荣县| 沭阳县| 霍林郭勒市| 陇南市| 安化县| 子洲县| 贵州省| 义马市| 华容县| 错那县| 平罗县| 宣城市| 合山市| 原平市| 玉门市| 周至县| 比如县| 湛江市| 阳春市| 青田县| 敦煌市| 鄂州市| 体育| 通江县| 太和县| 房产| 当雄县| 永泰县| 特克斯县| 阳新县| 沛县|