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

前言

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

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

采集全球大学排名数据(源码已分享,求点赞)

import requests     # 发送请求
import re
import csv

with open('rank.csv', mode='a', encoding='utf-8', newline='') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(['country', 'rank', 'region', 'score_1', 'score_2', 'score_3', 'score_4', 'score_5', 'score_6', 'total_score', 'stars', 'university', 'year'])
def replace(str_):
    str_ = re.findall('<div class="td-wrap"><div class="td-wrap-in">(.*?)</div></div>', str_)[0]
    return str_
url = 'https://www.qschina.cn/sites/default/files/qs-rankings-data/cn/2057712_indicators.txt'
# 1. 发送请求
response = requests.get(url)
# <Response [200]>: 请求成功
# 2. 获取数据
json_data = response.json()     # Python 字典
# 3. 解析数据
# 字典
data_list = json_data['data']
for i in data_list:
    country = i['location']     # 国家/地区
    rank = i['overall_rank']    # 排名
    region = i['region']        # 大洲
    score_1 = replace(i['ind_76'])       # 学术声誉
    score_2 = replace(i['ind_77'])       # 雇主声誉
    score_3 = replace(i['ind_36'])       # 师生比
    score_4 = replace(i['ind_73'])       # 教员引用率
    score_5 = replace(i['ind_18'])       # 国际教师
    score_6 = replace(i['ind_14'])       # 国际学生
    total_score = replace(i['overall'])       # 总分
    stars = i['stars']       # 星级
    uni = i['uni']       # 大学名称
    university = re.findall('<div class="td-wrap"><div class="td-wrap-in"><a href=".*?" class="uni-link">(.*?)</a></div></div>', uni)[0]
    year = "2021"       # 年份
    print(country, rank, region, score_1, score_2, score_3, score_4, score_5, score_6, total_score, stars, university, year)
    with open('rank.csv', mode='a', encoding='utf-8', newline='') as f:
        csv_writer = csv.writer(f)
        csv_writer.writerow([country, rank, region, score_1, score_2, score_3, score_4, score_5, score_6, total_score, stars, university, year])

 

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

可视化展示

导入所需模块

from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.components import Table
import re
import pandas as pd

 

导入数据

df = pd.read_csv('rank.csv')

# 香港,澳门与中国大陆地区等在榜单中是分开的记录的,这边都归为china
df['loc'] = df['country']
df['country'].replace(['China (Mainland)', 'Hong Kong SAR', 'Taiwan', 'Macau SAR'],'China',inplace=True)

 

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

2021年世界大学排名(QS) TOP 100

bar = (Bar()       .add_xaxis(university)       .add_yaxis('', score, category_gap='30%')       .set_global_opts(title_opts=opts.TitleOpts(title="2021年世界大学排名(QS) TOP 100",                                                  pos_left="center",                                                  title_textstyle_opts=opts.TextStyleOpts(font_size=20)),                        datazoom_opts=opts.DataZoomOpts(range_start=70, range_end=100, orient='vertical'),                        visualmap_opts=opts.VisualMapOpts(is_show=False, max_=100, min_=60, dimension=0,                                range_color=['#00FFFF', '#FF7F50']),                        legend_opts=opts.LegendOpts(is_show=False),                        xaxis_opts=opts.AxisOpts(is_show=False, is_scale=True),                        yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=False),                                                 axisline_opts=opts.AxisLineOpts(is_show=False),                                                 axislabel_opts=opts.LabelOpts(font_size=12)))       .set_series_opts(label_opts=opts.LabelOpts(is_show=True,                                                  position='right',                                                  font_style='italic'),                        itemstyle_opts={"normal": {                                                    "barBorderRadius": [30, 30, 30, 30],                                                    'shadowBlur': 10,                                                    'shadowColor': 'rgba(120, 36, 50, 0.5)',                                                    'shadowOffsetY': 5,                                                }                                       }).reversal_axis())grid = (        Grid(init_opts=opts.InitOpts(theme='purple-passion', width='1000px', height='1200px'))        .add(bar, grid_opts=opts.GridOpts(pos_right='10%', pos_left='20%'))    )grid.render_notebook()

 

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

TOP 500中的中国大学

bar = (Bar()
       .add_xaxis(university)
       .add_yaxis('', score, category_gap='30%')
       .set_global_opts(title_opts=opts.TitleOpts(title="TOP 500中的中国大学",
                                                  pos_left="center",
                                                  title_textstyle_opts=opts.TextStyleOpts(font_size=20)),
                        datazoom_opts=opts.DataZoomOpts(range_start=50, range_end=100, orient='vertical'),
                        visualmap_opts=opts.VisualMapOpts(is_show=False, max_=90, min_=20, dimension=0,
                                range_color=['#00FFFF', '#FF7F50']),
                        legend_opts=opts.LegendOpts(is_show=False),
                        xaxis_opts=opts.AxisOpts(is_show=False, is_scale=True),
                        yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=False),
                                                 axisline_opts=opts.AxisLineOpts(is_show=False),
                                                 axislabel_opts=opts.LabelOpts(font_size=12)))
       .set_series_opts(label_opts=opts.LabelOpts(is_show=True,
                                                  position='right',
                                                  font_style='italic'),
                        itemstyle_opts={"normal": {
                                                    "barBorderRadius": [30, 30, 30, 30],
                                                    'shadowBlur': 10,
                                                    'shadowColor': 'rgba(120, 36, 50, 0.5)',
                                                    'shadowOffsetY': 5,
                                                }
                                       }
).reversal_axis())

grid = (
        Grid(init_opts=opts.InitOpts(theme='purple-passion', width='1000px', height='1200px'))
        .add(bar, grid_opts=opts.GridOpts(pos_right='10%', pos_left='20%'))
    )
grid.render_notebook()

 

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

TOP 1000高校按大洲分布

t_data = df[(df.year==2021) & (df['rank']<=1000)]
t_data = t_data.groupby(['region'])['university'].count().reset_index()
t_data.columns = ['region', 'num']
t_data = t_data.sort_values(by="num" , ascending=False) 


bar = (Bar(init_opts=opts.InitOpts(theme='purple-passion', width='1000px', height='600px'))
       .add_xaxis(t_data['region'].tolist())
       .add_yaxis('出现次数', t_data['num'].tolist(), category_gap='50%')
       .set_global_opts(title_opts=opts.TitleOpts(title="TOP 1000高校按大洲分布",
                                                  pos_left="center",
                                                  title_textstyle_opts=opts.TextStyleOpts(font_size=20)),
                        visualmap_opts=opts.VisualMapOpts(is_show=False, max_=300, min_=0, dimension=1,
                                range_color=['#00FFFF', '#FF7F50']),
                        legend_opts=opts.LegendOpts(is_show=False),
                        xaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=False),
                                                 axisline_opts=opts.AxisLineOpts(is_show=False),
                                                 axislabel_opts=opts.LabelOpts(font_size=15)),
                        yaxis_opts=opts.AxisOpts(is_show=False))
       .set_series_opts(label_opts=opts.LabelOpts(is_show=True,
                                                  position='top',
                                                  font_size=15,
                                                  font_style='italic'),
                        itemstyle_opts={"normal": {
                                                    "barBorderRadius": [30, 30, 30, 30],
                                                    'shadowBlur': 10,
                                                    'shadowColor': 'rgba(120, 36, 50, 0.5)',
                                                    'shadowOffsetY': 5,
                                                }
                                       }
))

bar.render_notebook()

 

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

TOP 1000高校按国家分布

fmt_js = """function (params) {return params.name+': '+Number(params.value[2]);}"""

mp = Map()
mp.add(
        "高校数量",
        data_pair,
        "world",
        is_map_symbol_show=False,
        is_roam=False)

mp.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                          itemstyle_opts={'normal': {
                                                'areaColor': '#191970',
                                                'borderColor': '#1773c3',
                                                'shadowColor': '#1773c3',
                                                'shadowBlur': 20,
                                                'opacity': 0.8
                                                    }
                                        })
    
mp.set_global_opts(
        title_opts=opts.TitleOpts(title="TOP 1000高校按国家分布", pos_left='center',
                                  title_textstyle_opts=opts.TextStyleOpts(font_size=18)),
        legend_opts=opts.LegendOpts(is_show=False),
        visualmap_opts=opts.VisualMapOpts(is_show=False, 
                                          max_=100,
                                          is_piecewise=False,
                                          dimension=0,
                                          range_color=['rgba(255,228,225,0.6)', 'rgba(255,0,0,0.9)', 'rgba(255,0,0,1)'])
    )

data_pair = [[x, y] for x, y in data_pair if x in country_list]    
geo = Geo()
    
# 需要先将几个国家的经纬度信息加入到geo中
for k, v in loc.items():
    geo.add_coordinate(k, v[0], v[1])
# 这里将geo的地图透明度配置为0
geo.add_schema(maptype="world", is_roam=False, itemstyle_opts={'normal': {'opacity': 0}})
    
geo.add("", data_pair, symbol_size=1)
# 显示标签配置
geo.set_series_opts(
    label_opts=opts.LabelOpts(
            is_show=True,
            position='right',
            color='white',
            font_size=12,
            font_weight='bold',
            formatter=JsCode(fmt_js)),
    )
    
grid = (
        Grid(init_opts=opts.InitOpts(theme='chalk', width='1000px', height='600px'))
        .add(mp, grid_opts=opts.GridOpts(pos_top="12%"))
        .add(geo, grid_opts=opts.GridOpts(pos_bottom="12%"))
    )

grid.render_notebook()

 

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

大洲-国家分布

c = (Sunburst(
        init_opts=opts.InitOpts(
            theme='purple-passion',
            width="1000px",
            height="1000px"))
    .add(
        "",
        data_pair=data_pair,
        highlight_policy="ancestor",
        radius=[0, "100%"],
        sort_='null',
        levels=[
            {},
            {
                "r0": "20%",
                "r": "48%",
                "itemStyle": {"borderColor": 'rgb(220,220,220)', "borderWidth": 2}
            },
            {"r0": "50%", "r": "80%", "label": {"align": "right"},
                "itemStyle": {"borderColor": 'rgb(220,220,220)', "borderWidth": 1}}
        ],
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(is_show=False, max_=300, min_=0, is_piecewise=False,
                                range_color=['#4285f4', '#34a853', '#fbbc05', '#ea4335', '#ea4335']),
        title_opts=opts.TitleOpts(title="TOP 1000\n\n大学地理分布",
                                               pos_left="center",
                                               pos_top="center",
                                               title_textstyle_opts=opts.TextStyleOpts(font_style='oblique', font_size=20),))
    .set_series_opts(label_opts=opts.LabelOpts(font_size=14, formatter="{b}: {c}"))
)

c.render_notebook()

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python采集1000多所世界大学排名数据,制作可视化图 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python tkinter 制作一个经典的登录界面和点击事件

    前言 Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk”;从本质上来说,它是对 TCL/TK 工具包的一种 Python 接口封装。Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行。 Tkin…

    Python开发 2023年4月2日
    00
  • 一位同学的Python大作业【分析当当网书籍价格、出版社、电子书版本占比数据】

    目录 前言 本次案例实现目标 最基本思路流程: <通用> 一. 数据来源分析 二. 代码实现步骤过程: 代码实现基本四大步骤 代码实现 获取书籍详情信息 发送请求 解析数据 保存数据 运行代码得到结果 可视化图表 书籍总体价格区间 各个出版社书籍数量柱状图 电子书版本占比 书籍评论数据 词云   对于本篇文章有疑问的同学可以加【资料白嫖、解答交流…

    Python开发 2023年4月2日
    00
  • Python控制自己的手机摄像头拍照,并把照片自动发送到邮箱

    前言 今天这个案例,就是控制自己的摄像头拍照,并且把拍下来的照片,通过邮件发到自己的邮箱里。想完成今天的这个案例,只要记住一个重点:你需要一个摄像头 思路 通过opencv调用摄像头拍照保存图像本地 用email库构造邮件内容,保存的图像以附件形式插入邮件内容 用smtplib库发送邮件到指定邮箱 对于本篇文章有疑问的同学可以加【资料白嫖、解答交流群:910…

    Python开发 2023年4月2日
    00
  • 英语不好能学好Python吗?Python常用英文单词汇总

    一、交互式环境与print输出 1、print:打印/输出2、coding:编码3、syntax:语法4、error:错误5、invalid:无效6、identifier:名称/标识符7、character :字符 二、字符串的操作 1、user:用户2、name:姓名/名称3、attribute:字段/属性4、value:值5、key:键 三、重复/转换/…

    Python开发 2023年4月2日
    00
  • 用Python实时获取steam特惠游戏数据

    前言 Steam是由美国电子游戏商Valve于2003年9月12日推出的数字发行平台,被认为是计算机游戏界最大的数码发行平台之一,Steam平台是全球最大的综合性数字发行平台之一。玩家可以在该平台购买、下载、讨论、上传和分享游戏和软件。 而每周的steam会开启了一轮特惠,可以让游戏打折,而玩家就会购买心仪的游戏 传说每次有大折扣,无数的玩家会去购买游戏,可…

    Python开发 2023年4月2日
    00
  • Python tkinter 制作文章搜索软件,有没有方便快捷不知道,好玩就行了

    前言 无聊的时候做了一个搜索文章的软件,有没有更加的方便快捷不知道,好玩就行了 环境使用 Python 3.8 Pycharm 模块使用 import requests import tkinter as tk from tkinter import ttk import webbrowser 最终效果 对于本篇文章有疑问的同学可以加【资料白嫖、解答交流群:…

    Python开发 2023年4月2日
    00
  • Python爬取全球最大视频网站YouTube视频

    前言 作为目前全世界最大的视频网站,它几乎全是用Python来写的该网站当前行业内在线视频服务提供商,该网站的系统每天要处理上千万个视频片段,为全球成千上万的用户提供高水平的视频上传、分发、展示、浏览服务。2015年2月,央视首次把春晚推送到该网站。今天,我们就要用Python来快速批量下载该网站的视频 开发环境 版 本: python 3.8编辑器:pyc…

    Python开发 2023年4月2日
    00
  • Python爬取网易云歌曲评论,做词云分析

    前言 emmmm 没什么说的,想说的都在代码里 环境使用 Python 3.8 解释器 3.10 Pycharm 2021.2 专业版 selenium 3.141.0 本次要用到selenium模块,所以请记得提前下载好浏览器驱动,配置好环境 对于本篇文章有疑问的同学可以加【资料白嫖、解答交流群:753182387】 代码实现 先是安装、导入所需模块 fr…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部