数据可视化呆鸟的Python数据分析

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

2020-04-05  本文已影响0人  一只小勺子_

第一篇实践了画某一省份或城市的数据图,本篇尝试通过函数的形式,展示多个国家/地区的对比图,灵活性更高。
第一篇指路:
数据可视化: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('美国','意大利','中国','德国')
各国死亡率对比
上一篇 下一篇

猜你喜欢

热点阅读