数据可视化:Python+Plotly绘制新冠疫情走势图(二)

第一篇实践了画某一省份或城市的数据图,本篇尝试通过函数的形式,展示多个国家/地区的对比图,灵活性更高。
第一篇指路:
数据可视化:Python+Plotly绘制新冠疫情走势图(一)

通过函数快速绘制指定省/市的数据图

写一个函数判断传入的是省份还是城市

#函数学的不太好,经常弄不清需要return什么值,写的逻辑和格式不好请见谅,至少功能是可以实现了
#由于省和市需要用到的数据列不同,因此首先需要写一个判断输入的是省还是市的函数,定义为if_is_Province

def if_is_Province(x):
    if x in df['provinceName'].tolist():#如果传入的是省名,则从province相关列里取数
        df_pro = df.loc[df['provinceName']== x ].sort_values(by='updateTime',ascending=False).drop_duplicates(subset='时间',inplace=False)#去除重复数据
        df_pro.set_index('时间',inplace=True)#将时间设置为索引
        df_pro.sort_values(by='时间',inplace=True)#按时间升序
#增加死亡率和治愈率两列数据  df_pro['deathrate']=df_pro['province_deadCount']/df_pro['province_confirmedCount']
        df_pro['curedrate']=df_pro['province_curedCount']/df_pro['province_confirmedCount']
#将需要用到的数据存下来
        date = df_pro.index
        confirmedCount = df_pro['province_confirmedCount']
        deadCount = df_pro['province_deadCount']
        curedCount = df_pro['province_curedCount']
        deathrate = df_pro['deathrate']
        curedrate = df_pro['curedrate']
    if x in df['cityName'].tolist():#如果传入的是市名,则从city相关列里取数
        df_city = df.loc[df['cityName']== x ].sort_values(by='updateTime',ascending=False).drop_duplicates(subset='时间',inplace=False)
        df_city.set_index('时间',inplace=True)
        df_city.sort_values(by='时间',inplace=True)
        date = df_city.index.tolist()
#增加死亡率和治愈率两列数据 
        df_city['deathrate']=df_city['city_deadCount']/df_city['city_confirmedCount']
        df_city['curedrate']=df_city['city_curedCount']/df_city['city_confirmedCount']
#将需要用到的数据存下来
        confirmedCount = df_city['city_confirmedCount']
        deadCount = df_city['city_deadCount']
        curedCount = df_city['city_curedCount']
        deathrate = df_city['deathrate']
        curedrate = df_city['curedrate']
#函数的返回值
    return date, confirmedCount, deadCount, curedCount,deathrate,curedrate

写一个函数快速绘制出指定省/市的数据图

def ProvinceOrCity_data(x):
    date, confirmedCount, deadCount, curedCount,deathrate,curedrate = if_is_Province(x)#调用判断省市的函数,取出对应的值
    trace1 = go.Scatter(x = date,y = confirmedCount,mode='lines+text',name='累计确诊数',)
    trace2 = go.Scatter(x = date,y = deadCount,mode='lines+text',name='死亡人数',
                         xaxis='x', yaxis='y2',)
    data1 = [trace1,trace2]
#设置图层信息
    layout = go.Layout(yaxis2=dict(anchor='x', overlaying='y', side='right',title='死亡人数',),
                      title = dict(text = '{}疫情数据'.format(x),
                                   xanchor = 'auto',),
                      legend=dict(x=1.1,y=1),
                      xaxis = dict(title='时间',tickangle=-45,),
                      yaxis = dict(title='累计确诊数'),
                       width=1000,
                        height=800
                      )
    fig = go.Figure(data = data1,layout = layout)
#加一张治愈率的图
    fig.add_scatter(x = date,y = curedCount,mode='lines+text',name='治愈数',)
    py.iplot(fig)

查看函数返回结果

ProvinceOrCity_data('北京市')
北京市
ProvinceOrCity_data('黄石')
黄石

通过函数对比多个省市累计确诊数据图

#可传入多个参数
def province_vs_data_confirmedCount(*x):
   data1 = []
   for i in x:
       date, confirmedCount, deadCount, curedCount,deathrate,curedrate = if_is_Province(i)
       trace = go.Scatter(x = date,y = confirmedCount,mode='lines+text',name='{}累计确诊数'.format(i),)
#将data1变成多个trace的列表
       data1.append(trace)
#设置图层信息
   layout = go.Layout(
                     title = dict(text = '国家/省/市数据对比',
                                  xanchor = 'auto',),
                     legend=dict(x=1.1,y=1),
                     xaxis = dict(title='时间',tickangle=-45,),
                     yaxis = dict(title='累计确诊数'))
   fig = go.Figure(data = data1,layout = layout)
   py.iplot(fig)

查看函数返回结果

province_vs_data_confirmedCount('北京市','上海市','广州')
北上广三地累计确诊人数对比

对比其他国家和中国任意省/市的数据

观察df数据发现,除中国外,其他国家仅有一条整体数据,无省市数据,因此除中国外的其他国家,相当于在provincename中检索,因此此函数还可以用于对比其他国家和中国/中国某省市的数据

查看函数返回结果

#国外其他国家对比
province_vs_data_confirmedCount('美国','意大利','西班牙','德国','法国')
国外其他国家对比
#国内某城市和国外其他国家对比
province_vs_data_confirmedCount('美国','意大利','武汉','韩国','日本')
国内城市对比国外国家

通过函数对比多个国家地区死亡率数据图

def province_vs_data_deathRate(*x):
    data1 = []
    for i in x:
        date, confirmedCount, deadCount, curedCount,deathrate,curedrate = if_is_Province(i)
        trace = go.Scatter(x = date,y = deathrate,mode='lines+text',name='{}死亡率'.format(i),

                          )
        data1.append(trace)
    layout = go.Layout(
                      title = dict(text = '国家/地区数据对比',
                                   xanchor = 'auto',),
                      legend=dict(x=1.1,y=1),
                      xaxis = dict(title='时间',tickangle=-45,),
                      yaxis = dict(title='死亡率'),
        width=1000,
height=800
    )
    fig = go.Figure(data = data1,layout = layout)
    py.iplot(fig)

查看函数返回值

#观察原数据发现,中国整体的数据只有3.15之后才有,3.15之前只有各省份的数据
province_vs_data_deathRate('美国','意大利','中国','德国')
各国死亡率对比
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容