摘要:本研究运用Python的数据分析与可视化库,如pandas、matplotlib和seaborn,对2026 QS世界大学排名数据集进行深入剖析。通过多种可视化图表,包括柱状图、雷达图、箱线图、回归图和散点图,从国家分布、师生比与国际学生比例对比、中国高校关键指标、综合分数分布、科研与学术声誉关系以及排名年度变化等多个维度。
关键指标介绍:
我用夸克网盘给你分享了「2026 QS世界大学排名数据」,点击链接或复制整段内容,打开「夸克APP」即可获取。
链接:https://pan.quark.cn/s/31735260913a
关键词:QS世界大学排名;数据可视化;高校评估;数据分析
一、引言
QS世界大学排名作为全球广泛关注的高校评价体系,其数据集蕴含着丰富的信息。通过对2026 QS世界大学排名数据集的可视化分析,能够直观地呈现高校在不同维度的表现,为教育领域的研究和决策提供有力支持。本研究旨在利用多种可视化方法,深入挖掘数据背后的规律和特征。
二、数据预处理与环境设置
2.1 库导入与绘图风格设置
首先导入必要的Python库,并设置全局绘图风格为ggplot
,以获得更美观的可视化效果。同时,配置中文字体为黑体,解决中文显示问题,并确保负号能正确显示。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import cm
plt.style.use('ggplot')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
2.2 数据加载
从指定路径加载2026 QS世界大学排名数据集。
df = pd.read_csv('E:\\pycharm_workspace\\数据集\\2026QSWorldUniversityRankings.csv')
三、可视化分析
3.1 国家/地区分布(Top 50)
绘制柱状图展示排名前50的大学在不同国家/地区的分布情况。
plt.figure(figsize=(14, 6))
top50 = df.head(50)
country_counts = top50['Country/Territory'].value_counts()
sns.barplot(
x=country_counts.index,
y=country_counts.values,
hue=country_counts.index,
palette='viridis',
legend=False,
dodge=False
)
plt.title(f'Top {len(top50)} Universities by Country (2026 QS Ranking)',
fontweight='bold', fontsize=14)
plt.xticks(rotation=45, ha='right')
plt.ylabel('Number of Universities', fontsize=12)
plt.xlabel('Country/Territory', fontsize=12)
plt.tight_layout(pad = 2)
plt.show()
此柱状图使用viridis
调色板,通过设置hue
突出不同国家/地区,legend=False
和dodge=False
简化图表显示。tight_layout
函数的pad
参数增加了图表周围的空白,避免元素重叠,使图表更清晰。该图直观呈现了前50名大学在各国的数量分布。
3.2 师生比与国际学生比例对比
通过柱状图展示排名前100的大学中各国师生比的平均得分情况。
plt.figure(figsize=(14, 6))
top100 = df.head(100)
fsr_by_country = top100.groupby('Country/Territory')['FSR SCORE'].mean().sort_values(ascending=False)
sns.barplot(
x=fsr_by_country.index,
y=fsr_by_country.values,
hue=fsr_by_country.index,
palette='plasma',
legend=False,
dodge=False
)
plt.title('Average Faculty - Student Ratio Score by Country (Top 100)',
fontweight='bold', fontsize=14)
plt.xticks(rotation=45, ha='right')
plt.ylabel('Faculty - Student Ratio Score', fontsize=12)
plt.xlabel('Country/Territory', fontsize=12)
plt.tight_layout(pad = 2)
plt.show()
同样使用柱状图,plasma
调色板增强视觉效果,通过分组计算各国师生比的平均得分并按降序排列。图表设置与前一个柱状图类似,旨在清晰展示各国师生比平均得分的差异。
3.3 中国高校关键指标雷达图
创建函数绘制中国高校在多个关键指标上的雷达图。
def radar_plot(uni_name):
try:
china_uni = df[df['Institution Name'].str.contains(uni_name)].iloc[0]
except IndexError:
print(f"未找到包含 '{uni_name}' 的大学,请检查名称是否正确")
return
categories = ['AR SCORE', 'ER SCORE', 'FSR SCORE', 'CPF SCORE', 'IRN SCORE']
values = china_uni[categories].tolist()
values += values[:1]
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
angles += angles[:1]
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw={'polar': True})
ax.fill(angles, values, color='dodgerblue', alpha=0.25)
ax.plot(angles, values, color='dodgerblue', linewidth=2, label=uni_name)
ax.set_ylim(0, 100)
ax.set_xticks(angles[:-1])
ax.set_xticklabels([label.replace(' SCORE', '') for label in categories], fontsize=12)
ax.set_rlabel_position(45)
ax.grid(True, linestyle='--', alpha=0.5)
ax.set_theta_offset(np.pi / 2)
ax.set_theta_direction(-1)
plt.title(f'{uni_name} Key Indicators (2026 QS)',
fontweight='bold', fontsize=14, pad = 30)
plt.legend(loc='lower right', bbox_to_anchor=(1.3, 0.1))
plt.tight_layout(pad = 3)
plt.show()
radar_plot('Peking University')
radar_plot('Tsinghua University')
该函数通过提取高校特定指标数据,构建雷达图。通过设置角度、刻度、标签和颜色等参数,使雷达图能够清晰展示高校在学术声誉(AR)、雇主声誉(ER)、师生比(FSR)、科研实力(CPF)和国际学生比例(IRN)等关键指标上的表现。tight_layout
函数的pad
参数和bbox_to_anchor
参数调整了图表布局和图例位置,增强了可读性。
3.4 综合分数分布箱线图
绘制箱线图分析排名前10国家的高校综合分数的分布情况。
plt.figure(figsize=(12, 6))
top_countries = df['Country/Territory'].value_counts().head(10).index
top_countries_box = df[df['Country/Territory'].isin(top_countries)]
sns.boxplot(
data=top_countries_box,
x='Country/Territory',
y='Overall SCORE',
hue='Country/Territory',
palette='Set3',
legend=False,
dodge=False,
showfliers=False
)
plt.title('Distribution of Overall Scores by Country (Top 10 Countries)',
fontweight='bold', fontsize=14)
plt.xticks(rotation=45, ha='right')
plt.ylabel('Overall Score', fontsize=12)
plt.xlabel('Country/Territory', fontsize=12)
plt.tight_layout(pad = 2)
plt.show()
箱线图使用Set3
调色板,通过设置hue
区分不同国家/地区,showfliers=False
隐藏异常值,使图表更聚焦于主要数据分布。该图有助于观察不同国家高校综合分数的中位数、四分位数以及分布范围。
3.5 科研与学术声誉关系
利用回归图展示学术声誉与科研影响力之间的关系。
plt.figure(figsize=(10, 8))
sns.regplot(
data=df,
x='AR SCORE',
y='CPF SCORE',
scatter_kws={'alpha':0.6, 'color':'#2ca02c'},
line_kws={'color':'red', 'linestyle':'--'}
)
plt.title('学术声誉与科研影响力关系\n(CPF = 师均论文引用)', fontweight='bold')
plt.xlabel('学术声誉得分 (AR)')
plt.ylabel('科研影响力得分 (CPF)')
plt.grid(True, alpha=0.3)
plt.show()
回归图通过scatter_kws
设置散点的透明度和颜色,line_kws
设置回归线的颜色和线型。此图直观展示了学术声誉得分(AR)与科研影响力得分(CPF,师均论文引用)之间的关系,网格线的设置增强了读数的准确性。
3.6 排名年度变化
分析并可视化QS排名的年度变化情况。
# ====================== 8. 排名年度变化 ======================
# 将 Previous Rank 和 2026 Rank 列转换为数值类型,无法转换的值会被设置为 NaN
df['Previous Rank'] = pd.to_numeric(df['Previous Rank'], errors='coerce')
df['2026 Rank'] = pd.to_numeric(df['2026 Rank'], errors='coerce')
# 计算排名变化
df['Rank Change'] = df['Previous Rank'] - df['2026 Rank']
# 筛选出上升和下降最多的大学前十位
top_10_rise = df.nlargest(10, 'Rank Change')[['Institution Name', 'Rank Change']]
top_10_drop = df.nsmallest(10, 'Rank Change')[['Institution Name', 'Rank Change']]
# 输出结果
print("上升最多的大学前十位:")
print(top_10_rise)
print("\n下降最多的大学前十位:")
print(top_10_drop)
significant_changes = df[abs(df['Rank Change']) >= 10]
plt.figure(figsize=(12, 6))
sns.scatterplot(
x='Previous Rank',
y='2026 Rank',
data=significant_changes,
hue='Rank Change',
size=abs(df['Rank Change']),
sizes=(50, 200),
palette='coolwarm'
)
plt.plot([0, 200], [0, 200], 'k--', alpha=0.3) # 参考线
plt.title('QS排名年度变化 (变化≥10名的大学)', fontweight='bold')
plt.xlabel('2025年排名')
plt.ylabel('2026年排名')
plt.grid(True, alpha=0.3)
plt.legend(bbox_to_anchor=(1.05, 1))
plt.tight_layout()
plt.show()
首先将前一年排名和2026年排名列转换为数值类型,计算排名变化。筛选出排名变化≥10名的大学数据进行可视化。散点图通过hue
表示排名变化值,size
表示排名变化的绝对值,palette='coolwarm'
提供直观的颜色映射。参考线的绘制便于观察排名变化趋势,全面展示了QS排名的年度显著变化情况。