Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化(下)

简介: Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化

Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化(上):https://developer.aliyun.com/article/1498586


按年分析失业率

导入失业数据并将其转换为数据框架 删除列名 "1960 "至 "1990 "之间的所有列,因为它们是空列,数据中没有各县报告的这些年份的数据,还删除了 "指标名称 "和 "指标代码 "这两列,因为分析不需要它们。

#  
unemp = unemp.drop(unemp.loc[:, 'Indicator Name':'1990'].columns, axis = 1)

In [590]:

unemp.head(5)

image.png

查看 1991 年至 2020 年各国的基本统计数据摘要

unemp.describe()

image.png

绘制 1991 年至 2020 年各国就业率曲线的函数

def plot_unemp_region(country):
    for c in country:
        plt.plot(unemp.loc[c][1:],label = c)

失业率与国家总失业率对比

从 2015 年开始,爱尔兰在控制失业率方面做得更好,因此在 2020 年持续低迷的大流行病期间,爱尔兰在处理失业率方面做得更好。但从 2019 年开始,爱尔兰的失业率仍有上升趋势,应注意避免进一步的损害。

plot_unemp_regio

image.png

不同国家和地区的失业率

在大流行病期间,爱尔兰在处理失业率方面似乎总体上介于欧盟和美国之间,印度在此期间与爱尔兰紧随其后。数据显示,在过去一年中,美国的失业率在这些国家中最低。

plot_unemp_region(country)

image.png

skiprows = [0], index_col = "Date")

In [588]:

cur.head()

image.png

显示欧元相对于其他主要货币波动

输入要与欧元汇率进行比较的货币列表 ,绘制 2020 年 1 月至 2020 年 10 月期间单个货币相对于欧元的波动图 ,从图中可以看出,在过去几个月中,欧元相对于美元、日元、人民币等主要货币的汇率走低,这表明由于为控制病毒传播而实施的封锁和限制行动的法律,企业和组织无法正常运作。欧元估值受中国货币人民币的影响最大,受印度货币卢比的影响最小。

def plot_currency_rate(currency):
    
    plt.figure(figsize = (30,20))
    for c in list(enumerate(currency)):
        plt.subplot(3, 2,c[0]+1)
        plt.plot(cur.loc[:][c[1]],label = c[1])

In [303]:

plot_currency_rate(currency)

image.png

for c in currency:
                    plt.plot(cur.loc[:][c],label = c)
                    plt.ylabel("Euro", fontsize = 12)

image.png

基于每日病例预测死亡的模型开发

sns.barplot(data=df, x= 'cases' , y = 'deaths' , estimator=np.std)

image.png

从下面代码中的相关矩阵图中,我可以看到死亡和病例之间的相关性高达 0.736,而其他变量之间的相关性很弱。

df.corr()

image.png

sns.heatmap(df.corr())

image.png

sns.heatmap(df.corr(),annot=True , cmap='YlGnBu')

image.png

sns.pairplot(df)

image.png

通过可视化观察数据分布,可以清楚地看出病例数的增加导致死亡人数的增加。因此,为了根据全国每天的病例数预测死亡人数,我们使用了线性回归法来完成这一过程,结果如下。

这段代码用于将数组或矩阵随机分割成训练集和测试集。

# 用于将数组或矩阵随机分割成训练集和测试集
from sklearn.model_selection import train_test_split

自变量为 cases,因变量为 deaths,分别赋值给 X 和 y。

X, y = df[['cases']], df['deaths']
  • X 是包含 "cases" 条目的数据框(DataFrame)的一列,y 是包含目标/响应变量 "deaths" 的序列(Series)。
X.head(5)
  • 数据被划分为测试集和训练集,使用 train_test_split() 函数,以 80:20 的比例进行划分。
  • train_test_split() 函数中的 test_size 参数设为 0.2,表示将 20% 的数据作为测试集。


# 训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

在 [565] 处:

# 定义一个线性回归模型
from sklearn import linear_model
# 使用训练集训练模型
regr.fit(X_train, y_train)

image.png

回归系数

  • 回归系数是未知总体参数的估计值,表示预测变量(cases)与响应变量(deaths)之间的关系。
  • beta0 的回归系数为 0.0196,这意味着平均而言,当没有报告病例时,死亡人数为 0.0196。
  • 截距系数为 6.759,说明每天病例增加一个单位时,死亡人数增加 6.759。例如,每增加 100 个新病例,死亡人数每天增加 7.5。
  • 对测试数据进行线性模型预测死亡人数
#基于测试数据进行预测
y_pre

结果:

image.png

# 每天对应病例数量的实际死亡人数
y_test.head(10)

结果:

image.png

df.head()

结果:

image.png

计算评估指标需要重新调整 X 的形状:

# 重新调整 X 的形状以计算指标
X.values.reshape

结果:

<function ndarray.reshape>

计算均值绝对误差(MAE):

from sklearn.metrics import mean_squared_error,r2_score , mean_absolute_error

平均绝对误差(MAE)

  • 平均绝对误差(MAE)是用于回归模型的另一种损失函数。
  • MAE 是目标变量和预测变量之间的绝对差的总和。
  • 我们有实际值 y_test 和预测值 y_pre,可以观察到它们之间的差异。
#MAE
mean_absolute_error(y_test , y_pre)

结果:

18.3128

R-Squared

  • R-squared 是衡量数据与拟合的回归线之间接近程度的统计指标。
  • 提供了关于预测变量“cases”在我们的模型中如何解释响应变量“death”的程度的指示。
  • 我的模型使用预测变量“cases”能够解释响应变量“death”的变异程度为61%。
#R方分数
r2_score(y_test , y_pre)

结果:

0.6156843

散点图展示了线性回归线以及数据围绕该线分布的情况。

plt.scatter(X_test, y_test , color= 'blue' , linewidths=1)

image.png

g

输出[579]:

0.615

输入[580]:

# 构建随机森林模型。

输入[581]:

from sklearn.ensemble import ExtraTreesRegressor, RandomForestRegressor

输入[582]:

rfr.fit(X_train, y_train)

image.png

Y_pred = rfr.predict(X_test)

输入[584]:

rfr.score(X_test, y_test)

输出[584]:

0.39

输入[585]:

plt.scatter(X_test, Y_pred, color='red')
plt.plot(X_test, y_pre, color='blue', linewidth=0.5)

image.png

结论


通过探索性数据分析,发现每天新冠病例增加时,报告的死亡人数也会有所上升。通过将病例作为预测因子、每天的死亡人数作为目标变量的两个回归模型的结果,线性模型在预测每天的死亡人数方面更准确,与每天报告的病例数相关。

通过对包含失业率和欧元汇率数据的数据集进行数据可视化分析,还能够探索各国为限制病毒传播而引入的限制措施对欧洲主要经济体和失业率产生的影响。

欧元兑美元、英镑、人民币等主要货币的汇率在过去几个月中看到了下降,这表明封锁措施对企业和国家经济的影响。对失业率的影响也在失业率数据中清晰可见,爱尔兰的失业率相对于其他国家来说处理得更好,但在过去几个月中失业率明显上升。


参考资料


  1. https://www.sciencedirect.com/science/article/abs/pii/S0048969720323998


相关文章
|
2天前
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云(Word Cloud),又称为文字云或标签云,是一种用于文本数据可视化的技术,通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中,更频繁出现的单词会显示得更大,反之则更小。
|
2天前
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云是文本数据可视化的工具,显示单词频率,直观、美观,适用于快速展示文本关键信息。 - 用途包括关键词展示、数据探索、报告演示、情感分析和教育。 - 使用`wordcloud`和`matplotlib`库生成词云,`wordcloud`负责生成,`matplotlib`负责显示。 - 示例代码展示了从简单词云到基于蒙版、颜色和关键词权重的复杂词云生成。 - 案例覆盖了中文分词(使用`jieba`库)、自定义颜色和关键词权重的词云。 - 代码示例包括读取文本、分词、设置词云参数、显示和保存图像。
16 1
|
1天前
|
数据可视化
Seaborn 可视化(三)
Seaborn的pairplot用于多变量数据可视化,但上半部分与下半部分重复。可通过PairGrid手动定制,如示例所示,用regplot和kdeplot分别绘制对角线以上和以下的图,histplot画对角线。hue参数增强可视化,比如在violinplot和lmplot中按性别着色,展示不同类别。还能通过点的大小和形状(如markers参数)添加信息。Seaborn提供darkgrid等5种样式,用sns.set_style切换。
|
1天前
|
数据可视化 Python
Seaborn 可视化(二)
Seaborn教程展示了如何用`jointplot`创建蜂巢图,以及使用`matplotlib`的`hexbin`函数绘制2D核密度图。此外,它还介绍了2D核密度图,强调其在展示两个变量联合分布上的作用。条形图、箱线图和小提琴图也被讨论,其中箱线图揭示了数据的统计特性,而小提琴图结合了箱线图和核密度图的信息。`pairplot`函数用于可视化数据集中所有变量之间的两两关系。每种图表类型都配有示例图像。
|
1天前
|
数据可视化 数据挖掘 API
Seaborn 可视化(一)
Seaborn是Python的一个基于matplotlib的统计图形库,提供交互式界面,便于创建吸引人的统计图表。它与Pandas集成良好,支持直接使用DataFrame数据进行绘图。Seaborn能绘制直方图(distplot)、密度图(核密度估计)、条形图(计数图)以及散点图(regplot、lmplot、jointplot),适用于单变量和双变量数据分析,如展示分布、关系和趋势。例如,`sns.distplot()`用于直方图,`sns.lmplot()`和`sns.jointplot()`则用于绘制散点图并可添加回归线。
|
7天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
11天前
|
Python
Python编程实战:如何将列表组装成一棵树结构
本文介绍了如何在Python中将列表转换为树结构。首先定义`TreeNode`类表示节点,包含值和子节点列表。然后,通过`list_to_tree`函数递归地将列表转为树。此外,还提供了添加和删除节点的方法。文章旨在帮助读者理解和操作树结构,以解决实际编程问题。
Python编程实战:如何将列表组装成一棵树结构
|
5天前
|
开发者 Python
【干货】Python编程惯例
【干货】Python编程惯例
10 1
|
7天前
|
Shell Python
GitHub星标破千Star!Python游戏编程的初学者指南
Python 是一种高级程序设计语言,因其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言。 目前的编程书籍大多分为两种类型。第一种,与其说是教编程的书,倒不如说是在教“游戏制作软件”,或教授使用一种呆板的语言,使得编程“简单”到不再是编程。而第二种,它们就像是教数学课一样教编程:所有的原理和概念都以小的应用程序的方式呈现给读者。
|
7天前
|
机器学习/深度学习 存储 自然语言处理
惊艳!老司机熬夜总结的Python高性能编程,高效、稳定、快速!
Python 语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理机器学习、科学计算、推荐系统构建等。 能够轻松实现和代码跑得够快之间的取舍却是一个世人皆知且令人惋惜的现象而这个问题其实是可以解决的。 有些人想要让顺序执行的过程跑得更快。有些人需要利用多核架构、集群,或者图形处理单元的优势来解决他们的问题。有些人需要可伸缩系统在保证可靠性的前提下酌情或根据资金多少处理更多或更少的工作。有些人意识到他们的编程技巧,通常是来自其他语言,可能不如别人的自然。