背景:新冠在美国的传播分析
数据来源:Johns Hopkins
代码实现:
import pandas as pdimport matplotlib.pyplot as pltfrom sklearn import metricsimport warningswarnings.filterwarnings("ignore")fig=plt.figure()plt.rcParams["font.sans-serif"] = "SimHei"plt.rcParams['axes.unicode_minus'] = False#us.csv-美国每日确诊总病例及死亡病例,包括各州,美国领地和哥伦比亚特区。us_data=pd.read_csv('F:/us.csv')us_data.info()us_data.describe()
#由于数据并未缺失故暂时不考虑缺失#尝试画出美国确诊病例关于时间的折线图plt.plot(us_data['date'].astype(str),us_data['cases'])plt.show()
plt.plot(us_data['date'].astype(str),us_data['deaths'])plt.xticks(rotation=45)plt.show()
#由于x轴数据过多不好分析,故转换为月份进行分析us_data['date']=pd.to_datetime(us_data['date'])us_data['month']=us_data['date'].dt.monthmonth_cases=us_data.groupby(by='month')['cases'].sum()month_deaths=us_data.groupby(by='month')['deaths'].sum()
#可视化分析plt.plot(month_cases.index,month_cases)plt.title('美国各月确诊人数')plt.show()
plt.plot(month_deaths.index,month_deaths)plt.title('美国各月死亡人数')plt.show()
#开始,美国冠状病毒初期感染及死亡较少,在3月开始迅速上升,并在11月达到顶峰,但12月数据不够完整,不能判断疫情是否得到一定的控制
#us-states.csv-美国按州分类,每日确诊总病例及死亡病例us_states=pd.read_csv('F:/us-states.csv')us_states.info()us_states.describe()
#不存在数据缺失#由于数据过多,故按月分类us_states['date']=pd.to_datetime(us_states['date'])us_states['month']=us_states['date'].dt.monthgroup_month=us_states.groupby(by='month')#各月份各州确诊人数前5k=1for key in group_month.groups:month_data=group_month.get_group(key)state_cases=month_data.groupby(by='state')['cases'].sum()state_cases.sort_values(inplace=True,ascending=False)#print(state_cases.head(5))fig.add_subplot(3,4,k)plt.bar(state_cases.head(5).index.tolist(),state_cases.head(5))plt.xticks(rotation=45)k+=1plt.show()
#各月份各州死亡人数前5#k=1for key in group_month.groups:month_data=group_month.get_group(key)state_deaths=month_data.groupby(by='state')['deaths'].sum()state_deaths.sort_values(inplace=True,ascending=False)print(state_deaths.head(5))#fig.add_subplot(3,4,k)#plt.bar(state_deaths.head(5).index.tolist(),state_deaths.head(5))#plt.xticks(rotation=45)#k+=1#plt.show()
#各州按月份的确诊人数与死亡人数的透视表pd.pivot_table(data=us_states,index=['state','month'],aggfunc={'cases':'sum','deaths':'sum'})
#从各州的确诊人数和死亡人数来看:前两月California州确诊人数较多,可能存在传染源,3月开始全美国开始大爆发,New York稳居榜首,#但8,9,10,12California再次一直领先,由于12月数据不全,分析California州多数时间处于首位,可能是源头,也可能是管理较差,预防措施不到位#但是从死亡人数看,New York一直处于榜首,从未被超越,人口集中地
#us-counties.csv-美国按城市分类,每日确诊总病例及死亡病例us_counties=pd.read_csv('F:/us-counties.csv')us_counties.info()us_counties.describe()
#deaths存在缺失值,为了避免影响,删除该行数据us_counties.dropna(axis=0,how='any',subset=['deaths'],inplace=True)us_counties.info()#删除后,数据剩799540
#对数据添加月份信息us_counties['date']=pd.to_datetime(us_counties['date'])us_counties['month']=us_counties['date'].dt.month
#各州各城市按月份的确诊人数与死亡人数的透视表pd.pivot_table(data=us_counties,index=['state','county','month'],aggfunc={'cases':'sum','deaths':'sum'})
#由于数据太多,故只筛选出几个城市简单分析一下#先查看城市的所有确诊人数和死亡人数的大致数量us_counties.groupby(by='county')[['cases','deaths']].sum().sort_values(by='cases')
#观看上图,就只分析New York City 、Palm Beach 、 Borden三个城市Borden_data=us_counties.loc[us_counties['county']=='Borden',:]Palm_Beach_data=us_counties.loc[us_counties['county']=='Palm Beach',:]New_York_data=us_counties.loc[us_counties['county']=='New York City',:]
#Borden按天和月的确诊数和死亡数的散点图fig=plt.figure()fig.add_subplot(2,2,1)plt.scatter(Borden_data['date'].astype(str),Borden_data['cases'])fig.add_subplot(2,2,2)plt.scatter(Borden_data['date'].astype(str),Borden_data['deaths'])fig.add_subplot(2,2,3)month_data=Borden_data.groupby(by='month')[['cases']].sum()plt.scatter(month_data.index.tolist(),month_data)fig.add_subplot(2,2,4)month_data=Borden_data.groupby(by='month')[['deaths']].sum()plt.scatter(month_data.index.tolist(),month_data)plt.show()
#疫情对Borden几乎没有影响#Palm Beach按天和月的确诊数和死亡数的散点图fig=plt.figure()fig.add_subplot(2,2,1)plt.scatter(Palm_Beach_data['date'].astype(str),Palm_Beach_data['cases'])fig.add_subplot(2,2,2)plt.scatter(Palm_Beach_data['date'].astype(str),Palm_Beach_data['deaths'])fig.add_subplot(2,2,3)month_data=Palm_Beach_data.groupby(by='month')[['cases']].sum()plt.scatter(month_data.index.tolist(),month_data)fig.add_subplot(2,2,4)month_data=Palm_Beach_data.groupby(by='month')[['deaths']].sum()plt.scatter(month_data.index.tolist(),month_data)plt.show()
#Palm Beach七月和11月是高峰期#New York City按天和月的确诊数和死亡数的散点图fig=plt.figure()fig.add_subplot(2,2,1)plt.scatter(New_York_data['date'].astype(str),New_York_data['cases'])fig.add_subplot(2,2,2)plt.scatter(New_York_data['date'].astype(str),New_York_data['deaths'])fig.add_subplot(2,2,3)month_data=New_York_data.groupby(by='month')[['cases']].sum()plt.scatter(month_data.index.tolist(),month_data)fig.add_subplot(2,2,4)month_data=New_York_data.groupby(by='month')[['deaths']].sum()plt.scatter(month_data.index.tolist(),month_data)plt.show()
#纽约从3月起确诊人数一直在增长(12月数据不全暂不考虑)