使用 Python/Pandas 从大型 csv 文件获取相关矩阵的问题

首先:我是 Python 和数据分析的初学者,但我相信我对这些概念有足够的了解,因此您不必过度简化您的答案。


我的挑战是我必须分析大量的机器数据(超过两年的时间序列;24 个结构相同的 csv 文件,每个文件有 170 列,~250 万行,~2.6gb 大小)。


必须对这些数据进行相关性分析。最初需要的输出是一个 170x170 的相关矩阵。进一步的分析(滞后,不对称相关矩阵输入 x 输出)应推迟到下一步,而不是主要考虑您的答案。


我已经能够将其中一个文件读入数据帧(使用 Spyder 的 IPython 控制台;以我的 16GB 内存为代价)。


import pandas as pd


df = pd.read_csv(r"C:\MyFilePath\...\TestData.csv", sep=';', encoding='iso-8859-1')


In[]: len(df.columns)

Out[]: 170


In[]: len(df)

Out[]: 2678401

但从那以后我被卡住了......


pandas.DataFrame.corr 方法不能正常工作并且只返回(如果它有效)一个 10 x 10 矩阵有很多 NaN 值(在我看来,这只是一个不存在的皮尔逊相关性的显示(接近或等于)到零))。


我找到了几个关于如何将数据加载到我的数据帧中的描述,这超出了我的 RAM。然而,我无法完全理解加载块的概念,尤其是结合我的时间序列。


如果您能为我提供适当的提示或片段,我将不胜感激,以便我可以解决此问题。


理想情况下,结果是,我可以运行所有 csv 文件并获得所有参数所需的相关矩阵。


注意: 我不受熊猫的约束。如果您建议另一个以更好方式解决此问题的库,我很高兴听到您的解决方案。但是由于我公司的安全政策,我有义务不下载任何其他软件(或者更准确地说:它很复杂......)我手头唯一的其他选择是 MATLAB R2018.a


小唯快跑啊
浏览 166回答 1
1回答

子衿沉夜

Pandas df.corr 给出了一个相关矩阵 NxN,其中 N 是列数。我用 200 列尝试了它并且它有效。最可能的原因是您的数据不干净。如果 pandas 发现相关操作不可接受的数据点,它会排除该列。尝试创建一个只有数字和一个字段中只有一个字符串的数据框,你就会明白我的意思。如果数据状态不好,那也可以解释为什么有这么多nan。我认为您必须对数据进行一些清理和预处理。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python