首页 > 编程语言 >Python|爬取每日疫情数据并使用matplotlib绘制图像进行分析

Python|爬取每日疫情数据并使用matplotlib绘制图像进行分析

时间:2022-10-25 16:26:28浏览次数:81  
标签:province plt confirm Python list matplotlib 爬取 json data

网页分析

数据源 腾讯疫情实时追踪
打开网址,F12 进入开发者工具(刷新一下页面),如下,所有数据都可以通过接口获取:

国内数据接口:
https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=
各省历史数据接口:
https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?adCode=
国外数据接口:
https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=

数据获取

抓取数据

获取步骤:

  • 先定义接口调用函数
  • 通过接口名获取数据,然后直接获取response对象中的json文件
def get_json():
   """
   获取json数据
   :return: json数据
   """
   url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf'
   headers = {
      'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
   }
   response = requests.get(url=url,headers=headers)
   json_data = response.json()['data']['diseaseh5Shelf']['areaTree'][0]['children']
   return json_data

解析json并写入excel

json文件实际上就是一个字典,我们通过相应的键来找到我们需要的值,也就是地区、新增确诊、治愈人数、死亡人数、现存人数和累计确诊人数,使用list来存储这些数据,随后将各省的数据写入excel库中。这里因为是作业,老师要求使用xlwt库来解决该问题,否则使用pandas库将会更好。

代码如下:

def parser_json(province_catch_data):
	"""
	解析json并将其写入excel
	:param province_catch_data: 爬取下来的json数据
	:return: 
	"""
	workbook = xlwt.Workbook()
	sheet1 = workbook.add_sheet('各省疫情基本情况')
	form_head = ['地区', '新增确诊', '治愈人数', '死亡人数', '现存人数', '累计确诊']
	for j in range(0, len(form_head)):
		sheet1.write(0, j, form_head[j])
	for i in range(len(province_catch_data)):
		province_data_list = []
		region = province_catch_data[i]['name']
		province_data_list.append(region)
		province_today = province_catch_data[i]['today']  # 省当日数据字典
		province_total = province_catch_data[i]['total']  # 省总数据字典
		new_confirm = province_today['confirm']  # 新增确诊
		province_data_list.append(new_confirm)
		heal = province_total['heal']  # 治愈人数
		province_data_list.append(heal)
		dead = province_total['dead']  # 死亡人数
		province_data_list.append(dead)
		now_confirm = province_total['nowConfirm']  # 现存确诊
		province_data_list.append(now_confirm)
		total_confirm = province_total['confirm']  # 累计确诊
		province_data_list.append(total_confirm)
		for k in range(len(province_data_list)):
			sheet1.write(i + 1, k, province_data_list[k])
	workbook.save('tjl.xls')

结果如下:

image-20221025161347955

读取excel并绘制图像

使用xlrd库读入数据并使用matplotlib绘制疫情折线图

def plot_excel(excelpath):
   """
   读取excel文件并使用matplotlib绘制
   :param excelpath: excel文件地址
   :return:
   """
   book = xlrd.open_workbook(excelpath)
   sheet0 = book.sheets()[0]  # 表格索引,从0开始
   regions = sheet0.col_values(0)
   x = regions[1:]
   new_confirms = sheet0.col_values(1)
   y = new_confirms[1:]
   plt.figure(dpi=300, figsize=(16, 8))
   plt.plot(x, y, "g", marker='D', markersize=5, label="新增确诊人数")
   # 绘制坐标轴标签
   plt.xlabel(regions[0])
   plt.ylabel(new_confirms[0])
   plt.xticks(rotation=45, fontsize=16)  # x轴刻度字体大小
   plt.yticks(fontsize=16)  # y轴刻度字体大小
   for a, b in zip(x, y):
      plt.text(a, b, int(b), ha='center', va='bottom', fontsize=16)
   plt.legend(loc='upper right')
   plt.title("各省新增确诊人数统计图")
   # 显示中文字体
   plt.rcParams["font.sans-serif"] = ["SimHei"]
   plt.rcParams['axes.unicode_minus'] = False
   plt.tight_layout()
   plt.show()

结果如下:

image-20221025161110348

因为是老师上课布置的作业,所以很多都懒得调整,需要的话可以自己钻研。

标签:province,plt,confirm,Python,list,matplotlib,爬取,json,data
From: https://www.cnblogs.com/tangjielin/p/16825258.html

相关文章

  • python进阶之路19 地狱入口购物车!!!!
    地狱之门##项目功能#1.用户注册#2.用户登录#3.添加购物车#4.结算购物车##项目说明#用户数据采用json格式存储到文件目录db下一......
  • python json和pickle
    json和pickle共用方法dumps把任意对象序列化成一个strloads把任意str反序列化成原来数据dump把对象序列化后写入到文件对象中load把文件对象中的内容反序列化jso......
  • python生成器
    在Python中,使用了yield的函数被称为生成器(generator)。在Python中,可以使用生成器来一次返回单个元素,从而可以避免大量占用内存。生成器的send()方法可以往生成器发送一......
  • Python3自动化打包项目发布到pypi
    效果D:\Program\Python310\python.exeD:\data\git\PythonLinuxBasicModule\upload.pyC:\Users\刘某usage:twine[-h][--version][--no-color]{register,check,upl......
  • python集合的相关操作
    set1={"1","2","3","4"}set2={"a","b","c","d,"1","2"}一、intersection()交集 res=set1.intersection(set2)print(res)#简写&res=set1&set2prin......
  • python字典相关操作方法
    字典相关函数一、增dic={}dic["ww"]="一表人才,除了帅气的皮囊之外,一无所有"dic['ywz']="渣男"dic["hxl"]="抠脚老汉"print(dic)#fromkeys()使用一组键......
  • 将python2.7项目转为Python3问题记录
    将一个Python2.7开发的测试工具项目转化为Python3。工具:Python自带的2to3.py将所有.py文件进行转化,生成的python3文件为原文件名,python2文件在后面加.bak 1.代码如:b......
  • python列表操作方法
    列表的相关操作(1)列表的拼接(同元组)(2)列表的重复(同元组)(3)列表的切片(同元组)语法=>列表[::]完整格式:[开始索引:结束索引:间隔值](1)[开始索引:]从开......
  • [转载]python跨文件使用全局变量的实现
    python跨文件使用全局变量的实现更新时间:2022-10-2514:46:38发布时间:602天前朗读Python定义了全局变量的特性,使用global关键字修饰1global key_word......
  • python实现证件照排版功能-附代码
    环境要求安装python3环境安装pillow图片处理库开发前准备推荐使用conda创建python环境condacreate-nprpython=3.8#创建环境condaactivatepr#进入环境......