万普插件库

jQuery插件大全与特效教程

Pandas窗口函数及其在时间序列分析中的应用

窗口函数是数据分析中一种强大的工具,特别是在处理时间序列或分组数据时,能够帮助我们更深入地理解和分析数据。通过窗口函数,我们可以对数据的子集进行计算,而无需逐行或逐列手动操作。在最近的Bamboo Weekly中,我们利用窗口函数分析了北约成员国的国防开支数据。这些数据直接来源于北约官方网站,包含了各国在不同年份的多种开支信息。通过打开下载的Excel表格,可以看到多个数据表,例如表1和表2记录了国防开支,表3记录了占GDP的百分比等。这些数据为我们提供了丰富的分析素材。

数据读取与清洗

为了分析北约成员国的国防开支,我们首先需要将表2的数据读入Pandas数据框架。以下是读取Excel文件的代码:

import pandas as pd
# 读取Excel文件,指定工作表和表头行
df = pd.read_excel('nato_spending.xlsx', sheet_name='Table 2', header=7, nrows=33)

在读取数据时,我们需要明确指定工作表(Table 2)和表头所在的行(第8行,由于Python从0开始计数,设置为header=7)。此外,为了只读取顶部的数据表(当前价格部分),我们限制读取33行(nrows=33)。读取后的数据框架包含年份(2014年至2024年,部分为估算值)作为列名,国家名称作为行索引。

然而,初始数据框架中包含一些无用列(如Unnamed: 0和Unnamed: 1),这些列是Excel文件中空白或无关的单元格。我们可以通过以下代码删除这些列并设置国家名称为索引:

# 删除无用列
df = df.drop(columns=['Unnamed: 0', 'Unnamed: 1'])
# 设置国家名称为索引
df = df.set_index('Unnamed: 2')
# 删除顶部空行
df = df.iloc[2:]

清理后的数据框架以国家名称为索引,年份为列,数据类型为float64,适合后续计算。

使用窗口函数分析年度开支增长

我们的第一个目标是找出在最新预算周期(2023年至2024年)中,哪些五个国家的国防开支增长百分比最高。为此,我们使用Pandas的pct_change窗口函数,计算2023年至2024年的百分比变化:

# 计算每列相对于前一列的百分比变化
pct_change = df.pct_change(axis='columns')
# 提取2024年的百分比变化
pct_2023_2024 = pct_change['2024E']
# 找出增长最多的五个国家
top_5 = pct_2023_2024.nlargest(5)
print(top_5)

pct_change函数通过axis='columns'指定按列进行比较,计算每个国家2024年相对2023年的开支增长百分比。结果显示,例如罗马尼亚和日本的开支增长了约50%,表明部分北约成员国在近年大幅增加了国防预算。

长期开支变化分析

接下来,我们分析2024年相对于2014年的开支变化,以了解哪些国家在过去十年中增幅最大。由于pct_change默认比较相邻列,我们需要指定比较的周期:

# 计算2024年相对于2014年的百分比变化
periods = len(df.columns) - 1
pct_2014_2024 = df.pct_change(periods=periods, axis='columns')['2024E']
# 找出增长最多的五个国家
top_5_long_term = pct_2014_2024.nlargest(5)
print(top_5_long_term)

通过设置periods=len(df.columns)-1,我们计算2024年相对于2014年的变化。结果显示,立陶宛的国防预算增长了四倍,拉脱维亚增长了三倍多,匈牙利和波兰也有显著增长。这些国家大多与乌克兰接壤,可能因地缘政治因素增加了国防投入。

比较美国与其他国家的开支

另一个分析目标是确定美国国防开支相当于北约其他国家总和的前N个国家。我们首先提取2024年的开支数据并按降序排列:

# 提取2024年开支并按降序排列
spending_2024 = df['2024E'].sort_values(ascending=False)
# 获取美国开支
us_spending = spending_2024['United States']
# 移除美国,保留其他国家
other_countries = spending_2024.drop('United States')

接着,我们使用expanding窗口函数计算从最高开支国家开始的累计和,直到总和超过美国的开支:

# 计算累计和
cumulative_sum = other_countries.expanding().sum()
# 找出累计和首次超过美国开支的点
exceeds_us = cumulative_sum[cumulative_sum >= us_spending]
print(exceeds_us)

结果显示,没有任何一个子集的累计和超过美国的开支,表明美国2024年的国防开支超过其他北约国家总和。这一发现得益于expanding窗口函数,它允许我们动态计算从第一个国家到最后一个国家的累计和。

窗口函数的优势

通过上述分析,窗口函数(如pct_change和expanding)显著简化了复杂的数据比较和计算过程。它们使我们能够高效地比较年度变化、长期趋势以及累计数据,而无需编写繁琐的循环代码。这些工具在分析时间序列或分组数据时尤为有用,能够揭示隐藏的模式和趋势。

如果您对窗口函数或其他数据分析技术有疑问,欢迎留言讨论。更多Python和Pandas的实用案例,请访问bambooweekly.com。期待在后续内容中与您继续探索数据分析的奥秘!

<script type="text/javascript" src="//mp.toutiao.com/mp/agw/mass_profit/pc_product_promotions_js?item_id=7521704022076555827"></script>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言