+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-07(2)

2019-08(89)

2019-09(94)

2019-10(15)

2019-11(5)

python可视化(案例)遥遥无期的美国新冠疫情

发布于2020-11-09 17:44     阅读(123)     评论(0)     点赞(25)     收藏(2)


0

1

2

3

4

5

6

新型冠状病毒引发的全球疫情是 2020 年度最有影响力的事件之一,本案例获取了美国健康统计中心 (NCHS)和 OpenTable 的数据集, NCHS获取网址),对美国新冠疫情导致的人口死亡增长率、疫情后餐饮业上座率做了分析,并从新冠的角度对美国大选做了部分探索。


本文用到的库包括:

from datetime import date
import seaborn as sns
import matplotlib.colors as cs
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['axes.spines.bottom'] = True
plt.rcParams['axes.spines.left'] = True
plt.rcParams['axes.spines.right'] = False
plt.rcParams['axes.spines.top'] = False
plt.rcParams['legend.frameon'] = False

美国健康统计中心死亡人数统计数据集介绍

美国健康统计中心(NCHS)负责全美各州死亡人数、死亡原因等数据的统计,本数据获取了 2015 年 - 2020 年 10 月 3 日美国各管辖区周死亡人数统计数据。数据集包含以下字段:

字段解释
Jurisdiction管辖区域、州
Week Ending Date工作周最后一天所在日期
MMWRYear
MMWRWeek在年度对应的工作周
Race/Ethnicity种族
Outcome死亡原因,主要分为三种情况:全部原因导致的死亡,剔除新冠导致的死亡,新冠导致的死亡
Number of Deaths死亡人数
# 读取数据步骤省略,请自行下载后通过 pd.read_csv 读取 #
df = pd.read_csv('**')
df.head()
JurisdictionWeek Ending DateMMWRYearMMWRWeekRace/EthnicityOutcomeNumber of Deaths
0Alabama01/10/201520151HispanicAll Cause10.0
1Alabama01/09/201620161HispanicAll CauseNaN
2Alabama01/07/201720171HispanicAll Cause12.0
3Alabama01/06/201820181HispanicAll CauseNaN
4Alabama01/05/201920191HispanicAll CauseNaN

将死亡人数按照年、周、死亡原因进行聚合,并通过数据透视,得到每年、每周对应各原因的死亡总人数。

data = df

data = data.groupby(['MMWRYear', 'MMWRWeek', 'Outcome'],
                    as_index=False)['Number of Deaths'].sum()
# 将multi—index裂解
data = data.pivot_table(values='Number of Deaths',
                        index=['MMWRYear', 'MMWRWeek'],
                        columns='Outcome',
                        aggfunc='sum',
                        )
data['Year'] = data.droplevel(level=1).index
data['Week'] = data.droplevel(level=0).index
data['Year'] = data['Year'].astype('category')
data.head()
OutcomeAll CauseAll Cause excluding COVID-19COVID-19YearWeek
MMWRYearMMWRWeek
2015162147.062147.00.020151
261543.061543.00.020152
358957.058957.00.020153
457538.057538.00.020154
557632.057632.00.020155
fontsize = 17
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize
plt.rcParams['legend.title_fontsize'] = fontsize
plt.rcParams['figure.figsize'] = (15, 6)
# 绘制历年 周死亡人数

week_num = 38
data = data.loc[~((data['Year'] == 2020) & (data['Week'] > week_num))]

sns.lineplot(x='Week', y='All Cause', hue='Year',
             data=data, palette='Blues', lw=4)

# 前38周,标注2020年比2019年超死亡人数

where = np.array(data.loc[data['Year'] == 2020, 'All Cause'][:week_num]) > np.array(
    data.loc[data['Year'] == 2019, 'All Cause'][:week_num])

plt.fill_between(data.loc[data['Year'] == 2020, 'Week'][:week_num],
                 data.loc[data['Year'] == 2020, 'All Cause'][:week_num],
                 data.loc[data['Year'] == 2019, 'All Cause'][:week_num],
                 where=where,
                 color='tab:red',
                 alpha=0.6,
                 label='Excess Death'
                 )


plt.legend(loc=1)
plt.ylabel('Population Per Week ')
plt.title('Dead Population by All Cause Per Week of The United States of American')

在这里插入图片描述

从运行结果可知:

  • 2020 年度以前,美国历年死亡人数随工作周大致有相同的分布规律;
  • 2020 年度,由于新冠疫情因素,死亡人数较 2019 年有了显著增长;
  • 由新冠疫情带来的额外死亡人数分为两个明显的峰,第一个峰的死亡人数远大于第二个峰。

新冠造成的死亡人数

同样的方式,可视化新冠疫情导致的死亡人数。

fontsize = 17
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize
plt.rcParams['legend.title_fontsize'] = fontsize
plt.rcParams['figure.figsize'] = (12, 5)


sns.lineplot(x='Week', y='COVID-19', hue='Year',
             palette='Blues', legend=False, lw=6, data=data)

week_num = 38
plt.fill_between(data.loc[data['Year'] == 2020, 'Week'][:week_num],
                 data.loc[data['Year'] == 2020, 'COVID-19'][:week_num],
                 0,
                 color='tab:red',
                 alpha=0.6,
                 label='Excess Death'
                 )
plt.legend()
plt.ylabel('Death Cause by COVID-19')

plt.title(
    'Dead Population Per Week by COVID-19 of The United States of American', fontsize=20)

在这里插入图片描述

从运行结果可以看出,与上文不同的是,本例将历年的基线调整为 0, 对各个峰值的相对以及绝对数据的可视化更为清晰。

各州死亡人数增长率

选取 2019 和 2020 年度的死亡人数数据,并通过求差获得 2020 年度死亡人数增长率。

data = df

# 选择2019和2020年数据
data = data.loc[(data['MMWRYear'] == 2019) | (data['MMWRYear'] == 2020)]
# 选择前37周数据
data = data.loc[data['MMWRWeek'] <= 37]
# 选择所有死亡人数
data = data.loc[data['Outcome'] == 'All Cause']

data = data.groupby(['Jurisdiction', 'MMWRWeek', 'MMWRYear'],
                    as_index=False)['Number of Deaths'].sum()
# # 将multi—index裂解
data = data.pivot_table(values='Number of Deaths',
                        index=['Jurisdiction', 'MMWRWeek'],
                        columns='MMWRYear',
                        aggfunc='sum',
                        )
data['States'] = data.droplevel(level=1).index
data['Week'] = data.droplevel(level=0).index
data['Year_increase /%'] = 100*(data[2020]-data[2019])/data[2019]
data
MMWRYear20192020StatesWeekYear_increase /%
JurisdictionMMWRWeek
Alabama11060.01066.0Alabama10.566038
21075.01108.0Alabama23.069767
31097.01020.0Alabama3-7.019143
41047.01034.0Alabama4-1.241643
51081.01012.0Alabama5-6.382979
.....................
Wyoming3365.0103.0Wyoming3358.461538
3472.085.0Wyoming3418.055556
3581.084.0Wyoming353.703704
3688.095.0Wyoming367.954545
3788.0106.0Wyoming3720.454545

1961 rows × 5 columns

将全美各州死亡率变化趋势分别绘制成子图,并在子图中添加全美平均线。

fontsize = 15
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize
plt.rcParams['legend.title_fontsize'] = fontsize

# 各州按总死亡率进行降序排列
states = data.groupby(['States'])['Year_increase /%'].sum(
).sort_values(ascending=False).index

fig = plt.figure(figsize=(22, 10))

nrows = 6
ncols = 9

# 全美平均线
avg = data['Year_increase /%'].mean()

for i, state in enumerate(states):
    ax = fig.add_subplot(nrows, ncols, i+1)

    # 获取各州数据
    state_data = data.loc[data['States'] == state]

    # 绘制全美平均增长率
    ax.axhline(y=avg, color='tab:red', lw=3, alpha=0.6, ls='--')

    # 绘制各州每周增长率
    ax.plot('Week', 'Year_increase /%',
            data=state_data,
            color='tab:blue',
            alpha=0.8,
            lw=4)

    # 标注平均周增长率
    mean_increase = state_data['Year_increase /%'].mean()
    ax.text(0.9, 0.9,
            '%.1f%%' % mean_increase,
            transform=ax.transAxes,
            fontsize=15,
            va='center',
            ha='center',
            bbox={'facecolor': 'tab:orange',
                  'boxstyle': 'round',
                  'alpha': 0.2}
            )

    ax.set_title(state)
    ax.set_ylim((-20, 80))

    if (i % ncols) != 0:
        ax.set_yticks([])
    else:
        ax.set_ylabel('Increase/%',fontsize=14)
        ax.set_yticks([-10,20,60])

    if i < (nrows-1)*ncols:
        ax.set_xticks([])
    else:
        ax.set_xticks(np.arange(0, 38, 9))
        ax.set_xlabel('Week')


fig.suptitle('Dead Population Increase Compared to 2019 of The United States of American',
             fontsize=20, va='top')
plt.subplots_adjust(wspace=0.1, hspace=0.3)

在这里插入图片描述

从运行结果可知:

  • 53个辖区,年度平均增长率约为 11.78% ( avg 的数值),有 21 个辖区高于平均增长率;
  • 纽约州城区、新泽西州第一波涨幅峰值惊人地达到了 100% 以上;
  • 全美疫情的两波死亡人数增长,第一波主要由纽约等州构成,第二波主要由德克萨斯等州构成;
  • 相当一部分州在第一波疫情后,第二波未再出现明显的死亡人数增长;
  • 华盛顿等增长率排名靠后的州,没有出现明显的的死亡率峰。

以上数据也解释了为什么疫情期间纽约市市长喊话白宫且指责最为强烈:据央视新闻报告,新冠肺炎疫情在全美多地、多点暴发,迅速蔓延。联邦政府和州政府之间的矛盾也愈演愈烈,美国纽约州州长曾公开指责联邦政府没有对纽约州抗击疫情提供更多支持(2020-4-11)。

选民倾向

获取每个州(非本年度数据)的党派支持数据。

votes=pd.read_excel('**')
votes.head()
statestate_in_chineseabbreviationticketssupport
0Alaska阿拉斯加州AK3Grand Old
1Alabama阿拉巴马州AL9Grand Old
2Arkansas阿肯色州AR6Grand Old
3Arizona亚利桑那州AZ8Democratic
4California加利福尼亚州CA54Democratic

将个州的政治倾向进行颜色对应。

def color_changed_to(support):
    # 共和党 - 红色
    if support=='Grand Old':
        return 'tab:red'
    # 民主党 - 蓝色
    elif support=='Democratic':
        return 'tab:blue'
    # 摇摆州 - 灰色
    else :
        return 'tab:gray'
votes['color']=votes['support'].apply(lambda x:color_changed_to(x))
state_votes={state:{'tickets':tickets,'support':party,'color':color} 
 for state,tickets,party,color in zip(votes['state'],votes['tickets'],votes['support'],votes['color'])}
fontsize = 15
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize
plt.rcParams['legend.title_fontsize'] = fontsize

# 各州按总死亡率进行降序排列
states = data.groupby(['States'])['Year_increase /%'].sum(
).sort_values(ascending=False).index

fig = plt.figure(figsize=(22, 10))

nrows = 6
ncols = 9

# 全美平均线
avg = data['Year_increase /%'].mean()

for i, state in enumerate(states):
    ax = fig.add_subplot(nrows, ncols, i+1)
    
    # 按照政治倾向情况对每个州进行颜色填充
    ax.set_facecolor(state_votes[state]['color'])

    # 获取各州数据
    state_data = data.loc[data['States'] == state]

    # 绘制全美平均增长率
    ax.axhline(y=avg, color='white', lw=3, alpha=0.6, ls='--')

    # 绘制各州每周增长率
    ax.plot('Week', 'Year_increase /%',
            data=state_data,
            color='k',
            alpha=0.8,
            lw=4)

    # 标注平均周增长率
    mean_increase = state_data['Year_increase /%'].mean()
    ax.text(0.75, 0.80,
            '%.1f%%' % mean_increase,
            transform=ax.transAxes,
            fontsize=15,
            color='white',
            va='center',
            ha='center',
            bbox={'facecolor': 'tab:orange',
                  'boxstyle': 'round',
                  'alpha': 0.2}
            )

    ax.set_title(state)
    ax.set_ylim((-20, 80))

    if (i % ncols) != 0:
        ax.set_yticks([])
    else:
        ax.set_ylabel('Increase/%',fontsize=14)
        ax.set_yticks([-10,20,60])

    if i < (nrows-1)*ncols:
        ax.set_xticks([])
    else:
        ax.set_xticks(np.arange(0, 38, 9))
        ax.set_xlabel('Week')


fig.suptitle('Dead Population Increase Compared to 2019 of The United States of American',
             fontsize=20, va='top')
plt.subplots_adjust(wspace=0.1, hspace=0.3)

在这里插入图片描述

从数据上,我们就发现一些异象,表现在:

  • 前两行,大多分布的是民主党支持者居多的州(蓝色),作为支持抗疫的州,州死亡人数增长率较大;
  • 后两行,大多分布的是共和党支持者居多的州(红色),州死亡人数增长率较小;
  • 结论,难道是信仰,让支持共和党州的人不得病吗?

选民倾向的直接对比

将民主党、共和党、摇摆州的死亡率数据绘制成箱型分布。

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)

party_data = data.merge(right=votes, how='left',
                        left_on='States', right_on='state')

party_data=party_data.loc[party_data['States']!='New York City']   # 辖区存在纽约市和纽约州因此需要,扣除重复计数的 纽约市

plt.ylim(-30, 160)
sns.boxplot(x='support',
            y='Year_increase /%',
            width=0.5,
            palette=[cs.to_rgba(color)
                     for color in ['tab:blue', 'tab:red', 'tab:gray']],   # 自定义色板
            order=['Democratic', 'Grand Old', 'Swing State'],
            data=party_data,
            ax=ax)

mean_data = party_data.groupby(['support'])['Year_increase /%'].mean()
for i, mean in enumerate(mean_data):
    ax.text(0.18+i/len(mean_data), 0.85, 'mean:\n%.2f%%' % mean,
            fontsize=18,
            ha='left',
            transform=ax.transAxes)
ax.set_title('Dead Increase Distribution by Political Tendency', fontsize=20)
ax.set_xlabel('')

在这里插入图片描述

可以看出,摇摆州与共和党死亡增长率相当,而民主党州比共和党州高出 4.8 个百分点。这就奇怪了,民主党不是主张抗疫吗?怎么死亡人数增长率远高于共和党和摇摆州。

各种族死亡人数增长率

将各种族的数据进行死亡人数增长率的计算。

data = df

data = data.loc[(data['MMWRYear'] == 2019) | (data['MMWRYear'] == 2020)]

data = data.loc[data['MMWRWeek'] <= 37]

data = data.loc[data['Outcome'] == 'All Cause']

data = data.groupby(['Race/Ethnicity', 'MMWRWeek', 'MMWRYear'],
                    as_index=False)['Number of Deaths'].sum()

data = data.pivot_table(values='Number of Deaths',
                        index=['Race/Ethnicity', 'MMWRWeek'],
                        columns='MMWRYear',
                        aggfunc='sum',
                        )
data['Races'] = data.droplevel(level=1).index
data['Week'] = data.droplevel(level=0).index
data['Year_increase /%'] = 100*(data[2020]-data[2019])/data[2019]
data
MMWRYear20192020RacesWeekYear_increase /%
Race/EthnicityMMWRWeek
Hispanic14897.05024.0Hispanic12.593425
24954.05187.0Hispanic24.703270
34878.05117.0Hispanic34.899549
44750.05055.0Hispanic46.421053
54847.05020.0Hispanic53.569218
.....................
Other33377.0436.0Other3315.649867
34349.0393.0Other3412.607450
35325.0430.0Other3532.307692
36339.0381.0Other3612.389381
37321.0421.0Other3731.152648

222 rows × 5 columns

将各种族死亡率变化趋势与全美死亡率变化趋势进行分面绘制。

fontsize = 17
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize
plt.rcParams['legend.title_fontsize'] = fontsize
plt.rcParams['figure.figsize'] = (20, 7)

fig, axs = plt.subplots(2, 3, sharex=True)

races = data.groupby('Races')['Year_increase /%'].mean().sort_values().index

axs = axs.ravel()
for i, race in enumerate(races):
    ax = axs[i]
    race_data = data.loc[data['Races'] == race]
    ax.plot(race_data['Week'], race_data['Year_increase /%'], lw=4)
    ax.set_title(race)

    ax.fill_between(
        race_data['Week'], race_data['Year_increase /%'], color='tab:red', alpha=0.7)

    # 标注平均周增长率
    mean_increase = race_data['Year_increase /%'].mean()
    ax.text(0.9, 0.8,
            '%.1f%%' % mean_increase,
            transform=ax.transAxes,
            fontsize=15,
            va='center',
            ha='center',
            bbox={'facecolor': 'tab:blue',
                  'boxstyle': 'round',
                  'alpha': 0.2}
            )
    
    # 绘制全美国趋势
    sns.lineplot(x='Week', y='Year_increase /%', color='k',
                 err_style='bars', err_kws={'lw': 0},  # 误差样式选用误差线,并将误差线线宽置为0,则不显示误差线
                 data=data, alpha=0.7, lw=4, label='Avg of USA', ax=ax)

    ax.legend(loc=2, fontsize=15)
fig.suptitle('Dead Population Increase Compared to 2019 of The United States of American',
             fontsize=20, va='top')

在这里插入图片描述

从运行结果可知,非西班牙裔白人平均增长死亡率最低为 8.2%, 后续依次是亚裔、黑人、本地土著、西班牙裔,数据中包含没有种族记录的死者信息,该部分人员平均增长死亡率最高为 44.3% 。

各年龄层死亡人数增长率

NCHS 同时发布了全美各州各年龄层死亡人数数据的统计,如下:

#------------数据集导入部分省略------------#
df = pd.read_csv('**')
df.head()
JurisdictionWeek Ending DateYearWeekAge GroupNumber of Deaths
0Alabama01/10/20152015125-44 years67.0
1Alabama01/17/20152015225-44 years49.0
2Alabama01/24/20152015325-44 years55.0
3Alabama01/31/20152015425-44 years59.0
4Alabama02/07/20152015525-44 years47.0
data = df

data = data.loc[(data['Year'] == 2019) | (data['Year'] == 2020)]

data = data.loc[data['Week'] <= 37]

data = data.groupby(['Age Group', 'Week', 'Year'],
                    as_index=False)['Number of Deaths'].sum()
# 将multi—index裂解
data = data.pivot_table(values='Number of Deaths',
                        index=['Age Group', 'Week'],
                        columns='Year',
                        aggfunc='sum',
                        )
data['Ages'] = data.droplevel(level=1).index
data['Week'] = data.droplevel(level=0).index
data['Year_increase /%'] = 100*(data[2020]-data[2019])/data[2019]
data
Year20192020AgesWeekYear_increase /%
Age GroupWeek
25-44 years12765.03008.025-44 years18.788427
22667.02875.025-44 years27.799025
32530.02829.025-44 years311.818182
42573.02796.025-44 years48.666926
52509.02757.025-44 years59.884416
.....................
Under 25 years331070.01133.0Under 25 years335.887850
341066.01077.0Under 25 years341.031895
351069.01012.0Under 25 years35-5.332086
361124.0977.0Under 25 years36-13.078292
371084.01021.0Under 25 years37-5.811808

222 rows × 5 columns

通过 sns.lineplot接口可以快速进行各年龄层的可视化,需要注意的是:

  • sns.lineplot接口的 palette 颜色板与 hue 序列是一一对应的;
  • 对于非数字的 hue ,sns.lineplot接口的排序方式是根据 hash 值,因此当默认排序不符合制图要求时,可通过传入 hue_order 进行修正。
fontsize = 20
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize
plt.rcParams['legend.title_fontsize'] = fontsize
plt.rcParams['legend.fontsize'] = 17

plt.rcParams['figure.figsize'] = (15, 6)

# Age_group 排序
hue_order = ['Under 25 years', '25-44 years', '45-64 years', '65-74 years', '75-84 years',
         '85 years and older', ]

sns.lineplot(x='Week', y='Year_increase /%', hue='Ages',hue_order=hue_order,
             palette='Blues', data=data, lw=4)
plt.title('Dead Population Increase Compared to 2019 of The United States of American',
          fontsize=20, va='top')

在这里插入图片描述

从运行结果可知,相比于 25 岁以下年龄组,65 岁以上年龄组有着较高的死亡增长率,且 65 - 74,75 - 84,85 以上三组未表现出较为明显的差异。

疫情后的经济复苏还要多久-以餐饮业为例

餐厅上座率数据集介绍

OpenTable 发布了 2020 年度美国主要州餐饮入座率相比上年度同期的变化情况。

df = pd.read_csv('**')
df = df.loc[df['Type'] == 'state']

# 宽数据变为长数据
df = df.melt(id_vars=['Type', 'Name'], value_name='Seated Percent',)
df = df.rename(columns={'variable': 'Date'})

df['Date'] = pd.to_datetime(df['Date']).dt.date

df.head()
TypeNameDateSeated Percent
0stateAlabama2020-02-18-14.0
1stateAlberta2020-02-182.0
2stateArizona2020-02-180.0
3stateBaja California Sur2020-02-18-6.0
4stateBritish Columbia2020-02-188.0

全美

sns.lineplot接口在绘制折线图的同时,同时对每个位置进行 95% 置信区间的参数估计,并以误差线或者误差带(通过参数 err_style 调节,默认是误差带)的形式可视化,本例可视化了 2020 年度 2 月 18 日 - 9 月 29 日期间全美日均餐厅入座率下降情况,并以误差的形式展示了其 95% 置信区间。

fontsize = 20
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize


fig, ax = plt.subplots(1, 1, figsize=(10, 6))
sns.lineplot(x='Date', y='Seated Percent', legend=False,
             alpha=0.4, lw=4, data=df, ax=ax)

# 设置 x 刻度
start_date = date(2020, 2, 19)
mid_date1 = date(2020, 5, 5)
mid_date2 = date(2020, 6, 20)
end_date = date(2020, 9, 29)

plt.xticks([start_date, mid_date1, mid_date2, end_date],
           ['Feb/18', 'May/5', 'Jun/20', 'Sep/29'])
plt.xlim(start_date, end_date)

# 设置 y 刻度
plt.yticks([-95,   -80, -60, -40, 0,    10, 40],
           ['-95%', '', '', '-40%', 0, '+10%', ''])
plt.ylim(-100, 25)

plt.axhline(y=0, color='darkred', lw=3, ls='--')
plt.xlabel('')
plt.title('The Seated Percent Compared to Last Year by COV-19 of USA')

在这里插入图片描述

从运行结果可知:

  • 伴随着第一波疫情,餐厅入座率迅速降低 100% ;
  • 5 月 5 日左右,全美餐饮业开始复苏,出现了就座率上升的拐点;
  • 截止 9 月底,全美餐饮就座率仍较上年度降低了 40%,且未出现较为明显且强劲的上升趋势。

弗罗里达州和加州

本例可视化了全美各州的餐饮业就座率变化趋势(灰度显示),并将弗罗里达和加州两州的数据用彩色进行了突出显示。

fontsize = 20
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize

show_states = ['California', 'Florida']
colors = ['tab:blue', 'tab:red']

fig, ax = plt.subplots(1, 1, figsize=(12, 6))
hue_order = df.groupby(['Name'])['Seated Percent'].mean().sort_values().index
sns.lineplot(x='Date',
             y='Seated Percent',
             hue='Name',
             hue_order=hue_order,
             legend=False,
             palette='gray',
             alpha=0.4,
             data=df, ax=ax)
for i, show_state in enumerate(show_states):
    plt.plot(df.loc[df['Name'] == show_state, 'Date'],
             df.loc[df['Name'] == show_state, 'Seated Percent'],
             lw=3,
             label=show_state,
             color=colors[i])

# 设置 x 刻度
start_date = date(2020, 2, 19)
mid_date1 = date(2020, 5, 5)
mid_date2 = date(2020, 6, 20)
end_date = date(2020, 9, 29)

plt.xticks([start_date, mid_date1, mid_date2, end_date],
           ['Feb/18', 'May/5', 'Jun/20', 'Sep/29'])
plt.xlim(start_date, end_date)

# 设置 y 刻度
plt.yticks([-95,   -80, -60, -40, 0,    10, 40],
           ['-95%', '', '', '-40%', 0, '+10%', '+40%'])
plt.ylim(-100, 80)

plt.axhline(y=0, color='darkred', lw=3, ls='--')
plt.xlabel('')
plt.title('The Seated Percent Compared to Last Year by COV-19 of USA')
plt.legend()

在这里插入图片描述

从运行结果可知,弗罗里达和加州都受到了疫情影响,相比于加州,弗罗里达餐饮业恢复较快。

总结

我们了解到以下信息:

  • 美国的疫情分为明显的两波,第一波的死亡人数远大于第二波;
  • 全美因为疫情因素,造成了平均额外 11% 左右的人口死亡率;
  • 数据分布上,各州党派支持倾向一定程度上影响了疫情的发展;
  • 本次疫情对各个种族的死亡影响率不同,非西班牙裔白人死亡率最低;
  • 本次疫情对各个年龄层的死亡影响率不同,高龄死亡率最高;
  • 餐饮业是受疫情影响较为严重的行业,截止9月底,全美餐饮就座率仍与上年度差距 40% 。

在新冠疫情防治上,民主党是主张积极防疫抗疫的,最新消息拜登已拿到足够多选举人票,有望当选,或许对于当前居高不下的美国新冠数据是一种慰藉吧。

本文是实验楼训练营 《11 个案例掌握 Python 数据可视化》 的一部分。

由于博客无法上传数据集,如对本文代码实操有兴趣,请移步 作者实验楼主页 (https://www.lanqiao.cn/courses/3023)

实验楼集成了代码的运行环境和数据,里面的每一行代码都经过多次测试,确保能正常运行,可以零基础实操。

原文链接:https://blog.csdn.net/weixin_43636051/article/details/109557145

0

1

2

3

4

5

6

7

8



所属网站分类: 技术文章 > 博客

作者:天青色等烟雨

链接: https://www.pythonheidong.com/blog/article/611645/7bffb32409da3340e339/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)