使用Statsmodels X-13-ARIMA应选何种季节调整程序?代码报错求助
问题:statsmodels调用X-13季节调整工具触发FileNotFoundError
场景与代码
已下载Win X-13并解压到本地,运行以下代码时出现错误:
import pandas as pd from pandas import Timestamp import os import statsmodels.api as sm s = pd.Series( {Timestamp('2013-03-01 00:00:00'): 838.2, Timestamp('2013-04-01 00:00:00'): 865.17, Timestamp('2013-05-01 00:00:00'): 763.0, Timestamp('2013-06-01 00:00:00'): 802.99, Timestamp('2013-07-01 00:00:00'): 875.56, Timestamp('2013-08-01 00:00:00'): 754.4, Timestamp('2013-09-01 00:00:00'): 617.48, Timestamp('2013-10-01 00:00:00'): 994.75, Timestamp('2013-11-01 00:00:00'): 860.86, Timestamp('2013-12-01 00:00:00'): 786.66}, name='Cost') PATH = os.chdir(r'C:\WinX13\x13as') result = sm.tsa.x13_arima_analysis(s, x12path=PATH)
错误信息
--------------------------------------------------------------------------- FileNotFoundError Traceback (most recent call last) Input In [10], in <cell line: 3>() 1 PATH = os.chdir(r'C:\Users\usr\WinX13\x13as') ----> 3 result = sm.tsa.x13_arima_analysis(s, x12path=PATH) File ~\AppData\Roaming\Python\Python39\site-packages\pandas\util\_decorators.py:207, in deprecate_kwarg.<locals>._deprecate_kwarg.<locals>.wrapper(*args, **kwargs) 205 else: 206 kwargs[new_arg_name] = new_arg_value --> 207 return func(*args, **kwargs) File C:\ProgramData\Anaconda3\lib\site-packages\statsmodels\tsa\x13.py:457, in x13_arima_analysis(endog, maxorder, maxdiff, diff, exog, log, outlier, trading, forecast_periods, retspec, speconly, start, freq, print_stdout, x12path, prefer_x13, tempdir) 455 print(p.stdout.read()) 456 # check for errors --> 457 errors = _open_and_read(ftempout.name + '.err') 458 _check_errors(errors) 460 # read in results File C:\ProgramData\Anaconda3\lib\site-packages\statsmodels\tsa\x13.py:206, in _open_and_read(fname) 204 def _open_and_read(fname): 205 # opens a file, reads it, and make sure it's closed --> 206 with open(fname, 'r', encoding="utf-8") as fin: 207 fout = fin.read() 208 return fout FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\usr\\AppData\\Local\\Temp\\tmp0d23o_q8.err'
问题排查与解决方案
1. 核心错误:os.chdir返回值无效
os.chdir()仅负责切换当前工作目录,执行成功后返回None。你把这个返回值赋值给PATH,导致x12path参数传入无效值,statsmodels找不到X-13的可执行文件。
修正方式:直接指定X-13可执行文件所在的目录路径,不要用os.chdir的返回值。
2. 时间序列频率缺失
你的时间序列没有明确的频率信息,且仅包含10个月度数据点,X-13需要明确的时序频率(如月度)才能正常执行季节调整。
修正后的完整代码
import pandas as pd from pandas import Timestamp import statsmodels.api as sm # 创建带明确月度频率的时间序列 s = pd.Series( {Timestamp('2013-03-01'): 838.2, Timestamp('2013-04-01'): 865.17, Timestamp('2013-05-01'): 763.0, Timestamp('2013-06-01'): 802.99, Timestamp('2013-07-01'): 875.56, Timestamp('2013-08-01'): 754.4, Timestamp('2013-09-01'): 617.48, Timestamp('2013-10-01'): 994.75, Timestamp('2013-11-01'): 860.86, Timestamp('2013-12-01'): 786.66}, name='Cost').asfreq('MS') # MS代表每月第一天的频率 # 直接指定X-13的安装目录(确保该目录下有x13as.exe) X13_PATH = r'C:\Users\usr\WinX13\x13as' # 添加print_stdout=True可查看X-13的详细运行日志,方便排查后续问题 result = sm.tsa.x13_arima_analysis(s, x12path=X13_PATH, print_stdout=True)
额外排查点
- 确认解压后的目录中存在
x13as.exe文件,且路径与代码中指定的X13_PATH完全一致(注意错误信息中路径是C:\Users\usr\WinX13\x13as,和你最初写的C:\WinX13\x13as不一致,要统一) - 如果仍有问题,查看
print_stdout=True输出的日志,X-13会在日志中说明具体失败原因(比如数据量不足、格式错误等)
内容的提问来源于stack exchange,提问作者NRVA
相关产品推荐
相关产品推荐

