【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日内传播至西藏之外的所有内地省份。

posted @ 2020-10-25 09:34  隐岐  阅读(589)  评论(0)    收藏  举报