2019-08-27

2019年世界大学排名数据爬取及处理分析

一、排名数据的爬取(运用requests库、BeautifulSoup库和正则表达式)

二、爬取数据的整合(运用pandas库和numpy库)

三、数据可视化(运用numpy库和matplotlib库)

四、数据的分析

一、排名数据的爬取
[最好大学网]http://www.zuihaodaxue.cn/worldrankings.html

最好大学2.PNG

最好大学代码.PNG
from bs4 import BeautifulSoup
import requests
import bs4

def gethtml(url):
    try:
        r=requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
        
def recorduniversity(ulist,html):
    soup=BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string, tds[1].string, tds[2].string,tds[3].string,tds[4].string,tds[5].string,tds[6].string,tds[7].string])
    pass

def printuniversity(ulist):
    print("{:^5}{:^6}{:^6}{:^6}{:^6}{:^6}{:^6}{:^6}".format('区域','前20名','前100名','前200名','前300名','前400名','前500名','501-1000'))
    for i in ulist:
        print("{:^5}\t{:^1}\t{:^1}\t{:^1}\t{:^1}\t{:^1}\t{:^1}\t{:^1}".format(i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]))
        
def main():
    ulist=[]
    url='http://www.zuihaodaxue.cn/ARWU-Statistics-2019.html'
    html=gethtml(url)
    recorduniversity(ulist, html)
    printuniversity(ulist)
     
main()

注:此处使用的format函数处理字符串,将相关的字符串规则地传入到列表中。(:冒号是声明格式化,^ 表示中间对齐,^ 后的数字表示宽度)


工程图.PNG

二、排名数据的整合

import pandas as pd
university=pd.read_excel(r"C:\Users\lenovo\Desktop\universityRank.xlsx")
univer=university.replace("—",0)
print(univer)
University=univer.set_index('区域')
University.T
print(University.T)
a=University.T['美洲']
b=University.T['欧洲']
c=University.T['亚太']
d=University.T['非洲']

注:- 1. 此处使用到了replace函数将数据中的“-”替换为0(以便之后的作图)

    1. 运用set.index重设行索引,为下一步的转置做准备。
    1. 使用T转置,有助于之后作图的数据获取。
      具体看下图
      图3.PNG

三、数据可视化(作图)

import numpy as np
x=np.array([1,2,3,4,5,6,7])
import matplotlib.pyplot as plt
plt.subplot(1,1,1)
plt.rcParams['font.sans-serif']='SimHei'
plt.plot(x,a,color='y',linestyle='dashed',marker='o',markersize=3,label='美洲')
plt.plot(x,b,color='r',linestyle='dashdot',marker='o',markersize=3,label='欧洲')
plt.plot(x,c,color='b',linestyle='solid',marker='o',markersize=3,label='亚太')
plt.plot(x,d,color='k',linestyle='dotted',marker='o',markersize=3,label='非洲')
plt.legend()
for p,q in zip(x,a):
    plt.text(p,q,q,ha="center",va="bottom",color='y',fontsize=11)
for p,q in zip(x,b):
    plt.text(p,q,q,ha="center",va="bottom",color='r',fontsize=11)
for p,q in zip(x,c):
    plt.text(p,q,q,ha="center",va="bottom",color='b',fontsize=11)
for p,q in zip(x,d):  
    plt.text(p,q,q,ha="center",va="bottom",color='k',fontsize=11)
plt.title("2019年世界大学排名情况",loc="center",fontproperties="SimHei")
plt.xlabel("排名",fontproperties="SimHei")
plt.ylabel("个数",fontproperties="SimHei")
plt.xticks(np.arange(1,8,1),["前20名","前100名","前200名","前300名","前400名","前500名","第501-1000名"],fontproperties="SimHei")

注:1. rcParams解决了中文乱码的情况。

  1. zip函数将可迭代的对象作为参数,将对象中对应的元素打包,返回由这些组成的列表。
  2. 作图时注意设置color(折线颜色设置)和linestyle(折线的形状的设置),有利于我们区分和比较数据。
  3. 完善数据时,还需要关注plt.text的参数设置,字符串显示的位置(ha:水平方向,va:垂直方向)以及颜色大小。
  4. 作图时设置完label(图标名称)后要使用plt.legend()来显示在图中,一般默认显示一列。


    tu2.png

四、数据的分析

    1. 从折线图我们可以清楚的看出进入世界大学前1000名的非洲区域大学的数量为20,处于较低水平。
    1. 欧洲的排名居于4大区域的第一位,2019年进入世界大学前1000名的欧洲大学有763所,比非洲高出约97个百分点。
    1. 美洲地区的大学进入前20名的数量是最多的,有16所大学,是欧洲的大学的四倍,并整体处于较好水平。
    1. 亚太地区的大学位于第501~1000名的大学数量最多,有206所,占了该排名段数量的三分之一。

你可能感兴趣的:(2019-08-27)