使用Python分析大型传感器数据集

6

我是一名新手研究员,需要分析一个包含原始传感器数据的大型Excel格式数据集。

每个Excel数据文件对于每个研究参与者都超过100 MB。表格包含5个工作表,用于测量5种不同的生理参数。每个工作表包含超过1百万行和两列(时间、生理参数)。

在1百万行传感器数据后,数据会自动继续在Excel文件的以下列(C和D)中。

每次我尝试在Python中加载数据文件,都需要很长时间。我想知道几件事:

1)如何告诉Python从特定的Excel工作表读取数据?这需要这么长时间吗?

这是我尝试过的:

df = pd.read_excel("filepath", sheet_name="Sheetname")
print (df.head (5)) 

2) 使用Python和Pandas对这个大数据文件进行数据清洗是否可行?我尝试过以下方法来加速处理:

import xlrd
work_book = xlrd.open_workbook('filepath', on_demand=True)
work_book.release_resources()

3)之后:我想比较不同研究参与者的生理参数。由于这是一项时间序列分析,需要针对参与者进行比较,那么我应该如何开始使用Python进行分析呢?

我在几天内学习了Python的基础知识,并且非常喜欢它。我意识到我还有很长的路要走。

更新:我想我刚刚完成了时间序列分析(实际上只是趋势分析,使用Dickey-Fuller测试和滚动平均可视化技术)! :D 非常感谢大家的帮助!!!在pandas中,“datetime”模块对我来说最难处理,我的日期时间列仍然被识别为“对象”。这正常吗?它不应该是datetime64类型吗?


2
为了帮助您加快加载速度,我们需要查看您现在的操作。您能否编辑您的问题并包含代码部分? - Michael
我刚刚添加了那个,谢谢!:) - Sam Floral
2个回答

2

如果我理解正确,你似乎不需要不断读取变化的Excel表格中的数据。我建议按照你已经完成的方式读取Excel表格,并使用to_pickle()将它们存储为序列化的pandas数据框:

import pandas as pd

participants = ['P1','P2','P3']
physios = ['Ph1','Ph2','Ph3','Ph4','Ph5']

for p in participants:
    for ph in physios:
        df = pd.read_excel(p + r'.xlsx', sheet_name=ph)
        df.to_pickle(p + '_' + ph + r'.pkl')

现在,您可以更高效地读取这些腌制的数据帧,因为您不必承担所有Excel开销。 这里提供了一个很好的讨论:https://tech.popdata.org/Fast-Excel-Slurping-With-Pandas-And-Pickle/


啊,太有用了!我也会尝试的,谢谢你! :) - Sam Floral

1
您描述的数据集似乎是项目所针对的问题类型。它允许您在并行、非内存中使用大多数标准的命令。

唯一的问题是,据我所知,dask没有Excel阅读器。由于您的问题暗示数据不适合内存...您可能需要在Excel中手动将数据转换为CSV文件,然后就可以简单地执行以下操作:

# After pip install dask
import dask.dataframe as dd
df = dd.read_csv("./relpath/to/csvs/*.csv")
# Do data munging here
df.compute()

如果这不起作用,也许最好尝试将数据加载到Spark或数据库中并在那里进行转换。
关于时间序列的问题,请先阅读此主题的文档here

谢谢,非常感谢您的回复! :) 我会尝试这个并报告结果。 - Sam Floral
1
该问题描述的数据集只有几百兆,绝对可以放入内存中。 - Michael
每个数据文件包含5个电子表格。每个电子表格包含2列和100万行。使用PyCharm打印第一个电子表格的前5行的加载时间大约为4分钟。我有8GB的RAM内存,Intel Core I5处理器。希望这不是内存问题。。 - Sam Floral
是的,我认为那是正确的!我将文件分成了5个单独的文件,读取时间快了很多。另一个更新:我认为我成功完成了我的时间序列分析。感谢大家!:D - Sam Floral
1
很好,@SamFloral!如果其中一个回答解决了你的问题,请记得将其标记为正确答案! - Charles Landau
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接