关于数据挖掘:Python随机森林线性回归对COVID19疫情汇率数据预测死亡率病例数失业率影响可视化

52次阅读

共计 5605 个字符,预计需要花费 15 分钟才能阅读完成。

全文链接:https://tecdat.cn/?p=33536

原文出处:拓端数据部落公众号

自 2019 年 12 月以来,传染性冠状病毒疾病 2019(COVID-19)迅速席卷寰球,并在短短几个月内达到了大风行状态。迄今为止,寰球已报告了超过 6800 万例病例。为了应答这一大流行病,施行了公共卫生政策,通过施行“居家令”政策来减缓 COVID-19 的流传。

因而,为了查看寰球范畴内采取的限度措施对人员流动性的有效性,咱们帮忙客户钻研死亡人数与工夫的关系。

问题陈说:

该项目标指标是剖析各国政府采取的各种限度措施对人员流动性的影响,以管制 COVID-19 病例和由此导致的死亡人数对经济和失业率的影响。咱们应用汇率数据来查看这些限度措施对经济的影响,并在此期间查看失业率的变动。我开发了一个模型来预测因为病例减少而导致的 COVID-19 相干死亡人数。

应用 read csv 读取数据,而后应用数据可视化摸索数据

#columns in the data
df.columns

数据信息

- 数据集中的分类变量:dateRep、countriesAndTerritories、geoId、countryterritoryCode、continentExp
- 数据集中的有限变量:日、月、年、病例数、死亡数、popData2019、Cumulative_number_for_14_days_of_COVID-19_cases_per_100000

#info about the data
df.info()

数据集中有 49572 个观测值和 12 个特征值

df.shape

Out[7]:

(49572, 12)

In [8]:

# 属性 / 特色之间的相关性
 
df.corr()

# 数据集阐明
 
df.describe()

每天的 14 天累计病例数、病例数和死亡数。

-2783 14 天累计病例数不为零的天数
- 报告的 14 天累计病例数为零的天数。
- 报告的 14 天累计死亡人数为零的天数。

# 数据荡涤 - 查看是否存在空值
df.isnull()

# 这些仿佛是数据集中的实在读数,因而将其从数据集中删除可能会扭转剖析后果。所以放弃原样。print(df["Cumulative_number_for_14_days_of_COVID-19_cases_per_100000"].isnull().value_counts()) # 2783 天中没有累积 14 天病例为零

# 可视化

import seaborn as sns

In [107]:


df.columns

# 该函数承受特色 / 列名作为输出。# 绘制特色在天数和月份上的计数状况。def plots_days_mnths(x):
    
    plt.figure(figsize = (30,20))
    feature = ['day','month']
  • 病例数的日剖析和月剖析
  • 从病例图中咱们能够看出,报告病例从 1 月份开始迅速减少,到 2020 年 7 月至 9 月达到最高峰。
  • 而各月每天的报告病例数大抵相等。

plots_days

最后几个月报告的死亡病例有所增加,但从图中能够看出,自 7 月份以来已失去管制。
每月各天的报告死亡病例数大体相当,但略有不同。

plots_days_m

import numpy as np

截至 2010 年 10 月,全世界报告的病例总数约为 39400032 例。

df['cases'].sum() 


plt.ylabel('Counts', fontsize =14)
plt.title("Histogram of cases", fontsize = 16)

Out[114]:

[0, 100000, 0, 100]

在大多数状况下,每天报告的死亡人数在 500 人及以下。
在大多数天数中,约有 50% 的天数每天报告的新病例超过 40000 例。
全世界均匀每天报告的死亡人数约为 795 人,均匀每天报告的死亡人数为 23 人。

df[['deaths', 'cases']].mean(axis = 0, skipna = True) 

截至 2010 年 10 月,全世界报告的死亡总人数约为 1105353 人

df['deaths'].sum() 


plt.xlabel('deaths', fontsize = 14)
plt.ylabel('Counts', fontsize =14)

# 将日期列转换为日期工夫格局,以便绘制图表。date = pd.to_datetime(df['dateRep']) 

plt.figure(figsize =(15,10)) 

用回归法直观显示病例和死亡人数及其散布状况

- 从图中能够看出,随着病例数的减少,死亡人数也在减少。
- 显示出这两个特色之间的正线性关系。

# 用回归法直观显示病例和死亡人数及其散布状况
sns.jointplot(x='cases' , y='deaths' , data=df, kind='reg')

按年剖析失业率

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

#  

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

In [590]:

unemp.head(5)

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

unemp.describe() 

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

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

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

从 2015 年开始,爱尔兰在管制失业率方面做得更好,因而在 2020 年继续低迷的大流行病期间,爱尔兰在解决失业率方面做得更好。
但从 2019 年开始,爱尔兰的失业率仍有回升趋势,应留神防止进一步的侵害。

plot_unemp_regio

不同国家和地区的失业率

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


plot_unemp_region(country)


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

In [588]:

cur.head()

显示欧元绝对于其余次要货币稳定的性能

输出要与欧元汇率进行比拟的货币列表
绘制 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[:]],label = c[1])
 
        

In [303]:


plot_currency_rate(currency) 

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

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

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

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

df.corr()

sns.heatmap(df.corr())

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

sns.pairplot(df)

通过可视化察看数据分布,能够分明地看出病例数的减少导致死亡人数的减少。因而,为了依据全国每天的病例数预测死亡人数,咱们应用了线性回归法来实现这一过程,后果如下。

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

# 用于将数组或矩阵随机宰割成训练集和测试集
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)

回归系数

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

后果:

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

后果:

df.head()

后果:

计算评估指标须要从新调整 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)

g

输入[579]:

0.615

输出[580]:

# 构建随机森林模型。

输出[581]:

from sklearn.ensemble import ExtraTreesRegressor, RandomForestRegressor

输出[582]:

rfr.fit(X_train, y_train)

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)

论断

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

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

欧元兑美元、英镑、人民币等次要货币的汇率在过来几个月中看到了降落,这表明封闭措施对企业和国家经济的影响。对失业率的影响也在失业率数据中清晰可见,爱尔兰的失业率绝对于其余国家来说解决得更好,但在过来几个月中失业率显著回升。

参考资料

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

最受欢迎的见解

1. 在 python 中应用 lstm 和 pytorch 进行工夫序列预测

2.python 中利用长短期记忆模型 lstm 进行工夫序列预测剖析

3.Python 用 RNN 循环神经网络:LSTM 长期记忆、GRU 门循环单元、回归和 ARIMA 对 COVID-19 新冠疫情新增人数工夫序列

4.Python TensorFlow 循环神经网络 RNN-LSTM 神经网络预测股票市场价格工夫序列和 MSE 评估准确性

5.r 语言 copulas 和金融工夫序列案例

6.R 语言用 RNN 循环神经网络、LSTM 长短期记忆网络实现工夫序列长期利率预测

7.Matlab 创立向量自回归(VAR)模型剖析消费者价格指数 (CPI) 和失业率工夫序列

8.r 语言 k -shape 工夫序列聚类办法对股票价格工夫序列聚类

9. R 语言联合新冠疫情 COVID-19 股票价格预测:ARIMA,KNN 和神经网络工夫序列剖析

正文完
 0