我有大约100个csv文件,每个100,000 x 40 行 列。我想对它做一些统计分析,提取一些样本数据,绘制一般趋势,做方差和R平方分析,并绘制一些光谱图。就目前而言,我正在考虑为分析而努力。
我想知道这些大文件我应该期待什么问题?我已经检查过错误的数据了。您对统计分析的建议是什么?如果我只拆分文件并在Excel中执行整个操作会更好吗?
我有大约100个csv文件,每个100,000 x 40 行 列。我想对它做一些统计分析,提取一些样本数据,绘制一般趋势,做方差和R平方分析,并绘制一些光谱图。就目前而言,我正在考虑为分析而努力。
我想知道这些大文件我应该期待什么问题?我已经检查过错误的数据了。您对统计分析的建议是什么?如果我只拆分文件并在Excel中执行整个操作会更好吗?
我发现Python + CSV可能是进行某种统计处理的最快,最简单的方法。
我们进行了大量的重新格式化和纠正奇怪的数据错误,因此Python帮助了我们。
Python功能编程功能的可用性使得这一点变得特别简单。您可以使用这样的工具进行采样。
def someStatFunction( source ):
for row in source:
...some processing...
def someFilterFunction( source ):
for row in source:
if someFunction( row ):
yield row
# All rows
with open( "someFile", "rb" ) as source:
rdr = csv.reader( source )
someStatFunction( rdr )
# Filtered by someFilterFunction applied to each row
with open( "someFile", "rb" ) as source:
rdr = csv.reader( source )
someStatFunction( someFilterFunction( rdr ) )
我真的希望能够从更简单的函数中编写更复杂的函数。
Python对于这种类型的数据处理非常好,特别是如果您的样本是“行”并且您可以独立处理每个这样的行:
row1
row2
row3
etc.
实际上,由于生成器和生成器表达式,您的程序可以拥有非常小的内存占用,您可以在此处阅读: http://www.dabeaz.com/generators/ (这不是基本的东西,而是发电机的一些令人费解的应用)。
关于S.Lott的答案,您可能希望避免将filter()应用于行序列 - 如果您传递给它的序列足够长,它可能会爆炸您的计算机(尝试: filter(None, itertools.count())
- 保存所有数据后:-))。更换要好得多 filter
用这样的东西:
def filter_generator(func, sequence):
for item in sequence:
if (func is None and item) or func(item):
yield item
或更短:
filtered_sequence = (item for item in sequence if (func is None and item) or func(item))
这可以通过在循环之前提取条件来进一步优化,但这对读者来说是一个例外:-)
我使用Python和CSV文件读取和生成取得了巨大成功。使用适度的Core 2 Duo笔记本电脑,我能够存储与您相同数量的数据,并在几分钟内将其处理到内存中。我这样做的主要建议是分割你的工作,以便你可以分开执行任务,因为当你只需要执行一个功能时,立即批量处理所有工作可能会非常痛苦。想出一个良好的战斗节奏,让您尽可能地利用您的资源。
Excel适用于较小批量的数据,但请查看 matplotlib 用于执行通常为Excel保留的图形和图表。
对于您可能感兴趣的海量数据集 根。它可用于分析和非常有效地存储数PB的数据。它还带有一些基本的和 更多 高级 统计工具。
虽然它被编写为与C ++一起使用,但也有相当完整的python绑定。它们不容易直接访问原始数据(例如在R或numpy中使用它们) - 但它绝对可能(我一直这样做)。
一般来说,不要过分担心尺寸。如果你的文件变大了2-3倍,那么你 威力 在32位系统上开始耗尽内存。我认为如果每个 领域 该表是100字节,即每行是4000字节,你将使用大约400 MB的RAM将数据存储在内存中,如果你加入大约相同的处理,你仍然只使用800或所以MB。这些计算非常重要而且非常慷慨(如果数据中有很多长字符串或大量整数,那么你只会使用这么多内存,因为标准数据类型的最大值是8字节漂浮或长)。
如果你 做 开始耗尽内存,64位可能是要走的路。但除此之外,Python将使用aplomb处理大量数据,尤其是当与numpy / scipy结合使用时。使用Numpy数组几乎总是比使用本机列表更快。 Matplotlib将处理大多数绘图需求,并且当然可以处理您描述的简单绘图。
最后,如果您发现Python无法做到的事情,但已经编写了代码库,请查看 RPY。