大连专业模板网站制作公司,新建网页的方法有哪些,php网站建设制作流程,企业网络推广网站爬取历年中国大学排名(前20名)#xff0c;并随机选取一所高校画图展示其历年总分变化,并计算平均分#xff0c;在图上展示该平均分直线#xff1a;
代码如下#xff1a;
import matplotlib.pyplot as plt
import pandas as pd
import requests
import randomdef main(yea…爬取历年中国大学排名(前20名)并随机选取一所高校画图展示其历年总分变化,并计算平均分在图上展示该平均分直线
代码如下
import matplotlib.pyplot as plt
import pandas as pd
import requests
import randomdef main(year):for i in range(2015, year 1):html get_one_page(i)if html :print(爬取失败)else:tb parse_one_page(html, i)save_csv(tb)print(i, 年排名提取完成)analysis()#获取网页
def get_one_page(year):try:urlhttps://www.shanghairanking.cn/rankings/bcur/{}.format(year)rrequests.get(url,timeout30)r.raise_for_status()r.encodingutf-8return r.textexcept:return #在网页上爬取数据
def parse_one_page(html,i):tbpd.read_html(html)[0]print(tb.to_string())tb.columns[排名,学校名称,2,3,总分,5]tb.drop([2,3,5],axis1,inplaceTrue) #删除不需要的列tb[年份]i #添加一列名称为年份的列其值为ireturn tb #返回DataFrame#将DataFrame转化为csv文件
def save_csv(tb):tb.to_csv(runiversity_rank.csv,modea,encodingutf-8,headerTrue,index0)#绘制图像
def analysis():df pd.read_csv(university_rank.csv) #读取指定文件csv数据# 选取一个高校进行展示这里随机选择一个university random.choice(df[学校名称].unique())df df[df[学校名称] university] #将选定学校的数据筛选出来df df.sort_values(年份, ascendingTrue) #将年份设为排序的关键字升序排列#将df中的年份转换为列表,并将列表中的元素转换为整型类型保存到变量year中year [int(x) for x in df.loc[:, 年份].tolist()] #将df中的总分转换为列表并将列表中的元素保存到rank中rank [eval(x) for x in df.loc[:, 总分].tolist()]# 计算平均分avg_score sum(rank) / len(rank)plt.rcParams[font.sans-serif] [SimHei]#设置折线图反应不同年份总分变化趋势plt.plot(year, rank, labeluniversity)#绘制平均分的直线并设置之前的相应性质plt.axhline(yavg_score, colorr, linestyle--, label平均分)#用注释标出平均分数值plt.annotate(f平均分: {avg_score:.2f}, xy(year[-1], avg_score), xytext(10, 10),textcoordsoffset points, colorr)plt.xlabel(年份)plt.ylabel(总分)plt.legend()plt.show()#调用main函数
main(2023)运行结果如下