查看原文
其他

出人意料!这所大学的A级学科总数竟超越清华北大!

爬虫俱乐部 Stata and Python数据分析 2023-01-01

本文作者:张雷豪,中南财经政法大学统计与数学学院

本文编辑:万   浩

技术总编:孙一博



Stata&Python云端课程来啦!

     为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~


2017年第四轮学科评估结果是教育部学位与研究生教育发展中心按照国务院学位委员会和教育部颁布的《学位授予与人才培养学科目录》对全国具有博士或硕士学位授予权的一级学科开展整体水平评估,是中国最有影响力的学科评估体系。每当学科评比时,纵观当代高校,都摩拳擦掌,欲与彼此试比高。高校学科评级,可以揭示高校的重点学科和侧重方向,也可以比较得出高校的优势,对学生的择校也有参考意义。小编对评估结果进行爬虫,并且汇总,得到了全部的学校的评估结果。值得一提的是,A级学科总数(A、A+、A-的学科数目总和)第一竟不是清华北大,具体是哪所大学呢,让我们拭目以待。
一、网络爬虫

要想爬取网页信息,首先,我们可以看一下第四轮学科评估结果的网页。

先查看网页源代码,发现源代码中没有想要提取的内容,于是进入开发者模式“Network”寻找,最终锁定了包含所需信息的链接"http://www.cdgdc.edu.cn/webrms/pages/Ranking/xkpmGXZJ2016.jsp?yjxkdm=01",同时,我们也发现了不同网页的规律,也就是在链接"jsp?xkdm={}"中的两位数字代表学科大类,如人文社科类为01~06、理学07、工学08、农学09、医学10等等。不过,针对某一个学科大类,里面又存在具体的学科门类,仅仅这一个规律并不能具体到学科门类。例如在人文社科类类别中,分为0101哲学、0201理论经济学、0202应用经济学、0301法学等等。因此小编继续探索,发现如果在"jsp?xkdm={}"中填写四位学科代码的数字,就可以得到具体到学科门类的数据。而如何获得四位的学科代码呢,方法就是先读取学科大类的网页内容,再使用df_list[1]得到包含学科代码的列表,具体程序如下。

import pandas as pdimport matplotlib.pyplot as pltdef get_yjxkdm(): xkdm = {'人文社科类': '01,02,03,04,05,06', '理学': '07', '工学': '08', '农学': '09', '医学': '10', '管理学': '12',            '艺术学': '13'} for key, value in xkdm.items(): url = 'http://www.cdgdc.edu.cn/webrms/pages/Ranking/xkpmGXZJ2016.jsp?xkdm={}'.format(value)        df_list = pd.read_html(url) yjxkdm_string = df_list[1].iloc[0, 0] yjxkdm_string = [x for x in yjxkdm_string.split(' ') if x != ''] yjxkdm_num = [x for x in yjxkdm_string if x.isnumeric()]        yjxkdm_text = [x for x in yjxkdm_string if not x.isnumeric()]        xkdm[key] = (value, dict(zip(yjxkdm_num, yjxkdm_text))) return xkdm

得到的部分结果如下:

有了上面的字典,就相当于有了网页链接,接下来就可以读取网页合并数据,将列表命名评估结果、学校代码、学校名称、学科代码、学科名称和学科大类。具体命令如下:

def get_data(xkdm): data = [] for key_xkdm, value_xkdm in xkdm.items():        yjxkdm = value_xkdm[1] for key_yjxkdm, value_yjxkdm in yjxkdm.items(): url = 'http://www.cdgdc.edu.cn/webrms/pages/Ranking/xkpmGXZJ2016.jsp?yjxkdm={}&xkdm={}'.format(key_yjxkdm, value_xkdm[0]) df_list = pd.read_html(url)            df = df_list[-1] tmp_df = df.loc[:, 1].str.split('(?<=[0-9]) ', expand = True) df = pd.concat([df.drop(1, axis = 1), tmp_df], axis = 1) df.columns = ['评估结果', '学校代码', '学校名称'] df['学科代码'] = key_yjxkdm df['学科名称'] = value_yjxkdm            df['学科大类'] = key_xkdm            data.append(df)    data = pd.concat(data) return data

程序得到的表格是人文社科类哲学学科的一部分:

二、数据清洗

得到全部数据后,小编就需要进行数据清洗。按照自己的需要,小编需要把各个学校所得到的A+、A、A-、B+、B、B-、C+、C、C-的学科数目加总起来。程序如下:

def clean_data(data): school_list = [] for school, slice_df in data.groupby('学校名称'): sub_num = slice_df.shape[0] school_dict = {'学校名称': school, '参评学科总数': sub_num} school_dict.update(slice_df.value_counts('评估结果'))        school_list.append(school_dict) school_list = [pd.DataFrame(x, index = [0]) for x in school_list] school_df = pd.concat(school_list)    school_df = school_df.sort_values('参评学科总数', ascending = False) return school_df

最后得到的是461行的数据,即有461个高校参与学科评估,不过此处只展示部分结果:

三、数据分析
在上面数据的基础上,如果仅对A+的学科总数进行排名,得到的表格的部分结果如下所示:

而如果对A级学科的总数(也就是A+、A、A-三个级别汇总)进行排名,就可以发现,排名第一的高校,是浙大,而清华北大位列浙大之后。最后得到的表格则如下:

如果我们对A级学科的总数前十名画堆积图,A+的数量放在最下方,A和A-的数目分别堆积在上面,具体程序如下 :

def plot(df): df_A = df.loc[:, ['学校名称', 'A+', 'A', 'A-']] df_A['A类学科总数'] = df_A.loc[:, ['A+', 'A', 'A-']].sum(axis = 1) df_A = df_A.sort_values('A类学科总数', ascending = False)    tmp_df = df_A.iloc[:10, :] plt.figure(dpi = 200)    plt.rcParams['font.sans-serif'] = ['SimHei'] for i in [1, 2, 3]: height = tmp_df.iloc[:, 1:4].iloc[:, i-1] bottom = tmp_df.iloc[:, 1:4].cumsum(axis = 1).iloc[:, i-1]-height bar = plt.bar(tmp_df.iloc[:, 0], height = height, bottom = bottom) #plt.bar_label(bar) plt.xticks(rotation = 45) plt.ylabel('学科数') plt.title('A级学科数') plt.legend(['A+', 'A', 'A-']) plt.show()
结果如图所示:

高校如此多娇,引无数青年学子竞折腰。论A级学科的总数排名第一花落谁家,竟是浙大众星捧月拔得头筹。各个高校侧重的学科均有不同,可谓八仙过海各显神通,学虽有专攻,术亦有穷欤,当代高校应该拿出"试问谁与争锋"的劲头,秉志宜专攻,建设优势学科,争为国家培养优秀人才!
   END
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



腾讯课堂课程二维码




            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!











往期推文推荐

Stata数据读入——打开方式不同?

数据类型——Dict、Set与Frozenset简析

Stata小贴士之外部命令安装路径

有一种夏天叫做宫崎骏的夏天

换装术|多个Excel文件如何一键转为dta格式

【基础篇】Python可变对象与不可变对象

Stata绘图系列——细节掌控绘图区域!

 4月A股的收官战之概念板块哪家强?

解放双手!你必须要会的两个命令—inlist & inlist2

【基础篇】字符串之判断方法

Stata绘图系列——让你的直方图随心所欲

【爬虫篇】湖人无缘季后赛,球迷如何回应

客官,要来份四象限图吗?

Python实现简繁体转换

Stata与Python交互方法及数据传递

 “青铜”爬“王者”

 留下想要的变量,你会几种方法?

 Python:朋友圈配图,我承包了

 绘制全国祠堂密度地图

 如何使用Stata绘制一幅好看的柱状图?

【爬虫篇】基于selenium爬取美团评论

 双标的莱万——足球无关政治?!

 Stata处理重复值:duplicates

It's time to send a flower to your lover!        2021各省GDP新鲜出炉

 爬虫实战-采集全国各省疫情数据

 log——为你的操作保驾护航

 一行代码教你玩转emoji

 票房遇冷的春节档口碑冠军丨《狙击手》影评分析

 学习丰县,营造良好营商环境!

 大国丢娃图:从川渝到徐州!

 丰县“失火”,殃及徐州:股市超跌近30亿!

 Unicode转义字符——编码与解码

        徐州!徐州!

        B站弹幕爬虫——冬奥顶流冰墩墩&雪容融

        不会用Stata做描述性统计表?so easy!

        丰沛之地:备足姨妈巾

 过年啦,用Python绘制一幅属于你的春联吧!

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存