疫情可视化分析的两种方法

一、方法一
1、数据源 
2、需要的库包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
 
#为了正常显示中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#安装命令如下
pip install --index https://pypi.tuna.tsinghua.edu.cn/simple/seaborn
3、导入数据
df = pd.read_csv(r"E:\dataanalysis\novel-corona-virus-2019-dataset-master\2019_nCoV_data.csv",parse_dates=['Last Update'])
df.head()
4、查看
df.info() 数据类型
数值类型的数据有:Sno  Confirmed Deaths Recovered
df.describe() 数据描述
列数据描述
 
5、增加3个列
dayofweek 星期   day 天  hour 小时
df['dayofweek'] = df['Last Update'].dt.dayofweek  # add dow column 星期几
df['day'] = df['Last Update'].dt.day
#df['month'] = df['Last Update'].dt.month
df['hour'] = df['Last Update'].dt.hour
df.head()
6、分析哪些国家被新型冠状病毒影响
df['Country'].unique()
目前为止公有27个国家被感染
len(df['Country'].unique())
7、数据清洗
发现Country列中中国名字没有统一,China和Mainland China同时存在
df['Country']=df['Country'].replace('Mainland China','China')  #22号后的China被Mainland China替代了
 
8、查看具体某个国家数据
印度只有一例事件
df[df['Country']=='India']
中国很多
df[df['Country']=='China']
中国共有多少起感染事件
len(df[df['Country']=='China'])
9、查看疫情一共统计了多少天的数据
df.day.unique()
10、发生疫情首日(也就是22日)都哪些国家确诊了多少病例
df_first_report = df[df['day'] == df.day.min()].groupby('Country')[['Confirmed']].sum().reset_index()
df_first_report
11、画条形图
sns.barplot(x='Country',y='Confirmed',data=df_first_report)
12、目前为止每个国家确诊的病例
mm=df.groupby('Country')[['Confirmed']].sum()  #各个国家一共确诊的总数量
mm
13、目前各个国家病例的确诊、死亡、康复的总人数,同时重置索引
df.groupby('Country')[['Confirmed','Deaths','Recovered']].sum().reset_index()
 
14、目前为止,每个国家各省的确诊、死亡、康复人数汇总
df_by_state = df.groupby(['Country','Province/State'])['Confirmed','Deaths','Recovered'].sum() 
15、按每天进行汇总,每天全球确诊人数
df.groupby('day').sum()['Confirmed'].plot(title="全球每日确诊总人数")  #全球每日确诊人数
mm=df.groupby('day').sum()['Confirmed']
mm
16、中国每日确诊人数
df[df['Country'] == 'China'].groupby('day').sum()['Confirmed'].plot(title="中国每日确诊人数")
df[df['Country'] == 'China'].groupby('day').sum()['Confirmed']
17、随着时间推移,全球确诊人数有一个显著提升
sns.barplot(x='day',y='Confirmed',data=df)
Seaborn会对'day'列中的数值进行归类后按照estimator参数的方法(默认为平均值)计算相应的值,计算出来的值就作为条形图所显示的值
 
18、有病例的国家的确诊趋势
plt.figure(figsize=(10,8))
sns.barplot(x='Confirmed',y='Country',ci=0,data=df,orient="h")
plt.tight_layout()
19、对各个国家的确诊数量进行聚合
hh=df['Confirmed'].groupby(df['Country']).sum()
hh
20、各国康复病人的时间线
pd.pivot_table(df,values='Recovered',columns='Country',index='day').fillna(0).plot(figsize=(16,8))
21、各省每天被确诊数量
 
#data    DataFrame    pd.pivot_table使用,设定需要操作的 DataFrame
# values    column     #被计算的数据项  设定需要被聚合操作的列
#index 行分组键 用于分组的列名或其他分组键,作为结果DataFrame的行索引
# columns 列分组键 用于分组的列名或其他分组键,作为结果DataFrame的列索引
pd.pivot_table(df,values='Confirmed',columns='Province/State',index='day').fillna(0).plot(figsize=(16,8))
22、按确诊人数进行排序对前十的各国进行排序
df.groupby('Country')['Confirmed'].sum().sort_values(ascending=False)[0:10]
23、各省死亡人数前五名
df.groupby('Province/State')['Deaths'].sum().sort_values(ascending=False)[:5]
24、中国死亡率和康复率
df_china = df[df['Country'].str.contains('china', case = False)]
(df_china['Deaths'].sum()/df_china['Confirmed'].sum()) *100
二、方法二
1、引入包
 utils是一个小型python函数和类的集合
import pandas as pd
import matplotlib.pyplot as plt
import utils   # some convenient functions
%load_ext autoreload
%autoreload 2
2、载入数据
data =pd.read_csv(r"E:\dataanalysis\DXY-COVID-19-Data-master\DXY-COVID-19-Data-master\csv\DXYArea.csv",parse_dates=['updateTime'])
3、查看数据
数据列中是否有控制NAN
data.isnull().any()
行中存在空值的项
data[data.isnull().T.any()]
4、检索
查找一个省的数据
data[data['provinceName'] == '广东省'].head()
查找一个市的数据
data[data['cityName'] == '武汉'].head()
5、新增加一列
data['year_month_day'] = data['updateTime'].apply(lambda x : x.strftime('%Y-%m-%d'))
data
删除某列
data.drop(['year_month'],axis=1,inplace=True)
 
6、检索单日数据
data[data['year_month_day']=='2020-01-27'].head()
7全国每日确诊的人数
data.groupby('year_month_day').sum()['province_confirmedCount'].plot(title="全国每日确诊总人数",figsize=(16,8))
8、各省确诊人数
plt.figure(figsize=(20, 12))
sns.barplot(x='province_confirmedCount',y='provinceName',ci=0,data=data)

猜你喜欢

转载自www.cnblogs.com/ready-gogo/p/12506219.html