用Python展示全国高校的分布情况
数据获取


数据获取方法介绍(基础爬虫知识):
温馨提示:获取数据时需遵守网站的相关声明,爬虫代码尽量设置一定的时间间隔,不要在访问高峰期运行爬虫代码。
补充说明:

经纬度获取
使用步骤为:

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

高校位置展示
安装命令:
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')

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

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.掌上高考网:https://www.gaokao.cn/school/search
2.pyecharts中文文档:https://pyecharts.org/#/zh-cn/geography_charts
评论
