用Python展示全国高校的分布情况

用Python分析全国高等教育分布情况,这个地方绝对排第一! 前段时间很多学子们都迈入了自己理想中的大学。只是当我们站在象牙塔前,再回首凝望高中生活,一路走来,是不是会感慨万千呢。都说高考是普通大众改变命运的最好的阶梯,那么大学就是培养能力,形成品格的试验田,而通向这块田地的之路却并不平坦。尤其是一些高考大省的小伙伴儿们,是经历了怎样的拼搏,才一路拼杀过来的呢。 这里就涉及到了各个省份的招生标准和各省的高校资源情况了,毕竟每个省的高校,在本省的招生数量既多... 阅读详情

‍

3a266749c8c91b40ecd189268ac4f4dc.png

大家好,我是菜鸟哥!

‍本文用Python展示了全国高校的分布情况,全国的高校哪些地方多,哪些地方少,可以一目了然地看到。‍

数据获取


要展示高校的分布情况,就得先获取全国高校的位置数据。本文的数据来源于掌上高考网(https://www.gaokao.cn/school/search)。

dd0e9e0ad1d1fb0d4594e812ae286be5.png

在2022年6月写本文时,共获取到了2822所高校的信息。检查了数据,除了极个别空值外,整份数据是非常完整的,不影响使用。数据一共有44个字段,本文只会用几个字段,可以不做处理,使用时按需获取即可。

b5da17b55ebaa704f3edc881c844191a.png

数据获取方法介绍(基础爬虫知识):

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中。

温馨提示:获取数据时需遵守网站的相关声明,爬虫代码尽量设置一定的时间间隔,不要在访问高峰期运行爬虫代码。

补充说明:

人民网最新公布:全国的普通高校数是2759所,与本文从掌上高考网获取的2822所相差63所,主要是部分学校的分校统计方式不同造成的差异。本文所展示的是分布情况,这个差异的影响不大。

26b44c5774835645c80317389bd0dc18.jpeg

经纬度获取


掌上高考网是为高考填志愿服务的网站,虽然获取的数据有44个字段,但里面并没有学校的经纬度。为了更好地在地图上展示高校位置, 需要根据学校的地址获取对应的经纬度。

本文使用百度地图开放平台:https://lbsyun.baidu.com/apiconsole/center#/home,可以用百度地图的开放接口获取地理位置的经纬度。

使用步骤为:

1.注册登录百度账号,这个账号可以是整个百度生态通用的账号(如网盘、文库等的账号是通用的)。

2.登录到百度地图开放平台,点击进入<控制台>,然后在<应用管理>中点击<我的应用>,再点击<创建应用>创建一个应用。应用名称自定义,其他信息按提示和要求填写完整,并进行实名认证,成为个人开发者。

5d466b7e7ddf0d2ce6d5e77f43ea903e.png

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

最终数据结果如下图:

290a925eb506aa15b98dfb7d346c5b55.png

个人开发者使用百度地图开放平台时需注意,每天有额度限制,所以调试代码时先不要用所有数据,先用demo跑通,否则得等一天或购买额度。

d558419acfe5d5e4f2f78c6c3d667f14.png

高校位置展示


数据准备好了,接下来将他们展示到地图上。

本文使用百度开源的数据可视化工具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')

6a04723403dcf672f0b010ded06ee410.png

从标注结果来看,高校主要分布沿海、中部和东部,西部尤其是高海拔地区分布相对较少。

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

1dd760c641c5b30cdcb927215c77e15d.png

从热力图看,高校分布较集中的地方主要是沿海、北上广、长江黄河流域,西部较多的地方只有川渝。

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

4b886065197a4cfcf6f313456e2afb96.png

从省级分布密度图可以看出,高校数量多的省份集中在中部和东部,尤其是北京和上海附近的几个省。

4.211和985高校的分布情况

筛选出211和985的高校数据,再绘制一次。(代码不重复粘贴,只需要加一行筛选代码即可)

a4b2935a6afa1791c4f0a73b0b759882.png

以上就是本文的全部内容,对以上内容有兴趣的话,大家可以多多尝试,也可以联系号主讨论。

参考文档: 

1.‍掌上高考网:https://www.gaokao.cn/school/search

2.pyecharts中文文档:https://pyecharts.org/#/zh-cn/geography_charts


 

 
推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看30个Python视频案例!

利用folium实现全国高校分布地图显示 Folium为Python用户提供了便捷的方式来利用Leaflet.js的强大地图可视化功能,而无需直接编写JavaScript代码。它允许开发者以Pythonic的方式处理地理空间数据,通过层层叠加元素来构建丰富的交互式地图。Folium的基本使用步骤通常包括:1. 安装Folium:首先确保你的Python环境中安装了Folium库。可以通过pip命令安装:2. 导入Folium库:在Python脚本或Jupyter Notebook中开始使用Folium之前,需要先导入它。 阅读详情

相关推荐

Python数据分析教程03:使用pyechart绘制全国985/211高校分布图

使用pyecharts包进行数据按省份可视化

AmieeXue的博客 3219

阿里云天池task1学习笔记

1.0x4DC0 是一个十六进制数,它对应的 Unicode 编码是中国古老的《易经》六十四卦的第一卦,请输出第 51 卦(震卦)对应的 Unicode 编码的二进制、十进制、八进制和十六进制格式。 参考代码: print("二进制{0:b}、十进制{0}、八进制{0:o}、十六进制{0:x}".format(0x4DC0+50)) 2.列表 ls 中存储了我国 39 所 985 高校所对应的学校类型,请以这个列表为数据变量,完善 Python 代码,统计输出各类型的数量。 ls = [“综合”,

m0_64913238的博客 1463

【数据可视化-11】全国大学数据可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。

qq_38614074的博客 1373

Python爬取全国大学排名 用pyecharts进行大屏可视化

院校网址:http://college.gaokao.com/schlist/p 先找到对应的全部list 需要先安装requests,lxml 可直接用 pip install requests pip install lxml 命令安装 导入需要的相关包 import requests from lxml import etree import time import r...

小胖墩 7532

基于pyecharts的可视化项目.zip

基于pyecharts的可视化项目同学们,请利用提供的数据在中国地图上展示每个省的高考人数或大学数量!完成后将整个项目(rar或zip格式)提交

【作业】04-基于pyecharts的可视化项目

同学们,请利用提供的数据在中国地图上展示每个省的高考人数或大学数量! 链接:https://pan.baidu.com/s/13b3ZBjlHYslI8R0Fb6rLGA 提取码:m53j

Python中国高校及专业数据分析可视化

高考刚刚落幕,本期利用 python 分析一下我国高校及专业数据,看看:高校办学类别有哪些全国高校分布情况本科/专科占比情况985/211/双一流高校数量占比情况985/211/双一流主要分布城市高校开始最多的专业有哪些国家特色专业数量最多的学校等等…希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。涉及到的库:Pandas — 数据处理Pyecharts — 数据可视化1. 导入模块2.1 读取数据3.1 全国高校分布地图3.2 全国高校分布城市地图。

2301_76161259的博客 1310

DrissionPage实战:5分钟搞定京东滑块验证码自动登录(附完整轨迹生成代码)

本文详细介绍了如何使用DrissionPage工具实现京东滑块验证码的自动化登录,包括环境配置、滑块缺口识别、拟人化轨迹生成算法及完整登录流程。通过物理运动学模型和智能识别技术,有效提升验证码破解成功率,适用于电商自动化场景。

weixin_29229055的博客 245

Python之基础详解(九):关于VisualMapOpts视觉映射配置项详解

关于VisualMapOpts视觉映射配置项详解

zhu_rui的博客 1万+

Oracle EBS R12.2 安装 -- Step by Step

Oracle EBS R12.2 安装 -- Step by Step

Albert Tan DBA之路 1514

大模型LLM部署方式

建议根据实际需求选择方案,企业级服务优先考虑vLLM或TGI,个人用户可尝试Ollama或Hugging Face本地加载。若需完整代码示例,可参考网页2的VLLM实战或网页5的TGI部署案例。:高并发、低延迟的API服务,需分布式推理支持。:快速创建可分享的Web应用。:个人开发、快速原型验证。

u010249118的博客 518

用 Python 展示全国高校的分布情况,你知道志愿该填哪了吗?

6月是毕业季,高考生正在准备填志愿。本文用Python展示了全国高校的分布情况,全国的高校哪些地方多,哪些地方少,可以一目了然地看到。要展示高校的分布情况,就得先获取全国高校的位置数据。本文的数据来源于掌上高考网(https://www.gaokao.cn/school/search)。在2022年6月写本文时,共获取到了2822所高校的信息。检查了数据,除了极个别空值外,整份数据是非常完整的,不影响使用。数据一共有44个字段,本文只会用几个字段,可以不做处理,使用时按需获取即可。数据获取方法介绍(基础爬虫

weixin_56659172的博客 843

D类功放几种常见“爆破音”问题根源与改善措施

在数字D类功放刚上电或功放播放状态切换时,人耳偶尔会听到“嘣”的声音,我们把这个爆破的Pop Noise。数字功放Pop Noise 出现的原因有很多,本文主要分析Pop Noise 出现原因,并提供相应解决方法。

qq_26815321的博客 3594

差异太大了,用 Python 获取数据并可视化展示全国高校的分布情况

6月是毕业季,高考生正在准备填志愿。本文用Python展示了全国高校的分布情况,全国的高校哪些地方多,哪些地方少,可以一目了然地看到。喜欢记得收藏、点赞、关注。注:技术交流、资料获取,文末找我要展示高校的分布情况,就得先获取全国高校的位置数据。本文的数据来源于掌上高考网(https://www.gaokao.cn/school/search)。在2022年6月写本文时,共获取到了2822所高校的信息。检查了数据,除了极个别空值外,整份数据是非常完整的,不影响使用。数据一共有44个字段,本文只会用几个字段,可

m0_59596937的博客 1215

使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序

上一篇文章中,我们简要介绍了ROS中action的基本知识,为了控制真实机械臂,我们已经修改了moveit配置文件,使得moveti启动后具备一个control_msgs::FollowJointTrajectoryAction类型的action客户端,接下来,我们完成该类型action的另一半,编写C++程序来实现action的服务端。由于底层机器人控制程序一般差别都很大,这里展示的只是编程要点...

爱学习的草莓熊 1万+

硬件工程师必备核心知识点

硬件设计是一项系统化工程活动,涉及元器件选型、电源设计、信号完整性、EMC和PCB工艺等多个环节

硬核科技 340

轻松实现全国高校地理位置数据爬取

一个城市的历史底蕴,不光可以从经济、文化和人文景点,还可以从高校的数量可以看出来。所以,今天就来试试如何爬取全国高校的分布数据。天要爬取的网站是:中国教育在线,对应的网址是:https:/...

菜鸟学Python数据分析 1994

SAP SD销售订单的ATP检查简介

如果可用性检查组设置为01(汇总需求),系统将更新销售订单需求到汇总表VBBS,该表中未记录销售订单号码,因此在MD04中不会显示销售订单号码,而是按天汇总显示销售需求。如果物料的可用性检查组设置为02(单个需求),系统将更新销售订单需求到表VBBE,该表中记录了销售订单号码,因此在MD04显示销售订单的号码以及需求,前面的文章中我们解释了PP模块中的ATP检查,也解释了MM模块中的ATP的检查,本文将说明一下SD模块中的ATP检查。可用性检查用的最多的就是02,有兴趣的同学可以测试一下可用性检查01。

我小时候很黑的博客 4298
上一篇: 字节遭遇离职潮!
下一篇: Python操作PDF的神器——PyMuPDF
菜鸟学Python
博客等级 码龄9年 8087粉丝 571原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值