上周领了新任务,做国内高校改名历史的统计,这个挺有意思,以下是我任务完成过程,和大家分享。
一. 数据收集
数据需求:目前已有高校校名,各高校改名历史记录
高校校名数据来源:尝试从高校排名网站(iPIN),中国教育和科研计算机网等抓取,但高校名不全,前者709,后者1394,最后从教育部找到一份名单:“2015年全国高等学校名单”,基于教育部的信息比较权威可靠,本人想法是抓取教育部发布的教发函来收集高校改名信息。
高校改名数据来源:教育部信息综合搜索,鉴于教育部发布的信息众多,且教发函格式不一,本人分成几个类别抓取:合并,更名,建立,在xx基础上建立,转设。然后根据搜索跳转的URL,抓取不同类别,大概情况如图:
从截图可以观察到跳转的URL,所以更换掉关键词部分,重新查询便能获得新的结果,再根据页数跳转抓取所有有关通知。具体实现细节比较繁琐,有兴趣同学可以看github上的代码:最后数据结果如下:
1. 高校校名:普通高等学校2553所
2. 更名历史:教育部1995-2015发布的教发函,约665份,教育部公示1990-2006年5月高校合并情况,431条记录。
二. 数据分析
接下来就是对数据进行清洗,规则处理的过程,虽然没用到什么算法,但满满都是泪啊~~基本大家都能看懂,详细代码点这里,大概流程如下:
import re import string import json sch = {} #学校更名历史字典 remain_sch = {} #添加的学校 #处理高校合并通知 def dealCombineRP(rp_file): #处理高校建立通知,原通知不完整,数据已从通知文件中补全 def dealFoundRP(rp_file): #处理高校更名通知 def dealRenameRP(rp_file): #处理高校转设通知 def dealSetupRP(rp_file): #处理高校建立通知 def dealUpgradeRP(rp_file): #处理教育部合并通知:1990-20060515 def dealCombineFile(combine_file): #去重处理,去掉重复更名(合并) def removeDuplicate(): #导入学校名 def loadSchoolName(): #结果保存为json格式 def showResult() def main(): global sch global remain_sch sch_file = "./data/sch_name/sch_name_gov.txt" rp_rename_file = "./data/reports/reports_rename.txt" rp_upgrade_file = "./data/reports/reports_upgrade.txt" rp_setup_file = "./data/reports/reports_setup.txt" rp_found_file = "./data/reports/reports_found.txt" rp_combine_file = "./data/reports/reports_combine.txt" school_combine_since1990 = "./data/reports/school_combine_since1990.txt" sch = loadSchoolName(sch_file) #print "before:",len(sch) dealSetupRP(rp_setup_file) dealCombineFile(school_combine_since1990) dealCombineRP(rp_combine_file) dealFoundRP(rp_found_file) dealRenameRP(rp_rename_file) dealUpgradeRP(rp_upgrade_file) #print "after:",len(sch) removeDuplicate() showResult() if __name__ == '__main__': main()
三. 分析结果
标记结果:原文件学校2554个,增加至2690个,总共标记828个学校。很多专科学校也添加进去了~基本上完成任务。估计做成列表也是挺壮观的,下面是部分结果:
{ "广东海洋大学": [ "湛江农业专科学校", "湛江海洋大学", "湛江水产学院" ], "广东海洋大学寸金学院": [], "广东环境保护工程职业学院": [], "广东理工学院": [ "肇庆科技职业技术学院" ], "广东理工职业学院": [], "广东生态工程职业学院": [], "广东白云学院": [], "广东省外语艺术职业学院": [], "广东石油化工学院": [ "茂名学院", "广东石油化工高等专科学校", "广东省茂名教育学院", "茂名石油工业公司职工大学" ], "广东碧桂园职业学院": [], "广东科学技术职业学院": [], "广东科技学院": [ "东莞南博职业技术学院" ], "广东科贸职业学院": [], "广东第二师范学院": [ "广东教育学院" ], "广东职业技术学院": [], "广东舞蹈戏剧职业学院": [], "广东药学院": [], "广东行政职业学院": [], "广东警官学院": [ "广东公安高等专科学校" ], "广东财经大学": [ "广东商学院" ], "广东财经大学华商学院": [], "广东轻工职业技术学院": [ "广州轻工业学校" ], "广东邮电职业技术学院": [], "广东金融学院": [ "广州金融高等专科学校" ], }
基本任务就是这样,完整项目见这里schoolCard,有问题的朋友可以交流。
参考资料:
1.爱拼网iPIN:http://www.ipin.com/school/ranking.do
2.中国教育和科研计算机网:http://ziyuan.eol.cn/list.php?listid=128
3.教育部:http://www.moe.gov.cn/jyb_sy/