南方科技大学院士分析

news/2024/12/21 20:40:03/文章来源:https://www.cnblogs.com/cucliai/p/18402806

网页信息获取分析报告

1.Python获取页面信息

这里需要爬取的是南方科技大学研究生院-师资概况页面,使用的是requests和BeautifulSoup方法

以下是要爬取的页面
南方科技大学研究生院-师资概况

import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import re
# 1.Python获取页面内容url = "https://www.sustech.edu.cn/zh/faculty/"response = requests.get(url)
response.encoding = 'utf-8'  
html_content = response.textsoup = BeautifulSoup(html_content, 'html.parser')
print(html_content)
<!DOCTYPE html>
<html lang="zh-CN" class="js svg" WPLANG>
<head><meta charset="UTF-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><li><div class="clearfix fl list2"><a href="/zh/faculties/zhujiankang.html"><div class="left" style="background:url(/uploads/large/2024/04/07113416_99701.png) no-repeat center;"></div><div class="right"><div class="name">朱健康</div><div class="p">讲席教授</div><div class="p2">美国科学院院士</div><div class="p1">前沿生物技术研究院院长</div><div class="dep"></div></div></a></div></li><div class="clear"></div><div class="loadmore"><div id="show1" class="showmore" style="visibility: visible;"> <a href="/zh/national/index.html">了解更多</a></div></div></ul></div><!----></div></div><script>$(function(){$('#ul-list li').click(function(){var index = $(this).index();$('#content').find('.list-main1').eq(index).show().siblings().hide();})var $one_li = $('#moveOne');    //  获取<ul>节点中第二个<li>元素节点var $two_li = $('#jcrc_wrap');    //  获取<ul>节点中第三个<li>元素节点$one_li.insertBefore($two_li);    //移动节点var $one_li2 = $('.search-name');    //  获取<ul>节点中第二个<li>元素节点var $two_li2 = $('#search_wrap');    //  获取<ul>节点中第三个<li>元素节点$one_li2.insertBefore($two_li2);    //移动节点// $('.teshu7').insertBefore('teshu8');var $one_li3 = $('.search-name');    //  获取<ul>节点中第二个<li>元素节点var $two_li3 = $('.zw_search');    //  获取<ul>节点中第三个<li>元素节点$one_li3.insertBefore($two_li3);    //移动节点});</script></div><!-- #content --><div class="read_more clearfix"><ul><li><div class="more_s"></div><a href="#">继续了解>></a></li><li><div class="more_1" style="background-image:url(/static/images/about6.jpg)"></div><a href="/zh/admissions.html">本科招生</a></li><li><div class="more_1" style="background-image:url(/static/images/about7.jpg)"></div><a href="https://talent.sustech.edu.cn/">人才招聘</a></li><li><div class="more_1" style="background-image:url(/static/images/about8.jpg)"></div><a href="/zh/research.html">科研平台</a></li></ul></div></div><!-- .site-content-contain -->
</div><!-- #page --><script type='text/javascript' src='/plugins/js_composer1/assets/js/dist/js_composer_front.min.js?ver=4.11.2.4'></script><!-- footer theme-green --><footer class="line_position "><div class="footer "><div class="container "><!-- 底部logo --><div class="ft-logo"><a href="/"> <img src="/static/newest2-v4/img/icon/ft-logo.png" title="南方科技大学" /> </a></div><!-- 底部logo-end --><!-- 底部快速入口 --><div class="ft-menu"><ul><li><a href="http://asc.sustech.edu.cn/index/languages/lang/zh.html">行政服务大厅</a></li><li><a href="https://talent.sustech.edu.cn/rsfw/sys/zpglxt/extranet/index.do#/home">人才招聘</a></li><li><a href="http://biddingoffice.sustech.edu.cn/">招标采购</a></li><li><a href="http://career.sustech.edu.cn/">就业信息</a></li><li><a href="/zh/information-open.html" target="_parent">信息公开</a></li><li><a href="/zh/budget.html" target="_parent">预决算公开</a></li><li><a href="/zh/mailbox.html" target="_parent">校长信箱</a></li><li><a href="/zh/contact_us.html" target="_parent">联系我们</a></li></ul><div class="clearfix"></div></div><div class="copyright"><p><span>广东省深圳市南山区学苑大道1088号 </span></p></div></div></div></footer><!-- footer-end -->
</script></body>
</html>

由网页信息可以看出,里面存在很多规律的信息-院士和教授的介绍,也为我们后面提取内容提供了条件。

2.提取导航栏信息

导航栏信息如下图所示。
南方科技大学研究生院-导航栏

# 2. 提取导航栏信息(导航栏截图如前所示)
a_tags = soup.select('li > a')
# print("a_tags",a_tags)
texts = [a.text for a in a_tags]
print("导航栏信息:\n",texts)
导航栏信息:['学校概况', '治理架构', '组织机构', '现任领导', '历任领导', '大学精神', '大事记', '统计数据', '学校标识', '南科视界', '联系我们', '院系概况', '理学院', '数学系', '物理系', '化学系', '地球与空间科学系', '统计与数据科学系', '工学院', '力学与航空航天工程系', '机械与能源工程系', '材料科学与工程系', '电子与电气工程系', '计算机科学与工程系', '海洋科学与工程系', '生物医学工程系', '环境科学与工程学院', '深港微电子学院', '系统设计与智能制造学院', '生命科学学院', ' 生物系', '基础免疫与微生物学系', '系统生物学系', '化学生物学系', '神经生物学系', '医学院', '南方科技大学伦敦国王学院医学院', '商学院', '人文社会科学学院', '人文科学中心', '社会科学中心暨社会科学高等研究院', '高等教育研究中心', '语言中心', '艺术中心', '未来教育研究中心', '创新创业学院', '创新创意设计学院', '师资概况', '国家项目人才', '省市项目人才', '院系师资', '全部教师列表', '教学概况', '本科教学', '研究生教学', '海外学习', '科研概况', '科研成果', '科研平台', '科研机构', '深圳国家应用数学中心', '深圳国际数学中心(杰曼诺夫数学中心)(筹)', '深圳格拉布斯研究院', '前沿与交叉科学研究院', '南方科技大学-北京大学植物与食品联合研究所', '先进光源科学中心', '深圳可持续发展研究院', '前沿生物技术研究院', '碳中和能源研究院', '纳米科学与应用研究院', '海洋高等研究院', '公共服务平台', '公共分析测试中心', '科学与工程计算中心', '冷冻电镜中心', '实验动物中心', '成果转化', '书院概况', '致仁书院', '树仁书院', '致诚书院', '树德书院', '致新书院', '树礼书院', '交流合作概况', '国内交流合作', '国际交流合作', '联合国教科文组织高等教育创新中心(中国深圳)', '港澳台交流合作', '招生概况', '本科招生', '留学生招生', '研究生招生', '就业', '新时代学习中心', '工会', '团委', '师资概况', '国家项目人才', '省市项目人才', '院系师资', '全部教师列表', '院士', '会士', '百千万人才工程国家级人选', '国家自然科学基金杰出青年基金', '国家自然科学基金优秀青年基金', '享受国务院特殊津贴人员', '继续了解>>', '本科招生', '人才招聘', '科研平台', '行政服务大厅', '人才招聘', '招标采购', '就业信息', '信息公开', '预决算公开', '校长信箱', '联系我们']

3.提取页面信息并分析

我们选择的是当前页面所有院士的信息,其中包括他的个人页面的url,我们将它作进一步爬虫,得到该院士的个人简介,然后合并信息后储存为csv格式,dataframe,便于进一步分析。

# 提取页面信息并分析-当前页面所有院士的信息
div_tage = soup.find_all('div',class_="clearfix fl list2")# 创建一个空的列表来存储所有的院士信息
professors_info = []
profile_root = "https://www.sustech.edu.cn"for li in div_tage:name = li.find('div', class_='name').text.strip() if li.find('div', class_='name') else Nonetitle = li.find('div', class_='p').text.strip() if li.find('div', class_='p') else Nonehonor = li.find('div', class_='p2').text.strip() if li.find('div', class_='p2') else Noneposition = li.find('div', class_='p1').text.strip() if li.find('div', class_='p1') else Nonedepartment = li.find('div', class_='dep').text.strip() if li.find('div', class_='dep') else Noneprofile_link = profile_root + li.find('a')['href'] if li.find('a') else Noneif profile_link is not None:response = requests.get(profile_link)response.encoding = 'utf-8'  html_content = response.textsoup = BeautifulSoup(html_content, 'html.parser')# emailuncleaned_email = soup.find_all("span",class_="font fl")email = uncleaned_email[-1].text.strip()# BiouncleanedBio = soup.find_all("div",class_="message-right fr")Bio =  uncleanedBio[0].text.strip()# 将每个人的信息作为字典存储professors_info.append({'姓名': name,'职位': title,'头衔': honor,'职务': position,'系别': department,"简介":Bio,'邮箱':email,'链接': profile_link,})df = pd.DataFrame(professors_info)# 保存一下
df.to_csv('南方科技大学教授信息.csv', index=False)

4.进行院士信息分析

我们将得到的dataframe进行数据预处理后,将“职位”“头衔”“国家”这三列进行可视化分析,由于csv中没有储存教授的所属国别信息,我们粗略的将教授的名字分为中文和外文,中文对应中国,外文对应外国。在实验过程中发现,教授的职位和头衔有意义相同但是写法不同的类别,所以先对一些特定列进行统一。合并头衔中为了控制类别数量,所以将一些荣誉进行了合并(具体合并方法看下方代码),得到结果如下。

# 数据预处理
# 重复意义但不同的词合并成一类
df['职位'] = df['职位'].replace({'长期访问杰出教授': '长期杰出访问教授',  # 合并为 '长期杰出访问教授''讲席教授、医学院副院长': '讲席教授'   # 合并为 '讲席教授'
})# 合并相似的头衔类别
df['头衔'] = df['头衔'].replace({# 中国科学院/工程院相关'中国科学院院士': '中国科学院/工程院院士','中国工程院院士': '中国科学院/工程院院士','中国科学院外籍院士': '中国科学院/工程院院士','中国科学院院士、美国物理学会会士': '中国科学院/工程院院士','中国工程院外籍院士、加拿大皇家科学院院士、加拿大工程院院士': '中国科学院/工程院院士',# 外国科学院/工程院院士及会士'欧洲科学院院士': '外国科学院/工程院院士及会士','澳大利亚工程院院士': '外国科学院/工程院院士及会士','德国国家科学与工程院院士': '外国科学院/工程院院士及会士','英国皇家工程院院士、欧洲科学院院士(Academia Europaea)': '外国科学院/工程院院士及会士','欧洲科学院(Academia Europaea)院士,美国物理学会(APS)会士': '外国科学院/工程院院士及会士','俄罗斯工程院外籍院士': '外国科学院/工程院院士及会士','加拿大工程院院士': '外国科学院/工程院院士及会士','日本工程院院士,印度国家科学院院士,欧洲科学院院士': '外国科学院/工程院院士及会士','俄罗斯工程院外籍院士、OSA/SPIE Fellow': '外国科学院/工程院院士及会士','日本工程院外籍院士、IEEE Fellow': '外国科学院/工程院院士及会士','澳大利亚国家工程院外籍院士': '外国科学院/工程院院士及会士',# 国际Fellow及相关'加拿大工程院院士、IEEE Fellow': '国际Fellow及相关','美国科学院院士': '国际Fellow及相关','乌克兰国家工程院外籍院士、美国骨与矿物质研究学会(ASBMR)会士、国际华人骨科研究学会(ICMRS)候任主席': '国际Fellow及相关','美国国家工程院院士': '国际Fellow及相关','世界艺术与科学学院院士': '国际Fellow及相关',# 多重院士及学术头衔'图灵奖得主、法国科学院院士、法国国家工程院院士、欧洲科学院院士、美国艺术与科学学院院士、美国国家工程院院士': '多重院士及学术头衔',# 特殊荣誉及奖项获得者'欧洲科学院院士、国家杰出青年科学基金获得者、国务院特殊津贴专家': '特殊荣誉及奖项获得者',# 无头衔'无': '无'
})# 缺失值处理
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
df.replace('', pd.NA, inplace=True)
df.replace(' ', pd.NA, inplace=True)
df = df.fillna("无")# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False  # 通过看教授的名字是中文还是外语来看教授所属国家
def identify_name_language(name):if re.search('[\u4e00-\u9fff]', name):return 'Chinese'else:return 'Foreign'# 添加新列 'Country'
df['Country'] = df['姓名'].apply(identify_name_language)# 排序将“无”放在最后
country_order = df['Country'].value_counts().index.tolist()
if '无' in country_order:country_order.remove('无')country_order.append('无')title_order = df['职位'].value_counts().index.tolist()
if '无' in title_order:title_order.remove('无')title_order.append('无')honor_order = df['头衔'].value_counts().index.tolist()
if '无' in honor_order:honor_order.remove('无')honor_order.append('无')# 创建 2x3 的子图(两行三列)
fig, axes = plt.subplots(2, 3, figsize=(18, 12))# 1. 教授的国家分布
sns.countplot(data=df, x='Country', order=country_order, palette='Set2', ax=axes[0, 0])
axes[0, 0].set_title('教授的国家分布')
axes[0, 0].set_xlabel('国家')
axes[0, 0].set_ylabel('计数')
for p in axes[0, 0].patches:axes[0, 0].annotate(f'{int(p.get_height())}', (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='baseline')axes[0, 0].set_xticks(range(len(country_order)))
axes[0, 0].set_xticklabels(country_order, rotation=45)# 2. 教授的职位分布
sns.countplot(data=df, x='职位', order=title_order, palette='Set3', ax=axes[0, 1])
axes[0, 1].set_title('教授的职位分布')
axes[0, 1].set_xlabel('职位')
axes[0, 1].set_ylabel('计数')
axes[0, 1].tick_params(axis='x', rotation=45)
for p in axes[0, 1].patches:axes[0, 1].annotate(f'{int(p.get_height())}', (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='baseline')axes[0, 1].set_xticks(range(len(title_order)))
axes[0, 1].set_xticklabels(title_order, rotation=45)# 3. 教授的头衔分布
sns.countplot(data=df, x='头衔', order=honor_order, palette='Set1', ax=axes[0, 2])
axes[0, 2].set_title('教授的头衔分布')
axes[0, 2].set_xlabel('头衔')
axes[0, 2].set_ylabel('计数')# 设置x坐标标签
axes[0, 2].set_xticks(range(len(honor_order)))
axes[0, 2].set_xticklabels(honor_order, rotation=45, ha='right')# 标签间距调整
plt.setp(axes[0, 2].get_xticklabels(), rotation=45, ha='right')# 移除未使用的子图(如果有)
for ax in axes.flat[3:]:fig.delaxes(ax)# 调整布局
plt.tight_layout()
plt.show()

png

根据初步的EDA分析,可以得出以下结论:

南方科技大学的院士团队以中国籍院士为主,但相较于其他学校,外国教授的比例也相对较大,显示出学校在国际化发展方面的突出特点。从教授的职位分布来看,讲席教授占据了最大的比例,其次是长期杰出访问教授和兼职教授,体现了学校在吸引高端人才方面的多样化策略。在教授的头衔分布上,大部分教授是中国科学院或中国工程院院士,约有四分之一是外国科学院或工程院院士及会士,这反映了学校在吸引具有国际声誉的学者方面的显著成就。此外,还包括了国际Fellow及相关荣誉获得者、特殊荣誉及学术头衔获得者,这进一步展示了南方科技大学在全球范围内吸引优秀学者的实力。

南方科技大学研究生院成功汇聚了众多中外顶尖学者,一些院士不仅在国内外的学术界享有很高声望,还获得了诸多荣誉,是一所很好的学校。

需要注意的是,这只是初步的数据挖掘,且没有包括南方科技大学所有的院士,具有一定的局限性,未来,可以考虑将南方科技大学数据科学系和计算机科学与技术系的所有导师做一个综合分析,把他们的简介做一个聚类来看该学校该专业的导师的主要研究方法,再结合研究生导师评价网做一个综合的导师推荐引擎,可以为以后升学提供参考,未来会考虑进一步完善这个作业。

谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794006.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VNC简明教程

VNC的安装方法 VNC是一款局域网远程工具。 安装包: https://cry33.lanzoum.com/b00oc0kmj密码:3zum 激活码: FBV9V-7Z3V9-MED3U-47SEU-85T3A 安装过程很简单,一直点下一步就行。激活有两种方式,第一种是邮箱激活,第二种是激活码激活。我们选择第二种激活方式,直接将上面的…

图解六种防火墙规则

图解六种防火墙规则

【个人向】常用日文网站汇总

个人常用日文网站電子辞書 weblio weblio 「収録辞書500以上。国内最大級のオンライン辞書」 官方、权威的电子词典,日本最大的在线辞书。国内的moji辞書上大部分的单词释义都是直接从这上面照搬的(而且还搬不完整,笑)。缺点是查不到某些网络流行语,而且网页排版很古老。以…

使用 nuxi preview 命令预览 Nuxt 应用

title: 使用 nuxi preview 命令预览 Nuxt 应用 date: 2024/9/8 updated: 2024/9/8 author: cmdragon excerpt: 摘要:本文介绍了如何使用nuxi preview命令预览Nuxt.js应用,包括安装和准备环境、启动预览服务器的步骤,以及如何指定根目录和使用自定义.env文件等高级用法。通…

如何打印CSDN博文和博客园博文

如何打印CSDN博文和博客园博文 相信大家看到一些比较不错的博文,都想打印保存一下,但是浏览器自带的打印会发生覆盖的问题并且除了博文之外的文字也会被打印,很不友好; 这里提供一个新的方法: 1、打开想要打印的博文; 2、右键鼠标,选择检查,如图所示。3、点击检查,进入…

线段树分治

适用 某一个条件在查询的一段区间中存在的问题 如:有 \(t\) 个询问,每个询问输入一条边 \(u, v\), 如果当前图中没有这条边,那么插入这条边;反之删除这条边 思路 假设有 \(q\) 组询问,并且 \(q = 8\),我们就对 \(q\) 组询问建一棵线段树,如下图:假设现在第一个条件出现在了 \(3…

无向图的拉普拉斯矩阵

Definition 定义无权重的无向图G=(V,E)。V是顶点集合,E是边集合。 根据G,可得到一系列定义:adjacency matrix(邻接矩阵) 𝐴𝐺 :(1)𝐴𝐺(𝑖,𝑗)={1,(𝑖,𝑗)∈𝐸0,(𝑖,𝑗)∉𝐸 2. degree matrix 𝐷𝐺 : 这是一个对角矩阵,对角线上每个元素…

信息学奥赛初赛天天练-86-NOIP2014普及组-基础题5-球盒问题、枚举算法、单源最短路、Dijkstra算法、Bellman-Ford算法

信息学奥赛初赛天天练-86-NOIP2014普及组-基础题5-球盒问题、枚举算法、单源最短路、Dijkstra算法、Bellman-Ford算法 PDF文档公众号回复关键字:202409081 NOIP 2014 普及组 基础题5 21 把 M个同样的球放到 N个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法…

搭建内网yum仓库

1.架构图2.环境准备 复制一个虚拟机,修改MAC地址,ip,主机名等 [root@kylin-10-sp3 ~]# hostnamectl set-hostname kylin-sp3-cllient [root@kylin-10-sp3 ~]# [root@kylin-sp3-cllient ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 [root@kylin-sp3-cllient ~]#角色…

VS Code 快速输入代码

VS Code 快速输入代码: HTML 代码只输入 ! ,按Enter,这将自动生成一个基本的HTML骨架代码,例如: 快速输入特定的HTML标签,可以使用Emmet插件,它是VS Code的一个扩展,可以通过简短的指令生成复杂的HTML结构。 输入div,按Enter输入div*4,按Enter 例如,输入 ul>li…

微信小程序开发系列4----页面配置--WXML列表渲染

小程序布局-WXML列表渲染 源码获取方式(免费):(1)登录-注册:http://resources.kittytiger.cn/(2)签到获取积分(3)搜索:微信小程序开发2-wxmllist列表渲染

微信小程序开发系列3----页面配置--WXML数据绑定+条件渲染

1小程序布局-WXML数据绑定 有的时候发现需要刷新一下全局的app.js才能有效果。。。。。 2小程序布局-WXML条件渲染 下图会报错:不能在if else 中间插入其他的标签 如下展示一次渲染多个标签使用block 源码获取方式(免费):(1)登录-注册:http://resources.kittytiger.c…