使用 Python / Pandas 从大型 csv 文件获取相关矩阵时出现问题
Problem getting correlation matrix from large csv file with Python / Pandas
首先:我是 python 和数据分析方面的初学者,但我相信我已经足够理解这些概念,因此您不必过度简化您的答案。
我的挑战是我必须分析大量机器数据(两年时间序列;24 个结构相同的 csv 文件,每个文件有 170 列,约 250 万行,约 2.6gb 大小)。
必须根据相关性分析此数据。最初需要的输出是一个 170x170 的相关矩阵。进一步分析(滞后,不对称相关矩阵输入 x 输出)应推迟到下一步,而不是您回答的主要考虑因素。
我已经能够将其中一个文件读入数据帧(使用 IPython-Spyder 的控制台;以我 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 方法无法正常工作,returns(如果有效)只有一个 10 x 10 的矩阵,其中有很多 NaN 值(在我的理解中,这只是一个显示不存在的皮尔逊相关系数(接近或等于零))。
我发现了一些关于如何将数据加载到我的数据框中的描述,这超出了我的 RAM。然而,我无法完全理解加载块的概念,尤其是结合我的时间序列。
如果你能给我提供适当的提示或片段,我将不胜感激,以便我解决这个问题。
理想的结果是,我可以 运行 遍历所有 csv 文件并获得所有参数所需的相关矩阵。
注:
我不受 pandas 约束。如果您建议另一个图书馆以更好的方式解决这个问题,我很高兴听到您的解决方案。
但由于我公司的安全政策,我有义务不下载任何额外的软件(或者更准确地说:它很复杂......)
我手头唯一的其他选择是 MATLAB R2018.a
Pandas df.corr 给出一个相关矩阵 NxN,其中 N 是列数。我用 200 列试了一下,效果很好。
最可能的原因是您的数据不干净。如果 pandas 发现相关操作不可接受的数据点,则会排除该列。尝试在其中一个字段中创建一个只有数字和一个字符串的数据框,你就会明白我的意思了。
如果数据状态不佳,就可以解释为什么还有这么多nan。
我认为您必须对数据进行一些清理和预处理。
首先:我是 python 和数据分析方面的初学者,但我相信我已经足够理解这些概念,因此您不必过度简化您的答案。
我的挑战是我必须分析大量机器数据(两年时间序列;24 个结构相同的 csv 文件,每个文件有 170 列,约 250 万行,约 2.6gb 大小)。
必须根据相关性分析此数据。最初需要的输出是一个 170x170 的相关矩阵。进一步分析(滞后,不对称相关矩阵输入 x 输出)应推迟到下一步,而不是您回答的主要考虑因素。
我已经能够将其中一个文件读入数据帧(使用 IPython-Spyder 的控制台;以我 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 方法无法正常工作,returns(如果有效)只有一个 10 x 10 的矩阵,其中有很多 NaN 值(在我的理解中,这只是一个显示不存在的皮尔逊相关系数(接近或等于零))。
我发现了一些关于如何将数据加载到我的数据框中的描述,这超出了我的 RAM。然而,我无法完全理解加载块的概念,尤其是结合我的时间序列。
如果你能给我提供适当的提示或片段,我将不胜感激,以便我解决这个问题。
理想的结果是,我可以 运行 遍历所有 csv 文件并获得所有参数所需的相关矩阵。
注: 我不受 pandas 约束。如果您建议另一个图书馆以更好的方式解决这个问题,我很高兴听到您的解决方案。 但由于我公司的安全政策,我有义务不下载任何额外的软件(或者更准确地说:它很复杂......) 我手头唯一的其他选择是 MATLAB R2018.a
Pandas df.corr 给出一个相关矩阵 NxN,其中 N 是列数。我用 200 列试了一下,效果很好。
最可能的原因是您的数据不干净。如果 pandas 发现相关操作不可接受的数据点,则会排除该列。尝试在其中一个字段中创建一个只有数字和一个字符串的数据框,你就会明白我的意思了。
如果数据状态不佳,就可以解释为什么还有这么多nan。 我认为您必须对数据进行一些清理和预处理。