#导入相关库 import json import requests import numpy as np import pandas as pd import matplotlib import matplotlib.pyplot as plt from scipy.optimize import leastsq url="https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" url2="https://view.inews.qq.com/g2/getOnsInfo?name=disease_foreign" #伪装请求头 headers ={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'} #获取网页数据 r=requests.get(url,timeout=30,headers=headers) req=requests.get(url2,timeout=30,headers=headers) #将数据json化去掉/,方便操作 data = json.loads(r.text) data = json.loads(data['data']) data3 = json.loads(req.text) data3 = json.loads(data3['data']) #print(data)查看爬取数据 #从爬取的信息中提取所需信息 china=data['areaTree'][0]['children'] #爬取各大国家疫情情况 country=data3['countryAddConfirmRankList'] #print(china) chinaTotals="确诊人数:"+str(data['chinaTotal']['confirm'])+ "疑似人数:"+str(data['chinaTotal']['suspect'])+ "死亡人数:"+str(data['chinaTotal']['dead'])+ "治愈人数:"+str(data['chinaTotal']['heal'])+ "更新日期:"+data['lastUpdateTime'] print(chinaTotals) #获取中国各省名称,确诊人数,疑似人数,死亡人数,治愈人数 #建立空列表保存数据 Total=[] for i in range(len(china)): Total.append([china[i]['name'],china[i]['total']['confirm'], china[i]['total']['suspect'],china[i]['total']['dead'], china[i]['total']['heal']]) #print(Total) #获取各国新增加确诊人数 #建立空列表保存数据 Country=[] for i in range(len(country)): Country.append([country[i]['nation'],country[i]['addConfirm']]) #print(Country) #将数据转换为二维表方便数据清洗和进一步的数据可视化 data1=pd.DataFrame(Total,index=range(1,35),columns=['省份','确诊人数','疑似人数','死亡人数','治愈人数']) data4=pd.DataFrame(Country,index=range(1,11),columns=['国家','新增确诊人数']) #print(data1)查看输出二维表是否出错 #数据清洗 #查找是否有缺失值 data1.isnull() data4.isnull() #只显示存在缺失的行列 data1[data1.isnull().values==True] data4[data4.isnull().values==True] #查找重复值 data1.duplicated() data4.duplicated() #删除重复值 data2=data1.drop_duplicates() data5=data4.drop_duplicates() #统计空值 data2.isna() data5.isna() print(data2) print(data5) #进行数据可视化 #正常显示中文 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #正常显示负号 plt.rcParams['axes.unicode_minus']=False #创建画布 plt.figure(figsize=(10,10))#设置画布大小 #绘制子图1 axes1=plt.subplot(2,2,1) X=data2.loc[:,'省份'] Y=data2.loc[:,'确诊人数'] #绘制柱状图 plt.bar(X,Y) #标题 plt.title('我国各省至今确诊人数') #x轴名称 plt.xlabel('省份') #y轴名称 plt.ylabel('确诊人数') #绘制子图2 axes2=plt.subplot(2,2,2) #绘制确诊人数,疑似人数,死亡人数,治愈人数的饼图 a=[data['chinaTotal']['confirm'],data['chinaTotal']['suspect'], data['chinaTotal']['dead'],data['chinaTotal']['heal']] #绘制饼图 plt.pie(a,labels=['确诊人数','疑似人数','死亡人数','治愈人数']) #绘制子图3 axes3=plt.subplot(2,1,2) f=data5.loc[:,'国家'] g=data5.loc[:,'新增确诊人数'] #绘制柱状图 plt.bar(f,g) plt.title("国外新增确诊人数") plt.show() #绘制散点图建立回归方程 X=data2.loc[:,'确诊人数'] Y=data2.loc[:,'治愈人数'] X.corr(Y) def func(params,x): k,b=params return k*x+b #设误差函数 def error(params,x,y): return func(params,x)-y #主程序,输出最后的结果 def main(): plt.figure() p0=[1,1] Para=leastsq(error,p0,args=(X,Y)) k,b=Para[0] print("k={:.2f},b={:.2f}".format(k,b)) plt.scatter(X,Y,color="green",label="疫情数据",linewidth=2) #画拟合曲线 x=np.linspace(1,70000,1000) y=k*x+b plt.plot(x,y,color="red",label="拟合曲线",linewidth=2) plt.legend()#绘制图例 plt.grid() plt.show() main() #保存数据 dataframe_file.to_csv("疫情数据.csv", index=False)
本文来自作者[新闻资讯]投稿,不代表辣之友号立场,如若转载,请注明出处:https://lzysp.cn/zsfx/202509-2518.html
评论列表(4条)
我是辣之友号的签约作者“新闻资讯”!
希望本篇文章《收集与分析腾讯国内外疫情数据》能对你有所帮助!
本站[辣之友号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育
本文概览:#导入相关库 import json import requests import numpy as np import pandas as pd import matplo...