這篇文章主要介紹“怎么用Python展示全國高校的分布情況”,在日常操作中,相信很多人在怎么用Python展示全國高校的分布情況問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python展示全國高校的分布情況”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了網(wǎng)站設(shè)計制作、成都網(wǎng)站制作服務(wù),以良好的商業(yè)信譽,完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。
要展示高校的分布情況,就得先獲取全國高校的位置數(shù)據(jù)。本文的數(shù)據(jù)來源于掌上高考網(wǎng)
在2022年6月寫本文時,共獲取到了2822所高校的信息。檢查了數(shù)據(jù),除了極個別空值外,整份數(shù)據(jù)是非常完整的,不影響使用。數(shù)據(jù)一共有44個字段,本文只會用幾個字段,可以不做處理,使用時按需獲取即可。
數(shù)據(jù)獲取方法介紹(基礎(chǔ)爬蟲知識):
1.注冊登錄掌上高考網(wǎng)。在<查學(xué)校>頁面選擇全部學(xué)校。
2.按F12鍵,點擊到 Network > Fetch/XHR,然后點擊幾次<查學(xué)校>頁面的<上一頁>、<下一頁>按鈕,在XHR的頁面會顯示訪問的API等信息。
3.將每次翻頁時的API復(fù)制出來進(jìn)行對比,發(fā)現(xiàn)翻頁時變化的參數(shù)有兩個:page和signsafe,page為當(dāng)前訪問的頁數(shù),signsafe是一個md5值,沒法反解,但可以把前面幾次的值保存下來,后面隨機(jī)變化使用。有了這個信息,不斷改變訪問的頁數(shù)和signsafe值,就可以獲取到所有的學(xué)校數(shù)據(jù)。
Response中的numFound參數(shù)值是學(xué)校總數(shù),除以每頁顯示的學(xué)校個數(shù)可以得到總頁數(shù),也可以直接點擊頁面的<尾頁>查看總頁數(shù),這樣就確定了訪問的次數(shù)。
4.因為網(wǎng)站需要登錄才能使用,所以還要獲取訪問時的Headers,如Request Method(此次用POST)、User-Agent等。
5.有了上面的信息,循環(huán)拼接出所有頁面的url,用requests發(fā)送請求即可獲取到所有高校的數(shù)據(jù),然后用pandas將數(shù)據(jù)寫到excel中。
溫馨提示:獲取數(shù)據(jù)時需遵守網(wǎng)站的相關(guān)聲明,爬蟲代碼盡量設(shè)置一定的時間間隔,不要在訪問高峰期運行爬蟲代碼。
掌上高考網(wǎng)是為高考填志愿服務(wù)的網(wǎng)站,雖然獲取的數(shù)據(jù)有44個字段,但里面并沒有學(xué)校的經(jīng)緯度。為了更好地在地圖上展示高校位置, 需要根據(jù)學(xué)校的地址獲取對應(yīng)的經(jīng)緯度。
本文使用百度地圖開放平臺:https://lbsyun.baidu.com/apiconsole/center#/home,可以用百度地圖的開放接口獲取地理位置的經(jīng)緯度。
使用步驟為:
1.注冊登錄百度賬號,這個賬號可以是整個百度生態(tài)通用的賬號(如網(wǎng)盤、文庫等的賬號是通用的)。
2.登錄到百度地圖開放平臺,點擊進(jìn)入<控制臺>,然后在<應(yīng)用管理>中點擊<我的應(yīng)用>,再點擊<創(chuàng)建應(yīng)用>創(chuàng)建一個應(yīng)用。應(yīng)用名稱自定義,其他信息按提示和要求填寫完整,并進(jìn)行實名認(rèn)證,成為個人開發(fā)者。
3.創(chuàng)建應(yīng)用完成后,會獲得一個應(yīng)用的<訪問應(yīng)用(ak)>,用這個AK值可以調(diào)用百度的API,參考代碼如下。
import requests def baidu_api(addr): url = "http://api.map.baidu.com/geocoding/v3/?" params = { "address": addr, "output": "json", "ak": "復(fù)制你創(chuàng)建的應(yīng)用AK到此" } req = requests.get(url, params) res = req.json() if len(res["result"]) > 0: loc = res["result"]["location"] return loc else: print("獲取{}經(jīng)緯度失敗".format(addr)) return {'lng': '', 'lat': ''}
4.成功調(diào)用百度地圖API后,讀取所有高校的位置,依次調(diào)用上面的函數(shù),獲取所有高校的經(jīng)緯度,重新寫入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['經(jīng)緯度'] = lng_lat df['經(jīng)度'] = df['經(jīng)緯度'].apply(lambda x: x['lng']) df['緯度'] = df['經(jīng)緯度'].apply(lambda x: x['lat']) df.to_excel('school_lng_lat.xlsx')
最終數(shù)據(jù)結(jié)果如下圖:
個人開發(fā)者使用百度地圖開放平臺時需注意,每天有額度限制,所以調(diào)試代碼時先不要用所有數(shù)據(jù),先用demo跑通,否則得等一天或購買額度。
數(shù)據(jù)準(zhǔn)備好了,接下來將他們展示到地圖上。
本文使用百度開源的數(shù)據(jù)可視化工具Echarts,Echarts為Python語言提供了pyecharts庫,使用很方便。
安裝命令:
pip install pyecharts
1.標(biāo)注高校的位置
from pyecharts.charts import Geo from pyecharts import options as opts from pyecharts.globals import GeoType import pandas as pd def multi_location_mark(): """批量標(biāo)注點""" 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['經(jīng)度'], 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='全國高校位置標(biāo)注圖', pos_left='650', pos_top='20', title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=16)) ).render('high_school_mark.html')
從標(biāo)注結(jié)果來看,高校主要分布沿海、中部和東部,西部尤其是高海拔地區(qū)分布相對較少。
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['經(jīng)度'], 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')
從熱力圖看,高校分布較集中的地方主要是沿海、北上廣、長江黃河流域,西部較多的地方只有川渝。
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")
從省級分布密度圖可以看出,高校數(shù)量多的省份集中在中部和東部,尤其是北京和上海附近的幾個省。
4.211和985高校的分布情況
篩選出211和985的高校數(shù)據(jù),再繪制一次。(代碼不重復(fù)粘貼,只需要加一行篩選代碼即可)
到此,關(guān)于“怎么用Python展示全國高校的分布情況”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
文章題目:怎么用Python展示全國高校的分布情況
分享URL:http://weahome.cn/article/pepesg.html