【发布时间】:2016-10-18 10:22:44
【问题描述】:
社区,
目标:我正在运行一个 Pi 项目(即 Python),它与 Arduino 通信以每秒一次从称重传感器获取数据。我应该使用什么数据结构在 Python 中记录(并进行实时分析)这些数据?
我希望能够做以下事情:
- 对数据进行切片以获得最后记录的数据点的值。
- 对数据进行切片以获得过去 n 秒内数据点的平均值。
- 对最后 n 个数据点执行回归以获得 g/s。
- 从日志中删除超过 n 秒的数据点。
当前尝试:
字典:我在字典中添加了一个带有舍入时间的新键(见下文),但这使得切片和分析变得困难。
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()-ing),因为我希望我的速率计算(回归)是实时的。
这个问题(ECG Data Analysis on a real-time signal in Python)似乎和我有同样的问题,但没有真正的解决方案。
目标:
那么在 Python 中处理和分析实时时间序列数据的正确方法是什么?这似乎是每个人都需要做的事情,所以我想必须为此预先构建功能?
谢谢,
迈克尔
【问题讨论】:
-
你看过双端队列吗? docs.python.org/2/library/collections.html#deque-objects另外,这篇文章真的很广泛。您应该考虑缩小范围。
-
我认为双端队列会比列表更好,但它们实际上只能解决问题1。在 problem 2 和 4 中,我将在最后 n 秒前删除,而不是 n 项 @Alexander
-
顺便说一句-您提到数据每秒输入一次。因此,在您的应用程序中,您不能忽略时间戳并根据计数进行切片吗?这会让事情变得简单一些。换句话说,如果你想要最后 5 秒,你可以只做
data[-5:]并假设最后 5 项是最后 5 秒吗? -
我想保持灵活性,以防我决定更频繁地采样。
标签: python-2.7 dictionary pandas time-series real-time