帮我写一段利用时间序列和机器学习,通过导入历史销售数据来预测未来3个月销售数据的python代码
时间: 2024-06-10 21:10:23 浏览: 11
以下是利用时间序列和机器学习,通过导入历史销售数据来预测未来3个月销售数据的Python代码:
首先,导入需要用到的库,包括pandas、numpy、matplotlib和scikit-learn:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
```
接下来,读取历史销售数据的CSV文件,创建一个Pandas数据框:
```python
df = pd.read_csv('sales_data.csv', parse_dates=['date'])
df.set_index('date', inplace=True)
```
然后,使用Pandas的resample函数将数据聚合为每月销售总额:
```python
monthly_sales = df['sales'].resample('MS').sum()
```
接下来,使用matplotlib库绘制历史销售总额的趋势图:
```python
plt.plot(monthly_sales)
plt.title('Historical Monthly Sales')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.show()
```
接下来,将时间序列数据转换为监督学习问题。首先,我们需要定义一个函数来创建时间序列数据集:
```python
def create_dataset(dataset, look_back=1):
X, y = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back)]
X.append(a)
y.append(dataset[i + look_back])
return np.array(X), np.array(y)
```
然后,我们将使用前9个月的销售数据作为训练数据集,最后一个月的销售数据作为测试数据集:
```python
train_size = int(len(monthly_sales) * 0.9)
train_data = monthly_sales[:train_size]
test_data = monthly_sales[train_size:]
```
接下来,我们将使用create_dataset函数将时间序列数据转换为监督学习问题:
```python
look_back = 3
X_train, y_train = create_dataset(train_data, look_back)
X_test, y_test = create_dataset(test_data, look_back)
```
接下来,我们将使用线性回归模型拟合数据,并预测未来3个月的销售数据:
```python
model = LinearRegression()
model.fit(X_train, y_train)
test_predict = model.predict(X_test)
future_predict = model.predict(np.array(monthly_sales[-look_back:]).reshape(1,-1))
```
最后,我们将使用均方根误差(RMSE)来评估模型的性能:
```python
rmse = np.sqrt(mean_squared_error(y_test, test_predict))
print('Test RMSE: %.3f' % rmse)
```
完整的Python代码如下所示:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
def create_dataset(dataset, look_back=1):
X, y = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back)]
X.append(a)
y.append(dataset[i + look_back])
return np.array(X), np.array(y)
df = pd.read_csv('sales_data.csv', parse_dates=['date'])
df.set_index('date', inplace=True)
monthly_sales = df['sales'].resample('MS').sum()
plt.plot(monthly_sales)
plt.title('Historical Monthly Sales')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.show()
train_size = int(len(monthly_sales) * 0.9)
train_data = monthly_sales[:train_size]
test_data = monthly_sales[train_size:]
look_back = 3
X_train, y_train = create_dataset(train_data, look_back)
X_test, y_test = create_dataset(test_data, look_back)
model = LinearRegression()
model.fit(X_train, y_train)
test_predict = model.predict(X_test)
future_predict = model.predict(np.array(monthly_sales[-look_back:]).reshape(1,-1))
rmse = np.sqrt(mean_squared_error(y_test, test_predict))
print('Test RMSE: %.3f' % rmse)
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)