使用 Python 进行失业数据分析

2025年3月17日 | 阅读11分钟

如何计算失业率?

失业率是通过计算失业人数占总劳动力人口的比例来评估失业状况的指标。在新冠疫情(COVID-19)期间,失业率显著上升,这使得对其进行分析成为一项有价值的数据科学研究。在本教程中,我们将引导您了解使用 Python 进行失业分析的源代码。

简介: 自2020年以来,多家机构一直在记录美国的官方失业数据。美国劳工部的劳工统计局(BLS)每个月初发布上个月美国就业和失业总人数的信息以及各种其他统计数据。失业率是通过失业人数乘以文职劳动力来确定的。要被归类为“失业”,一个人必须年满十六岁,在过去至少四周内没有兼职或全职工作,并且一直在积极寻找工作。

我们团队决定研究美国的失业统计数据,重点关注2000年至2023年。我们的目标是利用这段时期的数据来预测下一年(2023年)的失业率。由于BLS仅以离散的月度增量提供失业率数据,我们计划预测2023年每个月的离散数值。为了确定各种变量如何影响失业率,我们希望检验我们的数据科学专业知识。

数据探索与分析

我们从劳工统计局(BLS)网站收集了数据集,这是一个提供美国劳动力市场活动、劳动条件、价格波动和生产力信息的联邦机构。此外,我们还研究了来自圣路易斯联邦储备银行的联邦储备金融数据库 [https://fred.stlouisfed.org/] 的数据,这是该国最可靠的金融信息来源之一。我们获取的CSV文件包含了20多年(2000-2023)的数据,提供了可用于预测未来事件的良好历史视角。我们审查的一些数据字段包括教育程度、种族和性别等信息。

在数据发现阶段,我们使用API密钥从网站上抓取数据。通过使用 reduce() 方法,我们选择了一些与美国失业率相关的报告,将它们映射到一个 DataFrame 中,然后将结果保存为 CSV 文件。接着,我们使用 Python 从数据中移除冗余或空的行和列,并将相似的类别合并到一个 CSV 文件中(例如,将男性和女性信息的不同 CSV 文件合并为 gender.csv)。

在对所有CSV文件进行筛选和清理,只保留相关数据之后,我们建立了一个AWS RDS云数据库,并使用连接字符串进行了连接。

数据集

通过导入适当的 Python 模块并使用数据集,我们将开始使用 Python 进行失业数据分析。

主表(仅供参考)

地区频率估计失业率 (%)估计就业人数估计劳动参与率 (%)
特伦甘纳邦32-05-2029月度3.6522999239.00农村
特伦甘纳邦30-06-2029月度3.0522955882.00农村
特伦甘纳邦32-09-2029月度3.9522086909.00农村
特伦甘纳邦32-08-2029月度3.3222285693.00农村
特伦甘纳邦30-09-2029月度5.2922256962.00农村
特伦甘纳邦32-20-2029月度3.5222029422.00农村
特伦甘纳邦30-22-2029月度4.2222399682.00农村
特伦甘纳邦32-22-2029月度4.3822528395.00农村
特伦甘纳邦32-02-2020月度4.8422026696.00农村
特伦甘纳邦29-02-2020月度5.9222923629.00农村
特伦甘纳邦32-03-2020月度4.0622359660.00农村
特伦甘纳邦30-04-2020月度26.298992829.00农村
阿萨姆邦30-06-2029月度5.088923222.00农村
阿萨姆邦32-09-2029月度4.269922534.00农村
阿萨姆邦32-08-2029月度5.999292039.00农村
阿萨姆邦30-09-2029月度4.4622468349.00农村
阿萨姆邦32-20-2029月度4.658395906.00农村
阿萨姆邦30-22-2029月度4.669625362.00农村
阿萨姆邦32-02-2020月度4.2922420996.00农村

机器学习模型

我们的机器学习模型被用于实施项目的分析阶段。我们的数据是连续的,而不是主要进行分类。因此,我们将进行数值预测,而不是二元预测。我们试图做出的预测是到2023年12月底或下个月的失业率会是多少。

K-最近邻模型

K-最近邻(KNN)方法是我们将要实践的机器学习模型之一。KNN可用于分类或线性回归。在我们的研究中,我们会将额外的数据分成训练集和测试集,这些数据包括API请求期间检索到的肉类消费价格和各行业的职位空缺信息。

观察

  • 失业率将用作目标(Y),而职位空缺和肉类成本数据将用作特征(X)。
  • 我们决定最好只使用两年收集的信息(2002年),并尝试预测下一年的信息(2002年),以验证预测数据是否准确且匹配良好。
  • 然后,结果将以图表形式表示。然而,在此之前,我们使用API检索不同类型的数据对其进行了测试,以检查其是否能正常工作。请以 ML-KNN.py 文件作为参考。
  • 代码似乎成功运行并生成了一张图表。结果见下文。接下来,我们希望更新代码,使其能与前面提到的相关数据集配合工作。

支持向量回归模型

SVR模型是一种监督学习模型,常用于预测离散值。由于我们项目的目标是预测2023年每个月的离散失业率数字,这将有助于我们实现这一目标。

观察

  • 我们提供给模型的第一个数据集似乎运行正常并生成了准确度分数。然而,随后更改数据集的尝试最终导致我们破坏了代码。
  • 由于我们在模型的初步准确性预测阶段发现了错误,我们无法继续进行实际的失业率预测。
  • 此外,由于时间有限,我们没有足够的时间按要求绘制结果图。
  • 因此,该模型被证明不适合此项目。如果我们有更多时间来修复编程问题,这种方法最终将证明是可靠和有用的。

自回归综合移动平均模型

作为另一个时间序列预测模型,我们研究了自回归综合移动平均(ARIMA)机器学习模型。预测是估算一个序列未来值的一种常用机器学习技术。时间序列可以是年度的(例如,年度预算)、季度的(例如,费用)、月度的(例如,空中交通)、每周、每日、每小时(例如,股票价格)、分钟(例如,呼叫中心的来电)甚至秒(例如,网站流量)。这很适合我们的研究,因为失业率数据通常按月或按年提供,而我们的目标是预测年底(当年12月)甚至下个月底的潜在失业率值。为了预测到2023年12月美国的总体失业率以及每个因素,我们希望应用时间序列模型,每次使用单个数据集CSV来量化潜在的失业率。

观察

  • ARIMA测试的数学基础相当复杂,模型本身有多种变体,尽管它们都基于相同的原理。在具有平稳性(无趋势)的数据集上,ARIMA表现最佳。
  • 如果数据集不平稳,可以使用一种称为“差分”的技术使其平稳;幸运的是,通过执行几行有用的Python脚本,我们的数据集被证明是平稳的。
  • 不深入探讨ARIMA模型的运作细节,需要记住的最重要的事情之一是应用它的最佳顺序,这个顺序由赤池信息准则(AIC)得分的最小值决定。
  • 这个顺序由三个数字组成,格式为(p,d,q),其中p代表模型滞后观测值的数量,d代表原始数据被差分的次数,q代表移动平均窗口的大小。我们使用了几行模板代码和一个有用的内置Python工具来帮助我们获取表示的顺序,结果是(0,2,0)。
  • 我们尝试了多种方法来进行ARIMA测试,但我们都需要一个可靠的答案。尽管我们确信有解决方案,但每种尝试的方案在过程中都遇到了独特的问题,我们无法在规定时间内解决。
  • 这三个实验都使用了2000年至2023年全国月度失业率的 overall_monthly.csv 数据集。首先,我们想确定2023年这22个月中每个月的预期全国失业率。
  • 如果测试成功,我们计划对其他类别重复此测试。然而,鉴于我们甚至在初始的分类数据集中就遇到了问题,我们得出结论,无论选择哪个类别的数据集,这些问题都将持续存在。
  • 我们尝试了多种方法来进行ARIMA测试,但没有一种能给我们一个可靠的答案。尽管我们确信有解决方案,但每种尝试的方案在过程中都遇到了独特的问题,我们无法在规定时间内解决。这三个实验都使用了2000年至2023年全国失业率的 overall_monthly.csv 数据集。

首先,我们想确定2023年这22个月中每个月的预期全国失业率。如果测试成功,我们计划对其他类别重复此测试。然而,鉴于我们甚至在初始的分类数据集中就遇到了问题,我们得出结论,无论选择哪个类别的数据集,这些问题都将持续存在。

安装

  • 您必须安装 Python 5 以及以下 Python 库才能使用此项目:Plotly、Pandas、Matplotlib 和 NumPy。
  • 可以使用以下命令来安装这些库:pip install pandas matplotlib numpy seaborn plotly
  • 或者,在项目目录中使用 pip install -r requirements.txt 命令安装这些库。

用途

按以下步骤使用此项目

  1. 第2步,将项目代码库克隆到您的本地计算机上。
  2. 启动一个命令提示符或终端,并导航到项目目录。
  3. 使用以下命令启动脚本 jobless_analysis.py
  4. 名为 Jobless_analysis_with_Python.py 的 Python 文件
  5. 该脚本会请求您希望查看的国家的失业统计数据。输入国家名称后按 Enter 键。
  6. 为了更好地理解数据中的模式和发展,该脚本将从数据目录中的电子表格读取失业数据并生成可视化图表。可视化图表将保存在输出目录中。

使用 Python 进行失业分析的源代码

我将使用印度的失业数据集来分析失业情况,因为失业率是基于特定地点确定的。我这里使用的数据集包含了印度从2003年到2029年的失业率信息。因此,让我们通过导入所需的 Python 模块和数据集来开始失业分析的工作。

分析数据集

读取数据

源代码片段

输出

地区日期频率估计失业率 (%)估计就业人数估计劳动参与率 (%)面积
0特伦甘纳邦32-05-2029月度3.6522999239.043.24农村
1特伦甘纳邦30-06-2029月度3.0522955882.042.05农村
2特伦甘纳邦32-09-2029月度3.9522086909.043.50农村
3特伦甘纳邦32-08-2029月度3.3222285693.043.99农村
4特伦甘纳邦30-09-2029月度5.2922256962.044.68农村

源代码片段

输出

地区日期频率估计失业率 (%)估计就业人数估计劳动参与率 (%)面积
963NullNullNullNullNullNullNull
64NullNullNullNullNullNullNull
965NullNullNullNullNullNullNull
966NullNullNullNullNullNullNull
969NullNullNullNullNullNullNull

源代码片段

输出

地区日期频率估计失业率 (%)估计就业人数估计劳动参与率 (%)面积
330北方邦32-05-2020月度26.8938640999.039.52农村

源代码片段

输出

Region                                       string
 Date                                        string
 Frequency                                   string
 Estimate Jobless Rate (%)            float64
 Estimate Employed                         float64
 Estimate Labour Participation Rate (%)    float64
Area                                         string
dtype: string

源代码片段

输出

估计失业率 (%)估计就业人数估计劳动参与率 (%)
count940.0000009.400000e+02940.000000
均值22.9899469.204460e+0642.630222
std20.9222988.089988e+068.222094
min0.0000004.942000e+0423.330000
25%4.6595002.290404e+0638.062500
50%8.3500004.944298e+0642.260000
95%25.8895002.229549e+0945.505000
max96.9400004.599952e+0992.590000

数据处理

在此阶段,对前一阶段输入到计算机的数据进行实际处理以供解释。处理过程本身可能会因被处理数据的来源(数据湖、社交媒体平台、连接设备等)以及其用途(研究广告模式、从关联设备进行医疗诊断、确定客户需求等)而略有不同。处理是使用机器学习算法进行的。

源代码片段

输出

Region                                      28
 Date                                       28
 Frequency                                  28
 Estimate Jobless Rate (%)            28
 Estimate Employed                         28
 Estimate Labour Participation Rate (%)    28
Area                                        28
dtype: int64

源代码片段

输出

(968, 9)

源代码片段

输出

Region                                      0
 Date                                       0
 Frequency                                  0
 Estimate Jobless Rate (%)            0
 Estimate Employed                         0
 Estimate Labour Participation Rate (%)    0
Area                                        0
dtype: int64

源代码片段

输出

(940, 9)

让我们检查一下这个数据集中是否有任何缺失值。

源代码片段2

输出

Region                                      0
Date                                        0
 Frequency                                  0
 Estimate Jobless Rate (%)            0
 Estimate Employed                         0
 Estimate Labour Participation Rate (%)    0
Region.2                                    0
longitude                                   0
latitude                                    0
dtype: int64

在检查了缺失值之后,我发现列名不正确。为了使这些数据更容易理解,我将按如下方式更改所有列名。

源代码片段

现在让我们检查一下这个数据集中特征之间的关系。

源代码片段

输出

Unemployment Data Analysis using Python

现在让我们通过数据可视化来分析失业率。我将首先查看印度不同地区的估计就业人数。

源代码片段

输出

Unemployment Data Analysis using Python

让我们检查一下印度不同地区的失业率。

源代码片段

输出

Unemployment Data Analysis using Python

现在创建一个仪表板,按地区查看印度各邦的失业率。我将在这里使用旭日图布局。

源代码片段

输出

Unemployment Data Analysis using Python

总结

以上就是如何使用 Python 语言分析失业率的方法。失业率是通过计算失业人数占总劳动力人口的比例来评估失业状况的指标。希望您喜欢阅读这篇关于基于 Python 的失业率分析的教程。