用Python展示全國高校的分布情況
數(shù)據(jù)獲取


數(shù)據(jù)獲取方法介紹(基礎(chǔ)爬蟲知識):
溫馨提示:獲取數(shù)據(jù)時需遵守網(wǎng)站的相關(guān)聲明,爬蟲代碼盡量設(shè)置一定的時間間隔,不要在訪問高峰期運(yùn)行爬蟲代碼。
補(bǔ)充說明:

經(jīng)緯度獲取
使用步驟為:

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': ''}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')

高校位置展示
安裝命令:
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)注點(diǎn)"""
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')

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")

4.211和985高校的分布情況

參考文檔:
1.掌上高考網(wǎng):https://www.gaokao.cn/school/search
2.pyecharts中文文檔:https://pyecharts.org/#/zh-cn/geography_charts
評論
圖片
表情
