尝试使用指数平滑进行预测时出现关键错误

2024-06-06 19:22:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从人口的角度预测我所在城市的一些数据。我有一张表格显示了1950年到2021年我所在城市的人口。利用熊猫和指数平滑法,我试图预测和预测未来10年我的城市将有多少人口。我被困在这里:

train_data = df.iloc[:60]
test_data = df.iloc[59:]

fitted = ExponentialSmoothing(train_data["Population"],
                         trend = "add",
                         seasonal = "add",
                         seasonal_periods=12).fit()

fitted.forecast(10)

然而,我得到了这样的信息:

“无法将start参数与数据索引相关的位置匹配。”

更新:以下是我工作中的一些代码:

Jeddah_tb = pd.read_html("https://www.macrotrends.net/cities/22421/jiddah/population", match ="Jiddah - Historical Population Data", parse_dates=True)

df['Year'] = pd.to_datetime(df['Year'], format="%Y")
df.set_index("Year", inplace=True)

以下是索引:

DatetimeIndex(['2021-01-01', '2020-01-01', '2019-01-01', '2018-01-01',
           '2017-01-01', '2016-01-01', '2015-01-01', '2014-01-01',
           '2013-01-01', '2012-01-01', '2011-01-01', '2010-01-01',
           '2009-01-01', '2008-01-01', '2007-01-01', '2006-01-01',
           '2005-01-01', '2004-01-01', '2003-01-01', '2002-01-01',
           '2001-01-01', '2000-01-01', '1999-01-01', '1998-01-01',
           '1997-01-01', '1996-01-01', '1995-01-01', '1994-01-01',
           '1993-01-01', '1992-01-01', '1991-01-01', '1990-01-01',
           '1989-01-01', '1988-01-01', '1987-01-01', '1986-01-01',
           '1985-01-01', '1984-01-01', '1983-01-01', '1982-01-01',
           '1981-01-01', '1980-01-01', '1979-01-01', '1978-01-01',
           '1977-01-01', '1976-01-01', '1975-01-01', '1974-01-01',
           '1973-01-01', '1972-01-01', '1971-01-01', '1970-01-01',
           '1969-01-01', '1968-01-01', '1967-01-01', '1966-01-01',
           '1965-01-01', '1964-01-01', '1963-01-01', '1962-01-01',
           '1961-01-01', '1960-01-01', '1959-01-01', '1958-01-01',
           '1957-01-01', '1956-01-01', '1955-01-01', '1954-01-01',
           '1953-01-01', '1952-01-01', '1951-01-01', '1950-01-01'],
          dtype='datetime64[ns]', name='Year', freq='-1AS-JAN')

Tags: 数据addtruedfdatatrainyearpd
1条回答
网友
1楼 · 发布于 2024-06-06 19:22:37

我在复制代码时没有遇到任何问题。但是,在进行时间序列预测之前,请确保数据按日期升序排列df = df.sort_values(by='Year',ascending = True)。在您的例子中,train_data来自2021 to 1962test_data来自1962-1950。所以你们们是在最近的数据上训练,但在过去的数据上测试。因此,请按升序对数据帧进行排序。也可以使用test_data = df.iloc[60:],因为1962同时存在于train_datatest_data

相关问题 更多 >