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

0%

新冠病毒疫情分析学习05-确诊病例与疑似病例对比

这章来分析确诊病例与疑似病例的增长情况

首先准备数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 读取数据
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()

每日确诊率变化情况

目前确诊率计算有多种方式,假设需要2天时间对疑似病例进行确诊,则确诊率计算逻辑如下

  • 今日确诊率 = 今日新增病例 / 前日疑似病例

代码如下:

1
2
3
4
5
6
7
# 计算确诊率
data_china['确诊率'] = data_china['确诊新增'] / data_china['疑似'].shift(2)

# 保留2位小数
data_china['确诊率'] = data_china['确诊率'].round(2)

data_china.head(10)

输出结果为:

疑似 确诊 死亡 疑似新增 确诊新增 死亡新增 确诊率 date
2020-01-22 393 574 17 NaN NaN NaN NaN
2020-01-23 1072 835 25 679.0 261.0 8.0 NaN
2020-01-24 1965 1297 41 893.0 462.0 16.0 1.18
2020-01-25 2684 1985 56 719.0 688.0 15.0 0.64
2020-01-26 5794 2761 80 3110.0 776.0 24.0 0.39
2020-01-27 6973 4533 106 1179.0 1772.0 26.0 0.66
2020-01-28 9239 5995 132 2266.0 1462.0 26.0 0.25
2020-01-29 12167 7736 170 2928.0 1741.0 38.0 0.25
2020-01-30 15238 9720 213 3071.0 1984.0 43.0 0.21
2020-01-31 17988 11821 259 2750.0 2101.0 46.0 0.17

绘制每日疑似病例与确诊病例柱状图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 绘制每日疑似病例与确诊比例柱状图
import pyecharts as pe

# 创建柱状图对象
bar = pe.Bar('每日疑似病例与确诊病例 柱状图')

# 设置x轴 - 日期,这里由于前2条数据有空值,故从第3条开始
x = data_china.iloc[2::].index.astype('str')

# 设置y1轴 - 确诊病例
y1 = data_china['确诊'].iloc[2::]

# 设置y2轴 - 疑似病例
y2 = data_china['疑似'].iloc[2::]

# 绘制图表
bar.add('确诊病例', x, y1, is_datazoom_show = True, datazoom_range = [0,100])
bar.add('疑似病例', x, y2)
bar

输出结果为:


知识点
bar.add()可以多次使用,添加多个系列


绘制确诊率折线图

1
2
3
4
5
6
7
8
9
10
11
line = pe.Line('确诊率 折线图')

# 设置x轴 - 日期
x = data_china.iloc[2::].index.astype('str')

# 设置y轴 - 确诊增长率
y = data_china['确诊率'].iloc[2::]

# 绘制图表
line.add('确诊率', x, y)
line

输出结果为:

合并图表

通过前面的方法,将两个图标进行合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 合并图表
# 设置x、y轴数据
x = data_china.iloc[2::].index.astype('str')
y1 = data_china['确诊'].iloc[2::] # 设置y1轴 - 确诊病例
y2 = data_china['疑似'].iloc[2::] # 设置y2轴 - 疑似病例
y3 = data_china['确诊率'].iloc[2::] # 设置y3轴 - 确诊率

# 绘制柱状图
bar = pe.Bar('每日确诊率变化情况')
bar.add('确诊病例', x, y1, is_datazoom_show = True, datazoom_range = [0,100])
bar.add('疑似病例', x, y2)

# 绘制折线图
line = pe.Line('确诊率 折线图')
line.add('确诊率', x, y3)

# 合并图表
overlap = pe.Overlap()
overlap.add(bar)
overlap.add(line, yaxis_index=1, is_add_yaxis=True) # 新增y轴
overlap

输出结果为

本章如上,快快练习一下吧!

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