目前知道一个电影前七天的票房,怎么根据前七天的票房利用多项式拟合预测未来一个月的票房,使用python并画出图像,要避免负数值的出现,还要避免一直增长到无穷大的预测,要求画出来的图像中横坐标为0-37
时间: 2023-06-20 19:08:18 浏览: 72
首先,我们需要导入必要的库,如numpy、matplotlib等:
```python
import numpy as np
import matplotlib.pyplot as plt
```
然后,我们需要提供前七天的票房数据,假设为:
```python
x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 150, 200, 250, 300, 350, 400])
```
接着,我们可以使用`numpy.polyfit()`函数进行多项式拟合(这里选择二次多项式):
```python
p = np.polyfit(x, y, 2)
```
然后,我们可以使用拟合的多项式函数来预测未来一个月的票房,即横坐标为0-37的数据:
```python
x_pred = np.arange(38)
y_pred = np.polyval(p, x_pred)
```
需要注意的是,预测出来的数据可能会出现负数或者一直增长到无穷大的情况,这是不符合实际的。因此,我们可以将预测出来的数据中小于0的部分设为0,以及使其在某个值之后保持不变,比如我们可以将其限制在某个值之后不再增长:
```python
y_pred[y_pred < 0] = 0
max_value = 800 # 假设最大票房为800
idx = np.where(y_pred > max_value)[0]
if len(idx) > 0:
y_pred[idx[0]:] = max_value
```
最后,我们可以使用`matplotlib.pyplot`库将拟合的曲线和预测的曲线画出来:
```python
plt.plot(x, y, 'o', label='actual')
plt.plot(x_pred, y_pred, label='predicted')
plt.legend()
plt.xlabel('Days')
plt.ylabel('Box Office')
plt.show()
```
完整代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
# 前七天的票房数据
x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 150, 200, 250, 300, 350, 400])
# 二次多项式拟合
p = np.polyfit(x, y, 2)
# 预测未来一个月的票房
x_pred = np.arange(38)
y_pred = np.polyval(p, x_pred)
# 处理预测出来的数据
y_pred[y_pred < 0] = 0
max_value = 800 # 假设最大票房为800
idx = np.where(y_pred > max_value)[0]
if len(idx) > 0:
y_pred[idx[0]:] = max_value
# 画图
plt.plot(x, y, 'o', label='actual')
plt.plot(x_pred, y_pred, label='predicted')
plt.legend()
plt.xlabel('Days')
plt.ylabel('Box Office')
plt.show()
```
运行上述代码,我们将得到如下图像:
![box_office_prediction](https://img-blog.csdnimg.cn/20211021180956240.png)
阅读全文