城市设计/数据分析/技术分享/摄影记录

0%

新冠病毒疫情分析学习06-不同省市确诊病例与疑似病例对比

这章通过分地区来查看疫情病例的增长情况,并构建函数快速输出指定省市的疫情病例增长曲线

首先依然准备好数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 读取数据
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 设置不弹出警告

df = pd.read_excel('*/*/data_ncov.xlsx')

# 时间序列转换
df['date'] = df['date'].astype('str') # 先将字段转化为字符串
df['date'] = pd.to_datetime(df['date']) # 再进行时间序列转换

# 提取全国数据,并按天计算每日新增数据
data_china = df.groupby('date')[['疑似','确诊','死亡']].sum()
data_china['疑似新增'] = data_china['疑似'] - data_china['疑似'].shift()
data_china['确诊新增'] = data_china['确诊'] - data_china['确诊'].shift()
data_china['死亡新增'] = data_china['死亡'] - data_china['死亡'].shift()
data_china.head()

分别提取湖北、非湖北的数据

参考全国数据的提取及每日新增数据计算方法,提取湖北、非湖北的数据,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 提取湖北省数据,并按天计算每日新增数据
data_hb = df[df['省市'] == '湖北省']
data_hb['疑似新增'] = data_hb['疑似'] - data_hb['疑似'].shift()
data_hb['确诊新增'] = data_hb['确诊'] - data_hb['确诊'].shift()
data_hb['死亡新增'] = data_hb['死亡'] - data_hb['死亡'].shift()

# 提取非湖北省数据,并按天计算每日新增数据
data_nothb_all = df[df['省市'] != '湖北省']
data_nothb = data_nothb_all.groupby('date')[['疑似','确诊','死亡']].sum()
data_nothb['疑似新增'] = data_nothb['疑似'] - data_nothb['疑似'].shift()
data_nothb['确诊新增'] = data_nothb['确诊'] - data_nothb['确诊'].shift()
data_nothb['死亡新增'] = data_nothb['死亡'] - data_nothb['死亡'].shift()

#可以看一下两个数据
data_hb.head()
data_nothb.head()

绘制多系列折线图-不同地区疫情病例增长曲线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 绘制多系列折线图
import pyecharts as pe
line = pe.Line('不同地区疫情病例增长曲线')

# 设置x轴 - 日期
x = data_china.index.astype('str')

# 设置y1轴 - 湖北
y1 = data_hb['确诊新增']

# 设置y2轴 - 非湖北
y2 = data_nothb['确诊新增']

# 设置y3轴 - 全国
y3 = data_china['确诊新增']

# 绘制图表
line.add('湖北新增', x, y1)
line.add('非湖北新增', x, y2)
line.add('全国新增', x, y3, tooltip_trigger = 'axis', tooltip_axispointer_type = 'cross')
line

输出结果如下:

构建函数快速输出指定省市的疫情病例增长曲线

首先梳理一下流程

第一步:构建函数提取数据

按照省市名称提取数据
分别计算疑似病例、确诊病例、死亡病例的新增情况

第二步:构建函数绘制疫情病例增长曲线

用第一步的函数提取数据
设置x、y轴的数据
绘制图表


构建第一步函数,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 构建函数提取数据
def regiondata(where):
# 提取数据
datai = df[df['省市'] == where]
# 分别计算新增数据
datai['疑似新增'] = datai['疑似'] - datai['疑似'].shift()
datai['确诊新增'] = datai['确诊'] - datai['确诊'].shift()
datai['死亡新增'] = datai['死亡'] - datai['死亡'].shift()
# 返回数据
return datai

# 调用函数提取某省市数据
data_bj = regiondata('北京市')
data_sh = regiondata('上海市')
data_cq = regiondata('重庆市')
data_sh.head()

输出结果如下:

区域编码 省市 疑似 确诊 死亡 date 疑似新增 确诊新增 死亡新增
144 310000 上海市 16 16 0 2020-01-22 NaN NaN NaN
145 310000 上海市 34 20 0 2020-01-23 18.0 4.0 0.0
146 310000 上海市 72 33 0 2020-01-24 8.0 13.0 0.0
147 310000 上海市 95 40 1 2020-01-25 23.0 7.0 1.0
148 310000 上海市 90 53 1 2020-01-26 -5.0 13.0 0.0

构建第二步函数,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 构建函数绘制疫情病例增长曲线
def fig2(r1, r2, r3):
# 提取数据,regiondata(where)
data1 = regiondata(r1)
data2 = regiondata(r2)
data3 = regiondata(r3)

# 设置x、y
x = data1['date'].astype('str')
y1 = data1['确诊新增']
y2 = data2['确诊新增']
y3 = data3['确诊新增']

# 分地区新增确诊病例情况
line = pe.Line('分地区新增确诊病例情况')

# 绘制图表
line.add(r1, x, y1, is_step=True) # is_step参数可以设置阶梯线图
line.add(r2, x, y2, is_step=True)
line.add(r3, x, y3, is_step=True, tooltip_trigger = 'axis', tooltip_axispointer_type = 'cross')
return line.render('*/*/*.html')

#可更换其他省市
fig2('北京市','上海市','重庆市')

输出结果如下:

以上就是本章内容,快快练习吧!

吃颗糖
  • 本文作者: Erek
  • 本文链接: https://erek.top/2020/006-xg/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!