目录

2021新型冠状病毒(COVID-19/2019-nCoV)疫情分析

新型冠状病毒(COVID-19/2019-nCoV)疫情分析

spiritLHL

重要说明

帮同一个选修课的学妹码的结课作业,这是我个人完善后的版本(她的还有很多错漏)

分析文档:完成度:代码质量 3:5:2

其中分析文档是指你数据分析的过程中,对各问题分析的思路、对结果的解释、说明(要求言简意赅,不要为写而写)

ps:你自己写的代码远胜一切之代笔,无关美丑,只问今日比昨日更长进!加油!

源文档

源文档详见:博客相关资源-新冠疫情数据分析文件

温馨提示

疫情尚肆虐,请积极防护,保护自己

由于数据过多,查看数据尽量使用head()或tail(),以免程序长时间无响应

=======================

本项目数据来源于丁香园。本项目主要目的是通过对疫情历史数据的分析研究,以更好的了解疫情与疫情的发展态势,为抗击疫情之决策提供数据支持。

一. 提出问题

从全国范围,你所在省市,国外疫情等三个方面主要研究以下几个问题:

(一)全国累计确诊/疑似/治愈/死亡情况随时间变化趋势如何?

(二)你所在的省市情况如何?

(三)全球疫情总体态势如何?

(四)结合你的分析结果,对未来半年的疫情趋势给出你的判断,对个人和社会在抗击疫情方面有何建议?

二. 理解数据

原始数据集:AreaInfo.csv,导入相关包及读取数据,并赋值为 areas

1
2
3
4
5
6
7
8
#导入需要的数据库和文件
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
areas=pd.read_csv(r'data/AreaInfo.csv')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
r_hex = '#dc2624'     # red,       RGB = 220,38,36
dt_hex = '#2b4750'    # dark teal, RGB = 43,71,80
tl_hex = '#45a0a2'    # teal,      RGB = 69,160,162
r1_hex = '#e87a59'    # red,       RGB = 232,122,89
tl1_hex = '#7dcaa9'   # teal,      RGB = 125,202,169
g_hex = '#649E7D'     # green,     RGB = 100,158,125
o_hex = '#dc8018'     # orange,    RGB = 220,128,24
tn_hex = '#C89F91'    # tan,       RGB = 200,159,145
g50_hex = '#6c6d6c'   # grey-50,   RGB = 108,109,108
bg_hex = '#4f6268'    # blue grey, RGB = 79,98,104
g25_hex = '#c7cccf'   # grey-25,   RGB = 199,204,207

查看与统计数据,以对数据有一个大致了解

1
2
#数据过多,查看前几行
areas.head()

continentNamecontinentEnglishNamecountryNamecountryEnglishNameprovinceNameprovinceEnglishNameprovince_zipCodeprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountupdateTimecityNamecityEnglishNamecity_zipCodecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
0亚洲Asia中国China澳门Macau820000479.04602021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
1北美洲North America美国United States of America美国United States of America971002246324680.0108454384103782021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
2南美洲South America巴西Brazil巴西Brazil97300386998140.075807412142282021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
3欧洲Europe比利时Belgium比利时Belgium9610016868270.019239206202021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
4欧洲Europe俄罗斯Russia俄罗斯Russia96400636773520.03081536684122021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN

相关字段含义介绍:

小提示:

国外数据的provinceName并非是省名,而是用其国家名标注,即数据不再细分到省。

中国数据的provinceName中也有’中国’这样的记录,代表当日全国各省之合计。善用之,对全国情况进行分析时就方便多了。

continentName介绍了哪些大洲参与统计;中国数据中有的给出了省名,有的是用“中国”标注,代表当日全国各省之合计;国外数据的provinceName并非是省名,而是用其国家名标注,即数据不再细分到省 province_suspectedCount一栏中有过多的缺失值,需填补或舍弃;数据中没有详细给到城市数据。

三. 数据清洗

(一)基本数据处理

数据清洗主要包括:选取子集,缺失数据处理、数据格式转换、异常值数据处理等。

提示:因数据皆赖各国上报,情势危杂之际,难免瞒报漏报,故存在较多缺失值,可以将其补全或舍弃,参见"Pandas之缺失值的处理.ipynb"

国内疫情数据选取(最终选取的数据命名为china)

  1. 选取国内疫情数据

  2. 对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)

  3. 因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据。

提示:df.drop_duplicates(subset=[‘provinceName’, ‘updateTime’], keep=‘first’, inplace=False)

其中df是你选择的国内疫情数据的DataFrame

  1. 去除不在此次研究范围内的列,只留下[‘continentName’,‘countryName’,‘provinceName’,‘province_confirmedCount’,‘province_suspectedCount’,‘province_curedCount’,‘province_deadCount’,‘updateTime’]这几列,并以’updateTime’为行索引。

提示:两种方法都可以:(1)选取这几列 或 (2)去除其余的列

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 此处给出代码,后面省市数据和全球数据的获取与此大同小异
china = areas.loc[areas.countryName=='中国',:].copy()
china['updateTime'] = pd.to_datetime(china.updateTime,format="%Y-%m-%d",errors='coerce').dt.date
china = china.drop_duplicates(subset=['provinceName', 'updateTime'], keep='first', inplace=False)

# 将"字符类型的日期列(Index)"转为"时间戳索引(DatetimeIndex)"
china['updateTime'] = pd.to_datetime(china['updateTime'])
china.set_index('updateTime',inplace=True)
china = china[['continentName','countryName','provinceName','province_confirmedCount','province_suspectedCount','province_curedCount','province_deadCount']]
china = china[china.provinceName=='中国']
china.head(2)

continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22亚洲中国中国996670.0922754810
2021-01-21亚洲中国中国995130.0921984809
1
china.index

查看数据信息,是否有缺失数据/数据类型是否正确。若有缺失值,可以将其补全或舍弃,参见**“Pandas之缺失值的处理.ipynb”**

1
2
3
4
#有些城市不是每天上报,如果只统计那天上报的,那些不上报的就会被忽略,数据就会有错误,查看缺失值
#china.info()
china.province_suspectedCount[china.province_suspectedCount.isnull()] = china.province_suspectedCount.dropna().mode().values
china.head()

continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22亚洲中国中国996670.0922754810
2021-01-21亚洲中国中国995130.0921984809
2021-01-20亚洲中国中国992850.0921304808
2021-01-19亚洲中国中国990940.0920714806
2021-01-18亚洲中国中国989220.0919944805

你所在省市疫情数据选取(最终选取的数据命名为myhome)

此步也可在后面用到的再做

  1. 选取所在省市疫情数据(细化到市;若是直辖市,细化到区)

  2. 对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)

  3. 因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据,并以’updateTime’为行索引。

提示:df.drop_duplicates(subset=[‘cityName’, ‘updateTime’], keep=‘first’, inplace=False)

  1. 去除不在此次研究范围内的列

提示:df.drop([‘continentName’,‘continentEnglishName’,‘countryName’,‘countryEnglishName’,‘provinceEnglishName’, ‘province_zipCode’,‘cityEnglishName’,‘updateTime’,‘city_zipCode’],axis=1,inplace=True)

其中df是你选择的省市疫情数据的DataFrame

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#首先选取相应内容,后转换为日期类型并提取出年-月-日,去重
myhome=areas.loc[areas.provinceName=='河北省',:].copy()
myhome['updateTime'] = pd.to_datetime(myhome.updateTime,format="%Y-%m-%d",errors='coerce').dt.date
myhome.drop_duplicates(subset=['provinceName', 'updateTime'], keep='first', inplace=True)
# 将"字符类型的日期列(Index)"转为"时间戳索引(DatetimeIndex)"
myhome['updateTime']=pd.to_datetime(myhome['updateTime'])
myhome.set_index('updateTime',inplace=True)
#去除不在此次研究范围内的列
myhome.drop(['continentName','continentEnglishName','countryName','countryEnglishName','provinceEnglishName','province_zipCode','cityEnglishName','city_zipCode'],axis=1,inplace=True)
myhome.head(2)

provinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountcityNamecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
updateTime
2021-01-22河北省12520.04057石家庄843.00.054.01.0
2021-01-21河北省12450.03957石家庄842.00.054.01.0

查看数据信息,是否有缺失数据/数据类型是否正确。若有缺失值,可以将其补全或舍弃,参见**“Pandas之缺失值的处理.ipynb”**

1
2
3
4
#查看缺失值
#myhome.info()
myhome.province_suspectedCount[myhome.province_suspectedCount.isnull()] = myhome.province_suspectedCount.dropna().mode().values
myhome.tail()
D:\Anaconda\envs\python32\lib\site-packages\ipykernel_launcher.py:3: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  This is separate from the ipykernel package so we can avoid doing imports until

provinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountcityNamecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
updateTime
2020-01-27河北省180.001石家庄7.00.00.00.0
2020-01-26河北省130.001石家庄5.00.00.00.0
2020-01-25河北省80.001石家庄4.00.00.00.0
2020-01-24河北省20.001石家庄1.00.00.00.0
2020-01-22河北省10.000NaNNaNNaNNaNNaN

全球疫情数据选取(最终选取的数据命名为world)

此步也可在后面用到的再做

  1. 选取国外疫情数据

提示:选取国外疫情数据(countryName!=‘中国’)

  1. 对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)

  2. 因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据。

提示:df.drop_duplicates(subset=[‘provinceName’, ‘updateTime’], keep=‘first’, inplace=False)

其中df是你选择的国内疫情数据的DataFrame

  1. 去除不在此次研究范围内的列,只留下[‘continentName’,‘countryName’,‘provinceName’,‘province_confirmedCount’,‘province_suspectedCount’,‘province_curedCount’,‘province_deadCount’,‘updateTime’]这几列,并以’updateTime’为行索引。

提示:两种方法都可以:(1)选取这几列 或 (2)去除其余的列

  1. 得到全球数据

提示:用 concat 函数将前面的china与国外数据按「轴」连接得到全球数据。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
world=areas.loc[areas.countryName!='中国',:].copy()
world['updateTime'] = pd.to_datetime(world.updateTime,format="%Y-%m-%d",errors='coerce').dt.date
world.drop_duplicates(subset=['provinceName', 'updateTime'], keep='first', inplace=False)
# 将"字符类型的日期列(Index)"转为"时间戳索引(DatetimeIndex)"
world['updateTime']=pd.to_datetime(world['updateTime'])
world.set_index('updateTime',inplace=True)
#去除不在此次研究范围内的列
#world.drop(['continentName','countryName','provinceName','province_confirmedCount','province_suspectedCount','province_curedCount','province_deadCount'],axis=1,inplace=True)
#更改索引,按轴1链接

world = world.reset_index()
temp = china.copy()
temp = temp.reset_index()
pd.concat([world,temp], axis=1)

updateTimecontinentNamecontinentEnglishNamecountryNamecountryEnglishNameprovinceNameprovinceEnglishNameprovince_zipCodeprovince_confirmedCountprovince_suspectedCount...city_curedCountcity_deadCountupdateTimecontinentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
02021-01-22北美洲North America美国United States of America美国United States of America971002246324680.0...NaNNaN2021-01-22亚洲中国中国99667.00.092275.04810.0
12021-01-22南美洲South America巴西Brazil巴西Brazil97300386998140.0...NaNNaN2021-01-21亚洲中国中国99513.00.092198.04809.0
22021-01-22欧洲Europe比利时Belgium比利时Belgium9610016868270.0...NaNNaN2021-01-20亚洲中国中国99285.00.092130.04808.0
32021-01-22欧洲Europe俄罗斯Russia俄罗斯Russia96400636773520.0...NaNNaN2021-01-19亚洲中国中国99094.00.092071.04806.0
42021-01-22欧洲Europe塞尔维亚Republic of Serbia塞尔维亚Republic of Serbia9650134361210.0...NaNNaN2021-01-18亚洲中国中国98922.00.091994.04805.0
..................................................................
3015422020-01-27NaNNaN马来西亚Malaysia马来西亚Malaysia95200730.0...NaNNaNNaTNaNNaNNaNNaNNaNNaNNaN
3015432020-01-27NaNNaN法国France法国France96100230.0...NaNNaNNaTNaNNaNNaNNaNNaNNaNNaN
3015442020-01-27NaNNaN越南Vietnam越南Vietnam95201120.0...NaNNaNNaTNaNNaNNaNNaNNaNNaNNaN
3015452020-01-27NaNNaN尼泊尔Nepal尼泊尔Nepal95300510.0...NaNNaNNaTNaNNaNNaNNaNNaNNaNNaN
3015462020-01-27NaNNaN加拿大Canada加拿大Canada97100110.0...NaNNaNNaTNaNNaNNaNNaNNaNNaNNaN

301547 rows × 27 columns

查看数据信息,是否有缺失数据/数据类型是否正确。

提示:因数据皆赖各国上报,情势危杂之际,难免瞒报漏报,故存在较多缺失值,可以将其补全或舍弃,参见**“Pandas之缺失值的处理.ipynb”**

1
2
3
#因数据皆赖各国上报,情势危杂之际,难免瞒报漏报,故存在较多缺失值
#world.info()
world.head()

updateTimecontinentNamecontinentEnglishNamecountryNamecountryEnglishNameprovinceNameprovinceEnglishNameprovince_zipCodeprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountcityNamecityEnglishNamecity_zipCodecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
02021-01-22北美洲North America美国United States of America美国United States of America971002246324680.010845438410378NaNNaNNaNNaNNaNNaNNaN
12021-01-22南美洲South America巴西Brazil巴西Brazil97300386998140.07580741214228NaNNaNNaNNaNNaNNaNNaN
22021-01-22欧洲Europe比利时Belgium比利时Belgium9610016868270.01923920620NaNNaNNaNNaNNaNNaNNaN
32021-01-22欧洲Europe俄罗斯Russia俄罗斯Russia96400636773520.0308153668412NaNNaNNaNNaNNaNNaNNaN
42021-01-22欧洲Europe塞尔维亚Republic of Serbia塞尔维亚Republic of Serbia9650134361210.0501855263NaNNaNNaNNaNNaNNaNNaN

四. 数据分析及可视化

在进行数据分析及可视化时,依据每个问题选取所需变量并新建DataFrame再进行分析和可视化展示,这样数据不易乱且条理更清晰。

基础分析

基础分析,只允许使用numpy、pandas和matplotlib库

可以在一张图上多个坐标系展示也可以在多张图上展示

请根据分析目的选择图形的类型(折线图、饼图、直方图和散点图等等),实在没有主意可以到百度疫情地图或其他疫情分析的站点激发激发灵感。

(一)全国累计确诊/治愈/死亡情况随时间变化趋势如何?

1
china.index
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#首先整合每天全国累计确诊/治愈/死亡情况做成新的列表
list_a=china['province_confirmedCount']
#遍历时间将其改为字符串形式
list_updatetime=[]
for i in china.index:
    list_updatetime.append(str(i)[0:11])
updatetime_a=pd.DataFrame(list_a,index=list_updatetime)
updatetime_a.index.name='updatetime'
updatetime_a.columns=['province_confirmedCount']
updatetime_a.head()

province_confirmedCount
updatetime
2021-01-2299667
2021-01-2199513
2021-01-2099285
2021-01-1999094
2021-01-1898922
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

#画折线图表示
fig, axes = plt.subplots(1,1,figsize=(16, 4))
x=updatetime_a.index
y=updatetime_a.values
plot=axes.plot(x,y,color=dt_hex,linewidth=2,linestyle='-',label='province_confirmedCount')
axes.set_xticks(range(0,len(x),25))
plt.xlabel('日期',fontsize=10)
plt.ylabel('人数',fontsize=10)
axes.legend(loc=0,frameon=True)
plt.show()
#重复以上步骤,绘制治愈/死亡的折线图
list_b=china['province_curedCount']
#遍历时间将其改为字符串形式
list_updatetime=[]
for i in china.index:
    list_updatetime.append(str(i)[0:11])
updatetime_b=pd.DataFrame(list_b,index=list_updatetime)
updatetime_b.index.name='updatetime'
updatetime_b.columns=['province_curedCount']
updatetime_b.head()
#画折线图表示
fig, axes = plt.subplots(1,1,figsize=(16, 4))
x=updatetime_b.index
y=updatetime_b.values
plot=axes.plot(x,y,color=dt_hex,linewidth=2,linestyle='-',label='province_curedCount')
axes.set_xticks(range(0,len(x),25))
plt.xlabel('日期',fontsize=10)
plt.ylabel('人数',fontsize=10)
axes.legend(loc=0,frameon=True)
plt.show()
#绘制死亡人数图
list_c=china['province_deadCount']
#遍历时间将其改为字符串形式
list_updatetime=[]
for i in china.index:
    list_updatetime.append(str(i)[0:11])
updatetime_c=pd.DataFrame(list_a,index=list_updatetime)
updatetime_c.index.name='updatetime'
updatetime_c.columns=['province_deadCount']
updatetime_c.head()
#画折线图表示
fig, axes = plt.subplots(1,1,figsize=(16, 4))
x=updatetime_c.index
y=updatetime_c.values
plot=axes.plot(x,y,color=dt_hex,linewidth=2,linestyle='-',label='province_deadCount')
axes.set_xticks(range(0,len(x),25))
plt.xlabel('日期',fontsize=10)
plt.ylabel('人数',fontsize=10)
axes.legend(loc=0,frameon=True)
plt.show()
#分析:确诊与死亡人数的折线图显示出人数在逐渐增加,增速有加快的趋势;治愈人数虽然也是再增加,但是增速逐渐变慢

png

第二幅图为

png

第三幅图为

png

(二)你所在的省市情况如何?

1
myhome

provinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountcityNamecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
updateTime
2021-01-22河北省12520.04057石家庄843.00.054.01.0
2021-01-21河北省12450.03957石家庄842.00.054.01.0
2021-01-20河北省12220.03847石家庄813.00.045.01.0
2021-01-19河北省11980.03837石家庄801.00.045.01.0
2021-01-18河北省11710.03797石家庄774.00.041.01.0
.................................
2020-01-27河北省180.001石家庄7.00.00.00.0
2020-01-26河北省130.001石家庄5.00.00.00.0
2020-01-25河北省80.001石家庄4.00.00.00.0
2020-01-24河北省20.001石家庄1.00.00.00.0
2020-01-22河北省10.000NaNNaNNaNNaNNaN

134 rows × 10 columns

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
plt.figure( figsize=(20,10), dpi=80)
list_updatetime=[]
for i in myhome.index:
    list_updatetime.append(str(i)[0:11])
x = list_updatetime
y1=myhome['province_confirmedCount']
y2=myhome['province_curedCount']
y3=myhome['province_deadCount']
plt.plot(x,y1,color=r_hex,label='province_confirmedCount')
plt.plot(x,y2,color=tl_hex,label='province_curedCount')
plt.plot(x,y3,color=g_hex,label='province_deadCount')
x_major_locator = MultipleLocator(12)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.legend(loc=0,frameon=True)
plt.show()

png

(三)全球疫情态势如何?

  1. 全球 TOP10 国家的疫情情况如何?

  2. 各大洲情况对比?

  3. 选一个你感兴趣的大洲,分析各国疫情之间的联系、分布、对比和构成情况。

提示:注意数据透视、分组和整合知识的运用

1
world

updateTimecontinentNamecontinentEnglishNamecountryNamecountryEnglishNameprovinceNameprovinceEnglishNameprovince_zipCodeprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountcityNamecityEnglishNamecity_zipCodecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
02021-01-22北美洲North America美国United States of America美国United States of America971002246324680.010845438410378NaNNaNNaNNaNNaNNaNNaN
12021-01-22南美洲South America巴西Brazil巴西Brazil97300386998140.07580741214228NaNNaNNaNNaNNaNNaNNaN
22021-01-22欧洲Europe比利时Belgium比利时Belgium9610016868270.01923920620NaNNaNNaNNaNNaNNaNNaN
32021-01-22欧洲Europe俄罗斯Russia俄罗斯Russia96400636773520.0308153668412NaNNaNNaNNaNNaNNaNNaN
42021-01-22欧洲Europe塞尔维亚Republic of Serbia塞尔维亚Republic of Serbia9650134361210.0501855263NaNNaNNaNNaNNaNNaNNaN
............................................................
3015422020-01-27NaNNaN马来西亚Malaysia马来西亚Malaysia95200730.000NaNNaNNaNNaNNaNNaNNaN
3015432020-01-27NaNNaN法国France法国France96100230.000NaNNaNNaNNaNNaNNaNNaN
3015442020-01-27NaNNaN越南Vietnam越南Vietnam95201120.000NaNNaNNaNNaNNaNNaNNaN
3015452020-01-27NaNNaN尼泊尔Nepal尼泊尔Nepal95300510.000NaNNaNNaNNaNNaNNaNNaN
3015462020-01-27NaNNaN加拿大Canada加拿大Canada97100110.000NaNNaNNaNNaNNaNNaNNaN

301547 rows × 19 columns

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
country = list(set(world['provinceEnglishName']))
date_y = []
for dt in world.loc[world['provinceEnglishName'] ==  country[0]]['updateTime']:
    date_y.append(str(dt))
date_y.sort()
for c in country:
    world.loc[world['provinceEnglishName'] == c].sort_values(by = 'updateTime')
world.dropna(subset=['provinceEnglishName'],inplace=True)
world.updateTime = pd.to_datetime(world.updateTime,format="%Y-%m-%d",errors='coerce').dt.date
world_confirmed = world.loc[world['provinceEnglishName'] == world.head(15)['provinceEnglishName'][0]].pivot_table(index='updateTime', columns='provinceEnglishName', values='province_confirmedCount',aggfunc=np.mean)
for i in world.head(15)['provinceEnglishName'][1:]:
    draft_c = world.loc[world['provinceEnglishName'] == i].pivot_table(index='updateTime', columns='provinceEnglishName', values='province_confirmedCount',aggfunc=np.mean)
    world_confirmed = pd.merge(world_confirmed,draft_c,on='updateTime', how='outer',sort=True)
world_confirmed.fillna(0,inplace=True,limit = 1)
world_confirmed.fillna(method="ffill",inplace=True)
world_confirmed
fig = plt.figure(figsize=(16,10))
plt.plot(world_confirmed)
plt.legend(world_confirmed.columns)
plt.title('前15个国家累计确诊人数',fontsize=20)
plt.xlabel('日期',fontsize=20)
plt.ylabel('人数/百万',fontsize=20);
plt.show()

png