欢迎关注 『Python』 系列,持续更新中
欢迎关注 『Python』 系列,持续更新中
爬取近5年的中国大学排行榜信息,项目实战
在爬虫数据分析可视化实战专栏有完整代码,一步步分析实现功能。
建议先观看前面的文章,循序渐进。
data=pd.read_excel(“爬取近5年的排行榜信息.xls”,index_col=0)
不带列索引读取excel的数据
years=list(data.index)
获取数据的行索引,也就是获取年份列表 [2017, 2018, 2019, 2020, 2021]
data=data.values
转为为numpy数组,便于进一步操作(个人习惯)
my_dic.get(i[0],0)==0
从字典中读取键名为“i[0]”的值,如果无法读取到值,那么返回0
nparray.T
np矩阵的矩阵转置
print(df_result.to_csv(“爬取近5年的排行榜信息.csv”))
导出csv文件
因为我们要绘制gif动图,要求数据结构如上行索引是年份时间,列索引是各个大学,数据分数是数据类型不能是字符串
因为前面的excel读取每个单元格内存放的是列表的字符串,所以我们要手动把字符串替换掉[
,]
,'
然后split切分为列表
print(data[0][0].replace("[","").replace("]","").replace("'","").split(", "))#测试输出一个转化后的实例大学列表
print(data[0][0].replace("[","").replace("]","").replace("'","").split(", ")[0])#测试输出一个转化后的实例大学名字
print(data[0][0].replace("[","").replace("]","").replace("'","").split(", ")[1])#测试输出一个转化后的实例大学分数
my_dic={}#新建一个空字典,每个学校一个键,值是一个列表存放学校近五年的分数
my_dic_symbol={}#新建一个空字典,每个学校一个键,值是本年学校是否上榜
#获取所有大学的名字
for year in data:#遍历5年
for i in year:#遍历每一年的所有数据
i=i.replace("[","").replace("]","").replace("'","").split(", ")
if my_dic.get(i[0],0)==0:#如果字典中本来没有这个键,新建一个键
my_dic_symbol[i[0]]=False#设置标志字典初始值为false
my_dic[i[0]] = []#设置数据字典为列表
my_dic[i[0]].append(i[0])#放入大学名字
all_university=list(my_dic)#取得键
all_university=np.array(all_university)#转为np数组
print(all_university)#得到所有的大学名字(5年内上榜过即可,不一定每年都上榜)
for year in data:#遍历5年
#标志本年度,该大学是否上榜过,如果没有,要给大学列表值加一个0
this_my_dic_symbol=my_dic_symbol.copy()#注意要新建一个对象,不要直接赋值
for i in year:#遍历每一年的所有数据
i=i.replace("[","").replace("]","").replace("'","").split(", ")
if my_dic.get(i[0],0)==0:#如果字典中本来没有这个键,新建一个键,新建列表放入第一个数
my_dic[i[0]]=[]
my_dic[i[0]].append(i[1])
this_my_dic_symbol[i[0]]=True
else:#如果字典中本来有这个键,直接放入下一个数
my_dic[i[0]].append(i[1])
this_my_dic_symbol[i[0]]=True
for i in all_university: # 遍历每一年的所有数据
if this_my_dic_symbol[i]==False:#今年这个学校没有上榜
my_dic[i].append(0)
print(my_dic)#得到最终的字典
-------下面是前面文章的步骤,如果看过可以跳过---------
import pandas as pd
import numpy as np
result=pd.DataFrame(result,index=list(np.arange(start_year,end_year+1)),columns=list(np.arange(1,31)))
result=pd.DataFrame(result,index=list(np.arange(start_year,end_year+1)),columns=list(np.arange(1,31)))
print(result)
result.to_excel("爬取近5年的排行榜信息.xls")
# @Time : 2022/5/19 7:34
# @Author : 南黎
# @FileName: 4.从excel中读取数据处理数据.py
import numpy as np
import pandas as pd
data=pd.read_excel("爬取近5年的排行榜信息.xls",index_col=0)
years=list(data.index)#获取年份列表 [2017, 2018, 2019, 2020, 2021]
data=data.values#转为为numpy数组,便于进一步操作(个人习惯)
print(data)#测试输出读取到的所有数
print(data[0][0].replace("[","").replace("]","").replace("'","").split(", "))#测试输出一个转化后的实例大学列表
print(data[0][0].replace("[","").replace("]","").replace("'","").split(", ")[0])#测试输出一个转化后的实例大学名字
print(data[0][0].replace("[","").replace("]","").replace("'","").split(", ")[1])#测试输出一个转化后的实例大学分数
my_dic={}#新建一个空字典,每个学校一个键,值是一个列表存放学校近五年的分数
my_dic_symbol={}#新建一个空字典,每个学校一个键,值是本年学校是否上榜
#获取所有大学的名字
for year in data:#遍历5年
for i in year:#遍历每一年的所有数据
i=i.replace("[","").replace("]","").replace("'","").split(", ")
if my_dic.get(i[0],0)==0:#如果字典中本来没有这个键,新建一个键
my_dic_symbol[i[0]]=False#设置标志字典初始值为false
my_dic[i[0]] = []#设置数据字典为列表
my_dic[i[0]].append(i[0])#放入大学名字
all_university=list(my_dic)#取得键
all_university=np.array(all_university)#转为np数组
print(all_university)#得到所有的大学名字(5年内上榜过即可,不一定每年都上榜)
for year in data:#遍历5年
#标志本年度,该大学是否上榜过,如果没有,要给大学列表值加一个0
this_my_dic_symbol=my_dic_symbol.copy()#注意要新建一个对象,不要直接赋值
for i in year:#遍历每一年的所有数据
i=i.replace("[","").replace("]","").replace("'","").split(", ")
if my_dic.get(i[0],0)==0:#如果字典中本来没有这个键,新建一个键,新建列表放入第一个数
my_dic[i[0]]=[]
my_dic[i[0]].append(i[1])
this_my_dic_symbol[i[0]]=True
else:#如果字典中本来有这个键,直接放入下一个数
my_dic[i[0]].append(i[1])
this_my_dic_symbol[i[0]]=True
for i in all_university: # 遍历每一年的所有数据
if this_my_dic_symbol[i]==False:#今年这个学校没有上榜
my_dic[i].append(0)
print(my_dic)#得到最终的字典
my_dic_university=list(my_dic)#取得键
my_dic_university=np.array(my_dic_university)#转为np数组
print(my_dic_university)
my_dic_mark=np.array(list(my_dic.values()))#取得值,,并转为np数组
print(my_dic_mark)
# print(my_dic_mark[:,0])#切片——测试输出列索引名
# print(my_dic_mark[:,1:])#切片——测试输出数据
df_result=pd.DataFrame(my_dic_mark[:,1:],index=my_dic_mark[:,0],columns=years).T #矩阵转置
print(df_result.to_csv("爬取近5年的排行榜信息.csv"))
大家喜欢的话,给个,点个关注!继续跟大家分享敲代码过程中遇到的问题!
版权声明:
发现你走远了@mzh原创作品,转载必须标注原文链接
Copyright 2022 mzh
Crated:2022-1-10
欢迎关注 『Python』 系列,持续更新中
欢迎关注 『Python』 系列,持续更新中
【Python安装第三方库一行命令永久提高速度】
【使用PyInstaller打包Python文件】
【更多内容敬请期待】