技术栈
python+pyecharts+爬虫
爬取网址:
https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=chinaDayList,chinaDayAddList,nowConfirmStatis,provinceCompare
和
https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
数据爬取:
一.爬取国内疫情数据
首先导入所需的模块:
编写简单的爬取肺炎数据的爬虫,首先在console里面找到的API:
这里使用了time模块去和时间做匹配本来想做定时功能的,定时的爬取数据
然后响应内容就是对应的json对象
发现resp.json()的作用就是将API页面的json转化为字典
然后我想取出其中的值:
结果报错:切片应该是int而不是str,仔细看了页面才知道原来data的值被封成了str
所以json.loads()作用是把str转化为字典,如果没有封成str就不用这一步。
接着就是遍历这个列表,用一个字典取存储,把新增确诊人数、累计确诊人数、死亡人数、治愈人数、死亡率、治愈率存储进字典,然后添加进列表dataset里,最后在用pandas的DataFrame将dataset转换为表格形式,将其存进一个csv文件里
二.爬取近两个月内的中国确诊人数
导入所需的库
import requests
# import json
import pandas as pd
利用requests库去模拟浏览器请求数据
将爬取的内容转换为字典并取其中的值,resp.json()的作用就是将API页面的json转化为字典,用字典去存储爬取下来了的日期值还有确诊人数值,最后将字典添加到一个列表里,并打印列表的数据观察
接着将爬取的列表数据利用pandas这个库,将其转换为DataFrame对象,并存储到当前目录下的国内近两个月新增确诊数csv文件中
地图实现:
引入所需的库pandas和库pyecharts的Map和options
对csv文件进行读取并获取省份列表和确诊人数,将两个列表用zip连接起来形成一个新的列表
核心部分,构造一个画地图所需的Map,初始化配置项,初始化该地图的宽高还有网页标题;
将列表的数据添加进图中;
设置全局配置项,包括设置标题,视觉映射配置项(设置分段的规格),以及将分段字段设置为True;
最后将画出的地图保存在一个html进行展示,调用的方法是render()。
近两个月中国确诊人数折线图的实现:
折线图所需的库有Line和options以及处理数据的pandas
对数据进行处理,获取csv文件中的日期列表和对应日期的确诊人数列表,因为日期列表如果不转换成字符串类型类别会使得折线图混乱,所以日期列表需要转换为字符串列表
核心部分:构造一个Line对象,设置初始化配置项,设置画布的宽高还有网页标题;
添加x轴的数据以及添加y轴的数据;
设置全局配置项(设置标题);
最后调用render方法,生成中国疫情折线图
34个省份的出生率和死亡率柱状图的实现
柱状图所需的库有Bar和options以及处理数据的pandas
柱状图所需的数据有省份的名称列表、治愈率列表、死亡率列表,运用pandas读取国内疫情数据的csv文件,并获取对应的名称、治愈率、死亡率存储到对应的列表中。
核心部分:画柱形图所需的Bar对象,初始化配置项,设置画布的宽和高还有网页标题;
x轴添加省份列表,y轴添加治愈率和死亡率列表;
设置全局配置项,设置标题配置项;
最后调用render方法绘制生成柱状图。
34个省份的确诊人数词云图的实现:
导入词云图所需的库options pandas WordCloud
绘制词云图,词云图的数据是一个列表,列表的数据格式为省份列表和省份对应的确诊人数列表,所以先读取csv的数据获取省份确诊人数和省份名称添加到一个zip中,然后将zip转换为列表
核心部分:画词云图需要一个WordCloud,然后初始化配置项,添加网页标题,宽和高默认;
接着利用data_pair添加列表数据,设置显示的次的大小的范围;
接着设置全局配置项,设置标题,设置标题文本的配置项(设置字体大小);
设置工具提示配置项;
最后调用render方法画出词云图。
34个省份的确诊人数环图(饼图)的实现:
echarts的init方法
导入饼图所需的库
利用pandas的read_csv方法读取csv中省份的数据存储到列表还有省份确诊人数存储到列表
核心部分:画饼图需要一个Pie对象,然后初始化配置项,添加网页标题,宽和高;
接着调用add方法设置饼图的数据data_pair,设置环图的半径;
最后调用render方法画出饼图。
最终成品
全国各个省份的确诊人数环图
全国各个省份的确诊人数词云图
全国各个省份的确诊人数地图
全国近两个月的确诊人数折线图![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/67331549a928258f827db15b245f6f95.png)
全国各个省份的死亡率和治愈率柱形图![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3ad6f14ab11d6e23a269b75e5cabb506.png)
参考资料
json.loads()和response.json()的区别
推荐一款Python数据可视化神器
python 数据可视化
[pyecharts学习笔记]——全局配置项(InitOpts初始化配置项)
pyecharts官网