社区,
目标: 我正在运行一个 Pi 项目(即 Python),该项目与 Arduino 通信以每秒一次从称重传感器获取数据。我应该使用什么数据结构在 Python 中记录(并进行实时分析)这些数据?
我希望能够做这样的事情:
当前尝试:
字典:我在字典中附加了一个带有舍入时间的新键(见下文),但这使得切片和分析变得困难。
log = {}
def log_data():
log[round(time.time(), 4)] = read_data()
Pandas DataFrame:这是我想要的,因为它使时间序列切片和分析变得容易,但这( How to handle incoming real time data with python pandas )似乎是个坏主意。我无法遵循他们的解决方案(即存储在字典中,并且每隔几秒钟批量存储
df.append()
),因为我希望我的速率计算(回归)是实时的。这个问题 ( ECG Data Analysis on a real-time signal in Python ) 似乎和我有同样的问题,但没有真正的解决方案。
目标:
那么在 Python 中处理和分析实时时间序列数据的正确方法是什么?这似乎是每个人都需要做的事情,所以我想必须为此预先构建功能?
谢谢,
迈克尔
最佳答案
首先,我会质疑两个假设:
无论如何,这是使用列表的一种非常幼稚的方法。它满足您的需求。性能可能会成为问题,具体取决于您需要存储多少个先前的数据点。
另外,您可能没有想到这一点,但您是否需要过去数据的完整记录?或者你可以直接丢东西吗?
data = []
new_observation = (timestamp, value)
# new data comes in
data.append(new_observation)
# Slice the data to get the value of the last logged datapoint.
data[-1]
# Slice the data to get the mean of the datapoints for the last n seconds.
mean(map(lambda x: x[1], filter(lambda o: current_time - o[0] < n, data)))
# Perform a regression on the last n data points to get g/s.
regression_function(data[-n:])
# Remove from the log data points older than n seconds.
data = filter(lambda o: current_time - o[0] < n, data)
关于python-2.7 - 用于实时分析的正确 Python 数据结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37867011/