【Python数据分析】新冠肺炎数据--分析一
2、疫情数据分析
1 #导入pandas等模块 2 import pandas as pd 3 import matplotlib.pyplot as plt 4 import seaborn as sns 5 from datetime import datetime
1 #将matplotlib的默认字体改为仿宋,以在图形中显示中文。 2 plt.rcParams['font.sans-serif']=['fangsong'] 3 #在多语种情形下正确显示负号 4 plt.rcParams['axes.unicode_minus']=False 5 #解决matplotlib抛出的max_open_warning 6 plt.rcParams.update({'figure.max_open_warning': 0})
1 #加载数据时将第0列日期解析为datetime对象,并设置为行索引。 2 covid_cases_cumsum=pd.read_csv(r'C:\Users\92342\Desktop\python\Python数据分析学习之路\1、疫情数据\covid_cases_cumsum.csv',\ 3 parse_dates=[0],index_col=[0]) 4 print(covid_cases_cumsum.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 276 entries, 2020-01-16 to 2020-10-17 Data columns (total 32 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 全国 272 non-null float64 1 北京 269 non-null float64 2 天津 271 non-null float64 3 河北 270 non-null float64 4 山西 270 non-null float64 5 内蒙古 269 non-null float64 6 辽宁 270 non-null float64 7 吉林 269 non-null float64 8 黑龙江 270 non-null float64 9 上海 273 non-null float64 10 江苏 270 non-null float64 11 浙江 269 non-null float64 12 安徽 270 non-null float64 13 福建 270 non-null float64 14 江西 271 non-null float64 15 山东 268 non-null float64 16 河南 269 non-null float64 17 湖北 276 non-null float64 18 湖南 271 non-null float64 19 广东 273 non-null float64 20 广西 270 non-null float64 21 海南 270 non-null float64 22 重庆 270 non-null float64 23 四川 270 non-null float64 24 贵州 270 non-null float64 25 云南 271 non-null float64 26 西藏 262 non-null float64 27 陕西 269 non-null float64 28 甘肃 269 non-null float64 29 青海 267 non-null float64 30 宁夏 270 non-null float64 31 新疆 273 non-null float64 dtypes: float64(32) memory usage: 71.2 KB None
问题1:全国、湖北、其他地区确诊病例的发展趋势是怎么样的?
1 #使用seaborn.lineplot()绘制全国确诊病例累计值的走势图 2 fig,ax=plt.subplots() 3 ax=sns.lineplot(data=covid_cases_cumsum['全国']) 4 plt.show()
1 #前面绘制的图形没有标题、轴标签、横坐标过密,现重新绘制 2 fig,ax=plt.subplots() 3 ax=sns.lineplot(data=covid_cases_cumsum['全国']) 4 ax.set_title('新冠肺炎确诊病例累计值:全国') 5 ax.set_ylabel('确诊病例') 6 fig.tight_layout() 7 plt.show()
1 #绘制湖北的趋势图 2 fig,ax=plt.subplots() 3 ax=sns.lineplot(data=covid_cases_cumsum['湖北']) 4 ax.set_title('新冠肺炎确诊病例累计值:湖北') 5 ax.set_ylabel('确诊病例') 6 fig.tight_layout() 7 plt.show()
1 #接下来使用循环语句,生成所有省份的走势图并保存至本地。 2 for area in list(covid_cases_cumsum.columns): 3 fig,ax=plt.subplots() 4 ax=sns.lineplot(data=covid_cases_cumsum[f'{area}']) 5 ax.set_title(f'新冠肺炎确诊病例累计值:{area}') 6 ax.set_ylabel('确诊病例') 7 fig.tight_layout() 8 plt.savefig(f'C:\\Users\\92342\\Desktop\\python\\Python数据分析学习之路\\1、疫情数据\\新冠肺炎确诊病例累计值走势图\\{area}.png') 9 plt.clf()
<Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes> <Figure size 432x288 with 0 Axes>
从确诊病例走势图可以看出,各地疫情确诊病例走势有如下几种:
1、自疫情爆发至2020年3月初,确诊病例呈急剧增长态势,自此之后缓慢增长。该种走势包括全国、第2、3项以外的地区。
2、疫情爆发一度被控制,但仍存在阶段性爆发。该种走势包括北京、上海、甘肃、黑龙江、吉林、辽宁、内蒙古、山西、新疆。
3、基本未受疫情影响的地区为西藏。
问题2:各地疫情爆发先后顺序
1 print(covid_cases_cumsum.head())
全国 北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 ... 重庆 四川 贵州 云南 \ 2020-01-16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN 2020-01-17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN 2020-01-18 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN 2020-01-19 NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 ... NaN NaN NaN NaN 2020-01-20 291.0 NaN NaN NaN NaN NaN NaN NaN NaN 2.0 ... NaN NaN NaN NaN 西藏 陕西 甘肃 青海 宁夏 新疆 2020-01-16 NaN NaN NaN NaN NaN NaN 2020-01-17 NaN NaN NaN NaN NaN NaN 2020-01-18 NaN NaN NaN NaN NaN NaN 2020-01-19 NaN NaN NaN NaN NaN 0.0 2020-01-20 NaN NaN NaN NaN NaN 0.0 [5 rows x 32 columns]
1 #可以发现,数据是按照日期顺序排列的,各地的第一个非NaN值即为当地疫情爆发首日。 2 #使用pd.Series.first_valid_index方法获取各地的爆发首日 3 outbreak_day=covid_cases_cumsum.apply(pd.Series.first_valid_index) 4 print(outbreak_day)
全国 2020-01-20 北京 2020-01-23 天津 2020-01-21 河北 2020-01-22 山西 2020-01-22 内蒙古 2020-01-23 辽宁 2020-01-22 吉林 2020-01-23 黑龙江 2020-01-22 上海 2020-01-19 江苏 2020-01-22 浙江 2020-01-23 安徽 2020-01-22 福建 2020-01-22 江西 2020-01-21 山东 2020-01-24 河南 2020-01-23 湖北 2020-01-16 湖南 2020-01-21 广东 2020-01-19 广西 2020-01-22 海南 2020-01-22 重庆 2020-01-22 四川 2020-01-22 贵州 2020-01-22 云南 2020-01-21 西藏 2020-01-30 陕西 2020-01-23 甘肃 2020-01-23 青海 2020-01-25 宁夏 2020-01-22 新疆 2020-01-19 dtype: datetime64[ns] <class 'pandas.core.series.Series'>
1 #outbreak_day是pd.Series数据,使用min方法找出Series中的最早日期 2 earliest_day=outbreak_day.min() 3 print(earliest_day)
2020-01-16 00:00:00
1 #用每个outbreak_day减去这个最小值,得到各地区爆发首日距离最早日期的偏移天数 2 shift_day=(outbreak_day-earliest_day) 3 shift_day_sorted=shift_day.sort_values() 4 print(shift_day_sorted)
湖北 0 days 新疆 3 days 广东 3 days 上海 3 days 全国 4 days 湖南 5 days 天津 5 days 云南 5 days 江西 5 days 河北 6 days 江苏 6 days 安徽 6 days 福建 6 days 重庆 6 days 宁夏 6 days 辽宁 6 days 山西 6 days 贵州 6 days 广西 6 days 海南 6 days 黑龙江 6 days 四川 6 days 陕西 7 days 甘肃 7 days 内蒙古 7 days 河南 7 days 浙江 7 days 吉林 7 days 北京 7 days 山东 8 days 青海 9 days 西藏 14 days dtype: timedelta64[ns]
可以看出,湖北是疫情首次爆发地,3日内传播到了新疆、广东、上海三地,
5日内传播到了湖南、天津、云南、江西,10日内传播至西藏之外的所有内地省份。
浙公网安备 33010602011771号