GPT4做数据分析时间序列预测之七相当棒2023.6.1

2023-08-16 21:23:17 浏览数 (1)

1、给excel,计算每个年月后面6个月的销售额累计值

2、预测

3、多种方法预测

4、对比准确率

-------------------------------------------------------

1、有一个excel如下,写一个python程序,计算每个年月的后面6个月的销售额的累计值,保存在新excel中,包含年月、销售额、后面6个月的销售额的累计值

2、

代码语言:javascript复制
好的,可以使用 Pandas 库来读取和处理 Excel 文件。以下是一个示例代码,可以实现您的需求:

```python
import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('sales.xlsx')

# 将日期列转换为 datetime 类型
df['年月'] = pd.to_datetime(df['年月'])

# 按年月排序
df = df.sort_values('年月')

# 计算每个年月后面6个月的销售额的累计值
df['后6个月销售额累计值'] = df['销售金额'].rolling(7, min_periods=1).sum().shift(-6)

# 保存结果到新的 Excel 文件
df.to_excel('sales_with_cumulative.xlsx', index=False)
```

在这个示例代码中,我们首先使用 Pandas 库的 `read_excel` 函数读取了原始 Excel 文件,并将日期列转换为 datetime 类型。然后,我们按年月排序,以确保计算后6个月销售额累计值时的顺序是正确的。接下来,我们使用 Pandas 库的 `rolling` 函数计算每个年月后面6个月的销售额的累计值,并使用 `shift` 函数将结果向上移动6行,以确保每个年月的累计值对应的是后面6个月的销售额。最后,我们使用 Pandas 库的 `to_excel` 函数将结果保存到新的 Excel 文件中。

3、后面6个月的销售额的累计值,不包括本月销售额,重新修改代码

4、有一个excel,文件名为销售数据.xlsx,A列为年月、B列为销售额,如下,写一个python程序,计算每个年月的后面6个月的销售额的累计值,保存在新excel中,包含年月、销售额、后面6个月的销售额的累计值,后面6个月的销售额的累计值,不包括本月销售额。

代码语言:javascript复制
好的,可以使用 Pandas 库来读取和处理 Excel 文件。以下是代码示例:

```python
import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('销售额.xlsx')

# 将年月列转换为日期格式
df['年月'] = pd.to_datetime(df['年月'], format='%Y年%m月%d日')

# 对数据按照年月进行排序
df = df.sort_values('年月')

# 计算每个年月后面6个月的销售额的累计值
df['后6个月销售额累计值'] = df['销售金额'].rolling(7, min_periods=1).sum().shift(-1) - df['销售金额']

# 保存结果到新的 Excel 文件
df.to_excel('销售额累计值.xlsx', index=False)
```

解释一下代码:

1. 首先,我们使用 Pandas 库的 `read_excel` 函数读取 Excel 文件,并将其存储在一个 DataFrame 对象中。

2. 然后,我们使用 `to_datetime` 函数将年月列转换为日期格式,并使用 `sort_values` 函数按照年月进行排序。

3. 接下来,我们使用 `rolling` 函数计算每个年月后面6个月的销售额的累计值。具体而言,我们使用窗口大小为7(包括当前行和后面6行),并使用 `min_periods=1` 参数确保即使窗口中只有一个值,也会进行计算。最后,我们使用 `shift` 函数将结果向上移动一行,以便将当前行的销售额排除在计算之外。

4. 最后,我们使用 `to_excel` 函数将结果保存到新的 Excel 文件中,并使用 `index=False` 参数确保不将行索引写入文件中。

希望这个代码示例能够帮助你完成任务。

5、有一个excel,文件名为销售数据.xlsx,A列为年月、B列为本月实际销售金额,如下,写一个python程序,计算每个年月的后面6个月的销售额的累计值,保存在新excel中,包含年月、本月实际销售金额、未来6个月、未来6个月实际销售额累计值,未来6个月实际销售额累计值,不包括本月销售额。

希望获得的excel如下格式:

年月

本月实际销售金额

未来6个月

未来6个月实际销售额累计值

2018-01-01 00:00:00

2018-02至2018-07

2018-02-01 00:00:00

2018-03至2018-08

2018-03-01 00:00:00

2018-04至2018-09

2018-04-01 00:00:00

2018-05至2018-10

2018-05-01 00:00:00

2018-06至2018-11

6、完成

代码语言:javascript复制
import pandas as pd

# 读取销售数据
销售数据 = pd.read_excel('销售数据.xlsx')
销售数据['年月'] = pd.to_datetime(销售数据['年月'])

# 初始化结果数据框
结果 = pd.DataFrame(columns=['年月', '本月实际销售金额', '未来6个月', '未来6个月实际销售额累计值'])

# 计算每个年月的后面6个月的销售额累计值
for i in range(len(销售数据) - 6):
    当前年月 = 销售数据.iloc[i]['年月']
    本月实际销售金额 = 销售数据.iloc[i]['本月实际销售金额']
    未来6个月销售额累计值 = 销售数据.iloc[i 1:i 7]['本月实际销售金额'].sum()
    未来6个月 = (当前年月   pd.DateOffset(months=1)).strftime('%Y-%m')   '至'   (当前年月   pd.DateOffset(months=7)).strftime('%Y-%m')
    
    结果 = 结果.append({
        '年月': 当前年月,
        '本月实际销售金额': 本月实际销售金额,
        '未来6个月': 未来6个月,
        '未来6个月实际销售额累计值': 未来6个月销售额累计值
    }, ignore_index=True)

# 保存结果到新的Excel文件
结果.to_excel('未来6个月销售额累计值.xlsx', index=False)

7、有excel如下,A、B、C、D列分别为

年月

本月实际销售金额

未来6个月

未来6个月实际销售额累计值

使用移动平均的方法,预测每个年月的未来6个月的销售额累计值,并保存到excel中。

保存格式为:

年月

本月实际销售金额

未来6个月

未来6个月实际销售额累计值

未来6个月预测销售额累计值方法1

未来6个月预测销售额累计值方法2

未来6个月预测销售额累计值方法3

未来6个月预测销售额累计值方法4

8、

有excel如下,A、B、C、D列分别为

年月 本月实际销售金额 未来6个月 未来6个月实际销售额累计值

使用移动平均的方法,预测每个年月的未来6个月的销售额累计值,并保存到excel中。

保存格式为:

年月 本月实际销售金额 未来6个月 未来6个月实际销售额累计值 未来6个月预测销售额累计值方法1 未来6个月预测销售额累计值方法2 未来6个月预测销售额累计值方法3 未来6个月预测销售额累计值方法4 # 移动平均预测 数据子集['移动平均'] = 数据子集['销售金额'].rolling(window=36).mean() 预测_移动平均 = [数据子集['移动平均'].iloc[-1]] # 使用最后一个移动平均值作为预测值

代码语言:javascript复制
根据您的要求,我编写了一个使用移动平均方法预测每个年月的未来6个月销售额累计值的代码,并将结果保存到Excel中。下面是完整的代码:

```python
import pandas as pd

# 读取Excel文件
数据 = pd.read_excel('销售数据.xlsx')

# 将年月列转换为时间格式
数据['年月'] = pd.to_datetime(数据['年月'])

# 计算后6个月销售额累计值
数据['未来6个月实际销售额累计值'] = 数据['本月实际销售金额'].rolling(window=7).sum().shift(-6)

# 计算移动平均
for i in range(36, len(数据)):
    数据子集 = 数据.iloc[:i 1].copy()
    数据子集['移动平均'] = 数据子集['本月实际销售金额'].rolling(window=36).mean()
    预测_移动平均 = [数据子集['移动平均'].iloc[-1]] * 6  # 使用最后一个移动平均值作为预测值
    数据.loc[i, '未来6个月预测销售额累计值方法1'] = sum(预测_移动平均)

# 其他预测方法(方法2、方法3、方法4)
# 在此添加其他预测方法的代码

# 将预测结果保存到新的Excel文件中
数据.to_excel('预测销售数据.xlsx', index=False)
```

这段代码首先从Excel文件中读取数据,然后计算每个年月的后6个月实际销售额累计值。接下来,使用移动平均方法预测每个年月的未来6个月销售额累计值,并将结果保存到名为"未来6个月预测销售额累计值方法1"的新列中。最后,将结果保存到新的Excel文件中。

请注意,这段代码仅包含使用移动平均方法进行预测的部分。如果您需要添加其他预测方法,请在注释`# 其他预测方法(方法2、方法3、方法4)`下方添加相应的代码。

9、结合下面的代码,用多种方法预测未来6个月预测销售额累计值。

代码语言:javascript复制
import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX
from prophet import Prophet 
from pmdarima import auto_arima
from statsmodels.tsa.holtwinters import ExponentialSmoothing as ES1
from statsmodels.tsa.api import ExponentialSmoothing as ES2
import numpy as np
from sklearn.svm import SVR
# from pydlm import dlm, trend, seasonality

# 读取数据并处理时间
销售数据 = pd.read_excel('销售数据.xlsx')
销售数据['年月'] = pd.to_datetime(销售数据['年月'])
销售数据.set_index('年月', inplace=True)

所有预测 = pd.DataFrame()

for i in range(30, len(销售数据)):
    数据子集 = 销售数据.iloc[:i 1].copy()
    
    # 获取最后一个销售额
    最后销售额 = [数据子集['销售金额'].iloc[-1]]
    
    # 获取最后一个年月
    最后年月 = [数据子集.index[-1]]

    # SARIMA
    SARIMA模型 = SARIMAX(数据子集['销售金额'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
    SARIMA模型拟合 = SARIMA模型.fit(disp=False)
    SARIMA预测 = SARIMA模型拟合.predict(start=len(数据子集), end=len(数据子集))

    # Prophet
    数据_Prophet = 数据子集.reset_index().rename(columns={'年月': 'ds', '销售金额': 'y'})
    Prophet模型 = Prophet()
    Prophet模型.fit(数据_Prophet)
    未来 = Prophet模型.make_future_dataframe(periods=1, freq='MS')
    Prophet预测 = Prophet模型.predict(未来)
    Prophet预测数据 = Prophet预测[['ds', 'yhat']].iloc[-1]

    # ARIMA
    ARIMA模型 = auto_arima(数据子集['销售金额'], seasonal=True, m=12)
    ARIMA预测 = ARIMA模型.predict(n_periods=1)

    # ExponentialSmoothing方法1
    ES1模型 = ES1(数据子集['销售金额'], trend='add', seasonal='add', seasonal_periods=12)
    ES1模型拟合 = ES1模型.fit()
    ES1预测 = ES1模型拟合.predict(start=len(数据子集), end=len(数据子集))

    # ExponentialSmoothing方法2
    ES2模型 = ES2(数据子集['销售金额'], trend='add', seasonal='add', seasonal_periods=12)
    ES2模型拟合 = ES2模型.fit()
    ES2预测 = ES2模型拟合.forecast(steps=1)

    # SVM
    SVM模型 = SVR()
    时间序列 = np.arange(len(数据子集)).reshape(-1, 1)
    SVM模型.fit(时间序列, 数据子集['销售金额'].values)
    SVM预测 = SVM模型.predict(np.array([[len(数据子集)]]))
    
    # 移动平均预测
    数据子集['移动平均'] = 数据子集['销售金额'].rolling(window=36).mean()
    预测_移动平均 = [数据子集['移动平均'].iloc[-1]]  # 使用最后一个移动平均值作为预测值
    
    

    预测数据 = pd.DataFrame({
        '数据子集最后年月': 最后年月,
        '预测的年月': [数据子集.index[-1]   pd.DateOffset(months=1)],
        '销售金额': 最后销售额,
        'SARIMA预测销售金额': SARIMA预测.values,
        'Prophet预测销售金额': [Prophet预测数据['yhat']],
        'ARIMA预测销售金额': ARIMA预测,
        'ExponentialSmoothing方法1预测销售金额': ES1预测.values,
        'ExponentialSmoothing方法2预测销售金额': ES2预测,
        'SVM预测销售金额': SVM预测,
        '移动平均预测销售金额': 预测_移动平均
    })
    
    所有预测 = 所有预测.append(预测数据)

所有预测.to_excel('预测销售数据.xlsx', index=False)

0 人点赞