龙游浅底遭虾戏,虎落平阳被犬吠。

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_python

 

 


 

 CDA数据分析师 出品  

作者:Mika

 

【导读】

今天我们用数据来聊一聊高考。Python技术分析请看第二部分公众号后台,回复关键字“高考”获取完整数据。

Show me data,用数据说话

今天我们聊一聊 高考

 

高考是人生中非常难忘的一段体验,而今年的高考尤为特别。由于今年疫情的影响,3月31日教育部宣布高考延期一个月,从本来的6月推迟到在7月7日至7月8日举行,这是17年来,我国首次调整高考时间。

 

而2020年的高考生也真是特别不容易。熬过疫情的漫长黑夜,见证了历史性的高考延期,多了一个月的埋头苦读,多了一个月对心态的考验。

 

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_python_02

那么历年的高考人数、录取率如何?哪个地区的高校最多?都有什么专业最热门?今天我们就用数据来聊一聊。

 

01

回顾历年高考人数和录取率

 

我们搜集整理了自1977年恢复高考以来到2019年,这四十多年来高考人数、录取人数和录取率的数据。

 

历年高考人数数据

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_专业_03 

在图中我们可以看到:

 

高考人数:

参加高考的人数逐年递增,2008年高考人数达到峰值1050万。之后几年人数有所回落。而今年,2020年全国考生人数创新高达到1071万,是自2009年后十年来再次破千万。也是近年来人数最多的一年,

 

录取人数:

录取人数基本都是逐年递增,在1997年的时候,高校录取人数终于突破了百万大关。

 

录取率:

录取率也基本是逐年递增,在2005年到2008年这四年时间,录取率相对往年是下降的;随后伴随高校陆续扩招,录取率增长很快;到了2017年,录取率达到了82%,总体来说高等教育的普及率是越来越高了。

 

接着,我们看到去年2019年各省份的高考一本录取数据:

 

2019年各省份一本录取线

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_python_04

 

首先在高考人数上,河南遥遥领先,高考人数破百万,达到103万,妥妥的高考大省,其中一本录取人数为12.92万,一本录取率为12.54%。其次,广东、四川的高考人数也不容小觑,分别为76万和65万,一本录取率分别为12.87%和14.72%。

 

02

 国内理工类院校占三分之一 

江苏高校数量最多

 

高考学子千千万,那么我国各省市的高校分布又是怎样的呢?全国哪个地方的高校最多?

 

我们分析了中国教育在线网站(https://gkcx.eol.cn/)的高校数据,当中包含本科院校和高职(专科)院。

 

如何获取数据

 

我们使用Python获取了中国教育在线网站的高校数据,共2904条。以下展示数据获取部分代码:

https://gkcx.eol.cn/school/search 

 

具体思路如下:

 

  1. 分析网页,通过翻页可以发现数据是动态加载的,因此通过Chrome浏览器进行抓包分析获取真实的URL请求地址,并确定请求方式(get还是post);
  2. 使用requests请求网页数据;
  3. 使用json解析并提取数据;
  4. 使用pandas将数据保存到本地

 

首先打开网址,使用Chrome浏览器的检查功能,切换到Network-XHR,点击翻页进行网络数据抓包,很容易发现数据都是被封装在json中的,如下图所示:

 

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_python_05

 

切换到Headers处,确定请求的方法为post请求,得到数据请求的URL地址,其中page参数代表页数,通过遍历即可获取所有数据。代码如下:

 

# 导入包
import numpy as np
import pandas as pd
import requests
import json
from fake_useragent import UserAgent
import time

# 获取一页
def get_one_page(page_num):
    # 获取URL
    url = 'https://api.eol.cn/gkcx/api/'

    # 构造headers
    headers = {
        'User-Agent': UserAgent().random,
        'Origin': 'https://gkcx.eol.cn',
        'Referer': 'https://gkcx.eol.cn/school/search?province=&schoolflag=&recomschprop=',
    }

    # 构造data
    data = {
        'access_token': "",
        'admissions': "",
        'central': "",
        'department': "",
        'dual_class': "",
        'f211': "",
        'f985': "",
        'is_dual_class': "",
        'keyword': "",
        'page': page_num,
        'province_id': "",
        'request_type': 1,
        'school_type': "",
        'size': 20,
        'sort': "view_total",
        'type': "",
        'uri': "apigkcx/api/school/hotlists",
    }

    # 发起请求
    try:
        response = requests.post(url=url, data=data, headers=headers)
    except Exception as e:
        print(e) 
        time.sleep(3) 
        response = requests.post(url=url, data=data, headers=headers)

    # 解析获取数据
    school_data = json.loads(response.text)['data']['item']

    # 学校名
    school_name = [i.get('name') for i in school_data]
    # 隶属部门
    belong = [i.get('belong') for i in school_data]
    # 高校层次
    dual_class_name = [i.get('dual_class_name') for i in school_data]
    # 是否985
    f985 = [i.get('f985') for i in school_data]
    # 是否211
    f211 = [i.get('f211') for i in school_data]
    # 办学类型
    level_name = [i.get('level_name') for i in school_data]
    # 院校类型
    type_name = [i.get('type_name') for i in school_data]
    # 是否公办
    nature_name = [i.get('nature_name') for i in school_data]
    # 人气值
    view_total = [i.get('view_total') for i in school_data]
    # 省份
    province_name = [i.get('province_name') for i in school_data]
    # 城市
    city_name = [i.get('city_name') for i in school_data]
    # 区域
    county_name = [i.get('county_name') for i in school_data]

    # 保存数据
    df_one = pd.DataFrame({
        'school_name': school_name,
        'belong': belong,
        'dual_class_name': dual_class_name,
        'f985': f985,
        'f211': f211,
        'level_name': level_name,
        'type_name': type_name,
        'nature_name': nature_name,
        'view_total': view_total,
        'province_name': province_name,
        'city_name': city_name,
        'county_name': county_name,
    })

    return df_one


# 获取多页
def get_all_page(all_page_num):
    # 存储表
    df_all = pd.DataFrame()

    # 循环页数
    for i in range(all_page_num):
        # 打印进度
        print(f'正在获取第{i + 1}页的高校信息')
        # 调用函数
        df_one = get_one_page(page_num=i+1)
        # 追加
        df_all = df_all.append(df_one, ignore_index=True)
        # 随机休眠
        time.sleep(np.random.uniform(2))

    return df_all

if __name__ == '__main__':
    # 运行函数
    df = get_all_page(all_page_num=148)  

 

通过上述程序,共获取到2904条数据,数据预览如下:

df.head() 

 

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_大学_06

 

分析结果

 

全国院校分布:江苏高校数量第一

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_高考_07

 

经过分析发现,江苏省在高校数量上拔得头筹,以174所高校位居榜首。其次北京有167所,山东和广东紧随其后,均为161所。

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_大学_08

 

全国高校层次:北京的985、211院校最多

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_大学_09

我们进一步分析数据发现,在各省市的高校层次分布中,除了双非院校,211院校方面,北京的最多有27所,然后是江苏11所,上海10所。985院校方面呢,北京9所,其次山东和上海均有4所。

 

高校类型:国内三分之一都是理工院校

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_大学_10

 

然后我们在放眼全国的高校类型,可以看到理工类院校是最多的,占比高达30.93%。接着就是综合类院校了,占比为29.14%。师范类有8.7%。

 

大学热度排名:厦门位居榜首

 

中国教育在线网站还有根据搜索数据统计了高校的人气值。

 

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_大学_11

 

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_大学_12

 

我们对各个高校的人气值进行统计发现:

 

在全国大学的人气值排名中,厦门大学位居榜首,武汉大学位居第二,四川大学位居第三。北大清华位居四五位。

03

工学专业最多 数据解读报考专业

 

说完了高校,我们再来聊聊专业。我们接着对中国教育在线的专业数据进行了分析整理,共获取1450 条数据。

 

学科专业:工学专业最多,哲学最少

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_大学_13

 

哪些学科的下分专业最多呢?统计发现,工程学科下的专业多达212种,然后是文学,下分的专业有122种。而哲学这一学科下分的专业最少,仅为4种。

专业热度排名:临床医学搜索最多

 

同样的,我们也对专业的人气值进行了分析统计:

 

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_高考_14

结果发现,临川医学的搜索度特别高,位居首位。其次是商务经济学,以及电气工程与智能控制。

 

#没学过却很好奇的专业# 大家对什么专业最好奇

 

 

在专业方面,网友们又对对哪些专业感兴趣呢?微博上#没学过却很好奇的专业#这一话题目前阅读达到1.3亿,讨论达到1.3万。

 

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_专业_15

 

我们从中获取并分析了3544条数据,可以看到:

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_python_16

 

大家最好奇的专业排行榜上:心理学是妥妥的首位,看来如今人们是越来越重视心理健康了。第二位是护理学,第三位是考古学。

 

以上就是本次的全部分析啦,最后祝本次高考学子都能取得好成绩,进入理想的大学!

 

带你用Python解读高考数据:全国哪里的高校最多?什么专业最热门?_高考_17

 

------------------- End -------------------