利用python爬取新冠肺炎疫情实时数据+可视化展示

阅读目录

      • 一、对全国总数据绘制饼图
      • 二、对全国各地数据进行地图的绘制
      • 三、对全国的确诊人数做词云图
      • 四、对广东的确诊人数做词云图
      • 五、对湖北的确诊人数做词云图

代码在Jupyter Notebook里运行
数据更新于2月28日

一、对全国总数据绘制饼图

1、获取数据

import time
import json
import requests
from datetime import datetime
import pandas as pd
import numpy as np
def catch_data():
    url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
    reponse = requests.get(url=url).json()
    #返回数据字典
    data = json.loads(reponse['data'])
    return data
data = catch_data()
data.keys()
lastUpdateTime = data['lastUpdateTime']
chinaTotal = data['chinaTotal']
chinaAdd = data['chinaAdd']
print(chinaTotal)
print(chinaAdd)

返回结果:
在这里插入图片描述
2、对总数据进行饼图的绘制:

from pyecharts.charts import Pie
import pyecharts.options as opts
(
    Pie(init_opts=opts.InitOpts(width='720px',height='320px'))#默认900,600
    .add(series_name='', data_pair=[list(z) for z in zip(chinaTotal.keys(), chinaTotal.values())])#饼图
 
).render_notebook()

利用python爬取新冠肺炎疫情实时数据+可视化展示_第1张图片
3、对昨天的数据进行饼图的绘制:

from pyecharts.charts import Pie
import pyecharts.options as opts
(
    Pie(init_opts=opts.InitOpts(width='720px',height='320px'))#默认900,600
    .add(series_name='', data_pair=[list(z) for z in zip(chinaAdd.keys(), chinaAdd.values())])#饼图

).render_notebook()

利用python爬取新冠肺炎疫情实时数据+可视化展示_第2张图片
注:我把heal的去掉了,不然饼图只显示heal,因为治愈的人数是新确诊的10倍,这场战役我们快胜利了!

二、对全国各地数据进行地图的绘制

1、获取数据

import time
import json
import requests
from datetime import datetime
import pandas as pd
import numpy as np
def catch_data():
    url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
    reponse = requests.get(url=url).json()
    #返回数据字典
    data = json.loads(reponse['data'])
    return data
data = catch_data()
data.keys()
lastUpdateTime = data['lastUpdateTime']
# 数据明细,数据结构比较复杂,一步一步打印出来看,先明白数据结构
areaTree = data['areaTree']
# 国内数据
china_data = areaTree[0]['children']
china_list = []
for a in range(len(china_data)):
    province = china_data[a]['name']
    province_list = china_data[a]['children']
    for b in range(len(province_list)):
        city = province_list[b]['name']
        total = province_list[b]['total']
        today = province_list[b]['today']
        china_dict = {}
        china_dict['province'] = province
        china_dict['city'] = city
        china_dict['total'] = total
        china_dict['today'] = today
        china_list.append(china_dict)

china_data = pd.DataFrame(china_list)
china_data.head()

利用python爬取新冠肺炎疫情实时数据+可视化展示_第3张图片
2、对数据进行处理

注:因为这次的数据和以前的不太一样,我就只筛选我需要用到的数据。

# 定义数据处理函数
def confirm(x):
    confirm = eval(str(x))['confirm']
    return confirm
def dead(x):
    dead = eval(str(x))['dead']
    return dead
def heal(x):
    heal =  eval(str(x))['heal']
    return heal
# 函数映射
china_data['confirm'] = china_data['total'].map(confirm)
china_data['dead'] = china_data['total'].map(dead)
china_data['heal'] = china_data['total'].map(heal)
china_data = china_data[["province","city","confirm","dead","heal"]]
china_data.head()

利用python爬取新冠肺炎疫情实时数据+可视化展示_第4张图片
3、提取我们需要的数据

area_data = china_data.groupby("province")["confirm"].sum().reset_index()
area_data.columns = ["province","confirm"]
print(area_data )

利用python爬取新冠肺炎疫情实时数据+可视化展示_第5张图片
4、进行地图的绘制

from pyecharts.charts import Map
import pyecharts.options as opts
from pyecharts.globals import ChartType

(
    Map()
    .add("",[list(z) for z in zip(list(area_data["province"]), list(area_data["confirm"]))], "china",is_map_symbol_show=False)
    .set_global_opts(title_opts=opts.TitleOpts(title="2019_nCoV中国各地区总确诊人数地图"),visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                pieces = [
                    
                        {"min": 5000 , "label": '>5000',"color": "#893448"}, #不指定 max,表示 max 为无限大
                        {"min": 1000, "max": 4999, "label": '1000-4999',"color" : "#ff585e" },
                        {"min": 500, "max": 999, "label": '500-1000',"color": "#fb8146"},
                        {"min": 101, "max": 499, "label": '101-499',"color": "#ffA500"},
                        {"min": 10, "max": 100, "label": '10-100',"color": "#ffb248"},
                        {"min": 0, "max": 9, "label": '0-9',"color" : "#fff2d1" }]))

).render_notebook()

利用python爬取新冠肺炎疫情实时数据+可视化展示_第6张图片
这是我在网上看到的图片(希望整个地图都是小红旗)
利用python爬取新冠肺炎疫情实时数据+可视化展示_第7张图片

三、对全国的确诊人数做词云图

1、保存csv文件

area_data = china_data.groupby("province")["confirm"].sum().reset_index()
area_data.columns = ["province","confirm"]
area_data.to_csv('china.csv',index=False)

2、在pycharm里做词云图

import pandas as pd
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
def draw_cloud(read_name):
    # 参数分别是指定字体、背景颜色、
    wc = WordCloud(font_path='simkai.ttf',
                   background_color="black",  # 背景颜色
                   )
    fp = pd.read_csv(read_name, encoding='utf-8')
    name = list(fp.province)  # 词
    value = fp.confirm  # 词的频率
    for i in range(len(name)):
        name[i] = str(name[i])
    dic = dict(zip(name, value))  # 词频以字典形式存储
    wc.generate_from_frequencies(dic)  # 根据给定词频生成词云
    plt.imshow(wc)
    plt.axis("off")  # 不显示坐标轴
    plt.show()
    wc.to_file('china.png')  # 图片命名
if __name__ == '__main__':
    draw_cloud("china.csv")

利用python爬取新冠肺炎疫情实时数据+可视化展示_第8张图片

四、对广东的确诊人数做词云图

1、保存csv文件

guangdong_data=china_data.loc[china_data.province=='广东',['city','confirm']]
guangdong_data.to_csv('guangdong.csv',index=False)

2、在pycharm里做词云图

import pandas as pd
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
def draw_cloud(read_name):
    # 参数分别是指定字体、背景颜色、
    wc = WordCloud(font_path='simkai.ttf',
                   background_color="black",  # 背景颜色
                   )
    fp = pd.read_csv(read_name, encoding='utf-8')
    name = list(fp.city)  # 词
    value = fp.confirm  # 词的频率
    for i in range(len(name)):
        name[i] = str(name[i])
    dic = dict(zip(name, value))  # 词频以字典形式存储
    wc.generate_from_frequencies(dic)  # 根据给定词频生成词云
    plt.imshow(wc)
    plt.axis("off")  # 不显示坐标轴
    plt.show()
    wc.to_file('guangdong.png')  # 图片命名
if __name__ == '__main__':
    draw_cloud("guangdong.csv")

利用python爬取新冠肺炎疫情实时数据+可视化展示_第9张图片

五、对湖北的确诊人数做词云图

1、保存csv文件

hubei_data=china_data.loc[china_data.province=='湖北',['city','confirm']]
hubei_data.to_csv('hubei.csv',index=False)

2、在pycharm里做词云图

import pandas as pd
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
def draw_cloud(read_name):
    # 参数分别是指定字体、背景颜色、
    wc = WordCloud(font_path='simkai.ttf',
                   background_color="black",  # 背景颜色
                   )
    fp = pd.read_csv(read_name, encoding='utf-8')
    name = list(fp.city)  # 词
    value = fp.confirm  # 词的频率
    for i in range(len(name)):
        name[i] = str(name[i])
    dic = dict(zip(name, value))  # 词频以字典形式存储
    wc.generate_from_frequencies(dic)  # 根据给定词频生成词云
    plt.imshow(wc)
    plt.axis("off")  # 不显示坐标轴
    plt.show()
    wc.to_file('guangdong.png')  # 图片命名
if __name__ == '__main__':
    draw_cloud("hubei.csv")

利用python爬取新冠肺炎疫情实时数据+可视化展示_第10张图片
获取数据参考博客:https://blog.csdn.net/weixin_43130164/article/details/104113559

你可能感兴趣的:(python,数据可视化)