children json数据 递归_用Python进行疫情数据可视化(爬虫+pyecharts)

大家好,前几天的Python地图大家都会用了吗?如果数据无法获取的话,我们可以用今天提到的方法进行单日数据的获取,然后将他们concat成一个时间序列的面板数据。

一、疫情数据的获取

这次我们不用WindPy,因为很多小伙伴可能暂时没这个条件调用别人已经做好的数据库。所以今天使用爬虫的方法。

好了,关于爬虫的网页分析部分直接跳过,我也是直接拿的别人找好的请求接口。

url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'

这里直接给出请求的url就行了。

下面,我们直接请求这个url,返回的数据就是最新的数据库。

import requestsimport json

直接请求这个url,并附上当前的时间戳。

r = requests.get(url % time.time(), timeout = 5)

然后解析返回的json数据,这里需要大家有点耐心,一层一层的解析

data = json.loads(r.text)data = json.loads(data['data'])last_update_time = data['lastUpdateTime']data = data['areaTree']data_beijing = data[0]['children'][0]['total']data_districts = data[0]['children'][0]['children']

然后我们就可以根据字典来取值了。

columns_list = ['现存确诊', '累计确诊', '死亡人数', '治愈人数', '疑似发病']df_beijing = pd.DataFrame(columns = columns_list)df_beijing.loc['北京', '现存确诊'] = data_beijing['nowConfirm']df_beijing.loc['北京', '累计确诊'] = data_beijing['confirm']df_beijing.loc['北京', '死亡人数'] = data_beijing['dead']df_beijing.loc['北京', '治愈人数'] = data_beijing['heal']df_beijing.loc['北京', '疑似发病'] = data_beijing['suspect']

各区的数值

df_districts = pd.DataFrame(columns = columns_list)for district in data_districts:    name = district['name'] + '区'    tmp = district['total']    nowconfirm = tmp['nowConfirm']    confirm = tmp['confirm']    suspect = tmp['suspect']    dead = tmp['dead']    heal = tmp['heal']    df_districts.loc[name, '现存确诊'] = nowconfirm    df_districts.loc[name, '累计确诊'] = confirm    df_districts.loc[name, '死亡人数'] = dead    df_districts.loc[name, '治愈人数'] = heal    df_districts.loc[name, '疑似发病'] = suspectdf_districts = df_districts.drop(index = ['境外输入区', '地区待确认区', '外地来京区'])

最后,合并数据并输出数据即可。

# 数据合并data = pd.concat([df_districts, df_beijing], axis=0)# 数据输出filename = '北京疫情数据_更新时间{}'.format(last_update_time).split()[0]data.to_excel(filename + '.xlsx')

二、疫情数据可视化

接下来我们用这个数据来绘制最新一期的疫情地图。

district_data = data.iloc[:-1, :]date = last_update_time.split()[0]plot_data = pd.DataFrame(columns = district_data.columns)for i in list(plot_data.columns):    plot_data.loc[:, i] = [list(zip(district_data[i].index, district_data[i].values))]datemap = (            Map(init_opts=opt.InitOpts(theme=ThemeType.ROMANTIC))            .add("现存确诊", plot_data['现存确诊'].tolist()[0], maptype = '北京', is_map_symbol_show=False)            .add("累计确诊", plot_data['累计确诊'].tolist()[0], maptype = '北京', is_map_symbol_show=False)            .add("死亡人数", plot_data['死亡人数'].tolist()[0], maptype = '北京', is_map_symbol_show=False)            .add("治愈人数", plot_data['治愈人数'].tolist()[0], maptype = '北京', is_map_symbol_show=False)            .add("疑似发病", plot_data['疑似发病'].tolist()[0], maptype = '北京', is_map_symbol_show=False)            .set_global_opts(title_opts=opt.TitleOpts(title='北京实时疫情图-现存确诊人数:' + str(int(data.loc['北京', '现存确诊'])), subtitle='更新时间'+date),                              visualmap_opts=opt.VisualMapOpts(max_=int(np.nanmax(district_data) / 100 + 1) * 100,                            range_text = ['高', '低'],),                            legend_opts=opt.LegendOpts(orient='Vertical',pos_right=0)                             )            )

158eb13f582712fcac096377b0572129.png

这次添加了5个系列,如果需要看现存确诊,就把其他几个点掉就行了。

下面再绘制几个静态图

afff6f1baeec6c3fba09bf639da88a16.png

cec4998a02c6433223bd063cfed83684.png

本期内容就到这里了,如需本文的完整代码,可在公众号后台私聊获取。

我们下期再见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值