如何利用Python制作新型冠状病毒的线性趋势图?

如何利用Python制作新型冠状病毒的线性趋势图?

一. 数据采集

先找到数据,对数据进行数据采集

数据来源:新浪疫情实时监测

URL: https://news.sina.cn/zt_d/yiqing0121

数据采集:

1.访问https://news.sina.cn/zt_d/yiqing0121

2.打开Chrome开发者工具,点开network,刷新页面,点击各个请求,找到获取取json的请求。

例如:附图

 

https://interface.sina.cn/news/wap/fymap2020_data.d.json?1581410367084&&callback=sinajp_15814103671094932140955446096

返回的数据显示:

City中,cureNum是治愈数,deathNum是死亡人数。value是确诊数

二. 数据处理:

用到以下几个模块

1.requests模块 (用于网页访问)

2.json模块,读取数据

3.图表地图模块:pyecharts

  数据包:echarts-china-provinces-pypkg

  数据包:echarts-china-cities-pypkg

(用pip安装requests,pyecharts以及两个数据包),例如:pip install pyecharts

三.数据处理代码

说明:响应返回数据包含一个js变量需要用正则处理,然后用python自带的json.loads方法转为dict

import requests
import json
import time
from pyecharts.charts import *   #这里主要用上了Map,Geo,如果用所有,用*
from pyecharts import options as opts
#import pandas as pd
import datetime


def get_Data() ->dict:       #获取新浪疫情数据
    url="https://gwpre.sina.cn/interface/fymap2020_data.json?random=0.6606726084028551&_=1581585845511&callback=blankCallBack"
    result =requests.get(url).text  #获得响应结果的text
    json_str = result.split('(')[1].split(')')[0]
    #print (json_str)
    #生成数据字典
    data = json.loads(json_str)    
    return data

  

    return data

数据处理:

def get_daily_data() -> list:
    json_data = get_Data()
    daily_data = json_data['data']['historylist']    #每日新增数据
    return daily_data

生成线性图标代码:

1.china和wuhan的确诊疑似线性趋势图表

def line_chart1():
    daily_data=get_daily_data()

    date_list=[]
    conNum_list=[]    #确诊
    susNum_list=[]    #疑似
    deathNum_list=[]  #死亡
    cureNum_list=[]   #治愈
    wuhan_conNum_list=[]
    wuhan_susNum_list=[]
    wuhan_deathNum_list=[]
    wuhan_cureNum_list=[]
    for daily in daily_data:
        #print (daily)
        date_list.append(daily["date"])
        conNum_list.append(daily["cn_conNum"])
        susNum_list.append(daily["cn_susNum"])
        deathNum_list.append(daily["cn_deathNum"])
        cureNum_list.append(daily["cn_cureNum"])
        wuhan_conNum_list.append(daily["wuhan_conNum"])
        wuhan_susNum_list.append(daily["wuhan_susNum"])
        wuhan_deathNum_list.append(daily["wuhan_deathNum"])
        wuhan_cureNum_list.append(daily["wuhan_cureNum"])
    print (date_list)
    date_list=date_list[::-1]  #倒着读取列表
    conNum_list=conNum_list[::-1]
    susNum_list=susNum_list[::-1]
    wuhan_conNum_list=wuhan_conNum_list[::-1]
    wuhan_susNum_list=wuhan_susNum_list[::-1]
    
    #line_chart1=Line(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS))
    line_chart1 = Line()
    line_chart1.add_xaxis(date_list)
    line_chart1.add_yaxis("中国确诊",conNum_list,is_smooth=True)
    line_chart1.add_yaxis("中国疑似",susNum_list,is_smooth=True)
    line_chart1.add_yaxis("武汉市确诊",wuhan_conNum_list,is_smooth=True)
    line_chart1.add_yaxis("武汉市疑似",wuhan_susNum_list,is_smooth=True)    
    line_chart1.set_global_opts(title_opts=opts.TitleOpts(title="COVID-19中国确诊与疑似趋势图"))
    line_chart1.render('COVID-19_1_{}.html'.format(datetime.date.today()))

2.china和wuhan死亡治愈线性趋势图表

def line_chart2():
    daily_data=get_daily_data()

    date_list=[]
    conNum_list=[]    #确诊
    susNum_list=[]    #疑似
    deathNum_list=[]  #死亡
    cureNum_list=[]   #治愈
    wuhan_conNum_list=[]
    wuhan_susNum_list=[]
    wuhan_deathNum_list=[]
    wuhan_cureNum_list=[]
    for daily in daily_data:
        #print (daily)
        date_list.append(daily["date"])
        conNum_list.append(daily["cn_conNum"])
        susNum_list.append(daily["cn_susNum"])
        deathNum_list.append(daily["cn_deathNum"])
        cureNum_list.append(daily["cn_cureNum"])
        wuhan_conNum_list.append(daily["wuhan_conNum"])
        wuhan_susNum_list.append(daily["wuhan_susNum"])
        wuhan_deathNum_list.append(daily["wuhan_deathNum"])
        wuhan_cureNum_list.append(daily["wuhan_cureNum"])
    print (cureNum_list)
    date_list=date_list[::-1]  #倒着读取列表
    deathNum_list=deathNum_list[::-1]
    cureNum_list=cureNum_list[::-1]
    wuhan_deathNum_list=wuhan_deathNum_list[::-1]
    wuhan_cureNum_list=wuhan_cureNum_list[::-1]
    
    #line_chart1=Line(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS))
    line_chart2 = Line()
    line_chart2.add_xaxis(date_list)
    line_chart2.add_yaxis("中国死亡",deathNum_list,is_smooth=True)
    line_chart2.add_yaxis("中国治愈",cureNum_list,is_smooth=True)
    line_chart2.add_yaxis("武汉市死亡",wuhan_deathNum_list,is_smooth=True)
    line_chart2.add_yaxis("武汉市治愈",wuhan_cureNum_list,is_smooth=True)    
    line_chart2.set_global_opts(title_opts=opts.TitleOpts(title="COVID-19中国死亡与治愈趋势图"))
    line_chart2.render('COVID-19_2_{}.html'.format(datetime.date.today()))

主程序:

if __name__ == "__main__":
    line_chart1()
    line_chart2()

生成趋势图如下:

 

 

发布了135 篇原创文章 · 获赞 6 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/fen_fen/article/details/105299029