Python采集1000多所世界大学排名数据,制作可视化图

打印 上一主题 下一主题

主题 926|帖子 926|积分 2782

前言

QS世界大学排名(QS World University Rankings)是由英国一家国际教育市场咨询公司Quacquarelli Symonds(简称QS)所发表的年度世界大学排名

采集全球大学排名数据(源码已分享,求点赞)
  1. import requests     # 发送请求
  2. import re
  3. import csv
  4. with open('rank.csv', mode='a', encoding='utf-8', newline='') as f:
  5.     csv_writer = csv.writer(f)
  6.     csv_writer.writerow(['country', 'rank', 'region', 'score_1', 'score_2', 'score_3', 'score_4', 'score_5', 'score_6', 'total_score', 'stars', 'university', 'year'])
  7. def replace(str_):
  8.     str_ = re.findall('(.*?)', str_)[0]
  9.     return str_
  10. url = 'https://www.qschina.cn/sites/default/files/qs-rankings-data/cn/2057712_indicators.txt'
  11. # 1. 发送请求
  12. response = requests.get(url)
  13. # <Response [200]>: 请求成功
  14. # 2. 获取数据
  15. json_data = response.json()     # Python 字典
  16. # 3. 解析数据
  17. # 字典
  18. data_list = json_data['data']
  19. for i in data_list:
  20.     country = i['location']     # 国家/地区
  21.     rank = i['overall_rank']    # 排名
  22.     region = i['region']        # 大洲
  23.     score_1 = replace(i['ind_76'])       # 学术声誉
  24.     score_2 = replace(i['ind_77'])       # 雇主声誉
  25.     score_3 = replace(i['ind_36'])       # 师生比
  26.     score_4 = replace(i['ind_73'])       # 教员引用率
  27.     score_5 = replace(i['ind_18'])       # 国际教师
  28.     score_6 = replace(i['ind_14'])       # 国际学生
  29.     total_score = replace(i['overall'])       # 总分
  30.     stars = i['stars']       # 星级
  31.     uni = i['uni']       # 大学名称
  32.     university = re.findall('<a target="_blank" href="https://www.cnblogs.com/.*?" >(.*?)</a>', uni)[0]
  33.     year = "2021"       # 年份
  34.     print(country, rank, region, score_1, score_2, score_3, score_4, score_5, score_6, total_score, stars, university, year)
  35.     with open('rank.csv', mode='a', encoding='utf-8', newline='') as f:
  36.         csv_writer = csv.writer(f)
  37.         csv_writer.writerow([country, rank, region, score_1, score_2, score_3, score_4, score_5, score_6, total_score, stars, university, year])
复制代码
 


可视化展示

导入所需模块
  1. from pyecharts.charts import *
  2. from pyecharts import options as opts
  3. from pyecharts.commons.utils import JsCode
  4. from pyecharts.components import Table
  5. import re
  6. import pandas as pd
复制代码
 
导入数据
  1. df = pd.read_csv('rank.csv')
  2. # 香港,澳门与中国大陆地区等在榜单中是分开的记录的,这边都归为china
  3. df['loc'] = df['country']
  4. df['country'].replace(['China (Mainland)', 'Hong Kong SAR', 'Taiwan', 'Macau SAR'],'China',inplace=True)
复制代码
 
2021年世界大学排名(QS) TOP 100
  1. bar = (Bar()
  2.        .add_xaxis(university)
  3.        .add_yaxis('', score, category_gap='30%')
  4.        .set_global_opts(title_opts=opts.TitleOpts(title="2021年世界大学排名(QS) TOP 100",
  5.                                                   pos_left="center",
  6.                                                   title_textstyle_opts=opts.TextStyleOpts(font_size=20)),
  7.                         datazoom_opts=opts.DataZoomOpts(range_start=70, range_end=100, orient='vertical'),
  8.                         visualmap_opts=opts.VisualMapOpts(is_show=False, max_=100, min_=60, dimension=0,
  9.                                 range_color=['#00FFFF', '#FF7F50']),
  10.                         legend_opts=opts.LegendOpts(is_show=False),
  11.                         xaxis_opts=opts.AxisOpts(is_show=False, is_scale=True),
  12.                         yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=False),
  13.                                                  axisline_opts=opts.AxisLineOpts(is_show=False),
  14.                                                  axislabel_opts=opts.LabelOpts(font_size=12)))
  15.        .set_series_opts(label_opts=opts.LabelOpts(is_show=True,
  16.                                                   position='right',
  17.                                                   font_style='italic'),
  18.                         itemstyle_opts={"normal": {
  19.                                                     "barBorderRadius": [30, 30, 30, 30],
  20.                                                     'shadowBlur': 10,
  21.                                                     'shadowColor': 'rgba(120, 36, 50, 0.5)',
  22.                                                     'shadowOffsetY': 5,
  23.                                                 }
  24.                                        }
  25. ).reversal_axis())
  26. grid = (
  27.         Grid(init_opts=opts.InitOpts(theme='purple-passion', width='1000px', height='1200px'))
  28.         .add(bar, grid_opts=opts.GridOpts(pos_right='10%', pos_left='20%'))
  29.     )
  30. grid.render_notebook()
复制代码
 

TOP 500中的中国大学
  1. bar = (Bar()
  2.        .add_xaxis(university)
  3.        .add_yaxis('', score, category_gap='30%')
  4.        .set_global_opts(title_opts=opts.TitleOpts(title="TOP 500中的中国大学",
  5.                                                   pos_left="center",
  6.                                                   title_textstyle_opts=opts.TextStyleOpts(font_size=20)),
  7.                         datazoom_opts=opts.DataZoomOpts(range_start=50, range_end=100, orient='vertical'),
  8.                         visualmap_opts=opts.VisualMapOpts(is_show=False, max_=90, min_=20, dimension=0,
  9.                                 range_color=['#00FFFF', '#FF7F50']),
  10.                         legend_opts=opts.LegendOpts(is_show=False),
  11.                         xaxis_opts=opts.AxisOpts(is_show=False, is_scale=True),
  12.                         yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=False),
  13.                                                  axisline_opts=opts.AxisLineOpts(is_show=False),
  14.                                                  axislabel_opts=opts.LabelOpts(font_size=12)))
  15.        .set_series_opts(label_opts=opts.LabelOpts(is_show=True,
  16.                                                   position='right',
  17.                                                   font_style='italic'),
  18.                         itemstyle_opts={"normal": {
  19.                                                     "barBorderRadius": [30, 30, 30, 30],
  20.                                                     'shadowBlur': 10,
  21.                                                     'shadowColor': 'rgba(120, 36, 50, 0.5)',
  22.                                                     'shadowOffsetY': 5,
  23.                                                 }
  24.                                        }
  25. ).reversal_axis())
  26. grid = (
  27.         Grid(init_opts=opts.InitOpts(theme='purple-passion', width='1000px', height='1200px'))
  28.         .add(bar, grid_opts=opts.GridOpts(pos_right='10%', pos_left='20%'))
  29.     )
  30. grid.render_notebook()
复制代码
 

TOP 1000高校按大洲分布

[code]t_data = df[(df.year==2021) & (df['rank']

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表