我有两个 NumPy 数组时间并且没有获取请求。我需要使用一个函数来拟合这些数据,以便我可以做出未来的预测。这些数据是从存储日志文件详细信息的 cassandra 表中提取的。所以基本上时间格式是纪元时间,这里的训练变量是get_counts。
from cassandra.cluster import Cluster
import numpy as np
import matplotlib.pyplot as plt
from cassandra.query import panda_factory
session = Cluster(contact_points=['127.0.0.1'], port=9042).connect(keyspace='ASIA_KS')
session.row_factory = panda_factory
df = session.execute("SELECT epoch_time, get_counts FROM ASIA_TRAFFIC")
.sort(columns=['epoch_time','get_counts'], ascending=[1,0])
time = np.array([x[1] for x in enumerate(df['epoch_time'])])
get = np.array([x[1] for x in enumerate(df['get_counts'])])
plt.title('Trend')
plt.plot(time, byte,'o')
plt.show()
数据如下:大约有1000对数据
time -> [1391193000 1391193060 1391193120 ..., 1391279280 1391279340 1391279400 1391279460]
get -> [577 380 430 ...,250 275 365 15]
绘制图像(此处为全尺寸):
有人可以帮我提供一个功能,以便我可以正确地适应数据吗?我是 python 新手。
编辑 *
fit = np.polyfit(time, get, 3)
yp = np.poly1d(fit)
plt.plot(time, yp(time), 'r--', time, get, 'b.')
plt.xlabel('Time')
plt.ylabel('Number of Get requests')
plt.title('Trend')
plt.xlim([time[0]-10000, time[-1]+10000])
plt.ylim(0, 2000)
plt.show()
print yp(time[1400])
拟合曲线如下所示:
https ://drive.google.com/file/d/0B-r3Ym7u_hsKUTF1OFVqRWpEN2M/view?usp=sharing
然而,在曲线的后半部分,y 的值变为 (-ve),这是错误的。曲线必须将其斜率更改回介于两者之间的 (+ve)。谁能建议我如何去做。帮助将不胜感激。