问题 Python:分析CSV文件100,000行x 40列


我有大约100个csv文件,每个100,000 x 40  列。我想对它做一些统计分析,提取一些样本数据,绘制一般趋势,做方差和R平方分析,并绘制一些光谱图。就目前而言,我正在考虑为分析而努力。

我想知道这些大文件我应该期待什么问题?我已经检查过错误的数据了。您对统计分析的建议是什么?如果我只拆分文件并在Excel中执行整个操作会更好吗?


7439
2018-01-26 20:30


起源

那些不是非常大的文件。你问来干什么?您是否真的尝试过简单的读取来查看Python的速度有多快? - S.Lott
除非你坚持使用python,否则你最好使用像R这样的专用统计语言 r-project.org。
在谈论表时,通常行和行是同义词。我猜你的意思是40列? - John La Rooy
只是不要一次将整个文件读入字符串或其他数据类型,你应该没问题。在上面应用过滤器和阅读器。 S.Lott和Tomasz似乎都在正确地做这件事。 - Brian


答案:


我发现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 ) )

我真的希望能够从更简单的函数中编写更复杂的函数。


12
2018-01-26 20:40



当需要对数据进行按摩和过滤时,正如@ S.Lott所说,能够在Python中实现这一点非常棒。如果您可以将数据直接提供给R函数,那么令人难以置信的软件包将会有所帮助。但是如果你必须首先摆弄它,Python就是炸弹。 - telliott99
您还可以使用loadtxt并自动转换为numpy浮点数组。 - Navi


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))

这可以通过在循环之前提取条件来进一步优化,但这对读者来说是一个例外:-)


1
2018-01-26 21:09



...或者只使用itertools.ifilter :) - John La Rooy
砰的一声,我正在下沉!让我们假装我已经解释了ifilter是如何工作的;-) - Tomasz Zielinski
谢谢。修正了我的回答。 - S.Lott


我使用Python和CSV文件读取和生成取得了巨大成功。使用适度的Core 2 Duo笔记本电脑,我能够存储与您相同数量的数据,并在几分钟内将其处理到内存中。我这样做的主要建议是分割你的工作,以便你可以分开执行任务,因为当你只需要执行一个功能时,立即批量处理所有工作可能会非常痛苦。想出一个良好的战斗节奏,让您尽可能地利用您的资源。

Excel适用于较小批量的数据,但请查看 matplotlib 用于执行通常为Excel保留的图形和图表。


1
2018-01-26 21:31





对于您可能感兴趣的海量数据集 。它可用于分析和非常有效地存储数PB的数据。它还带有一些基本的和 更多  高级 统计工具。

虽然它被编写为与C ++一起使用,但也有相当完整的python绑定。它们不容易直接访问原始数据(例如在R或numpy中使用它们) - 但它绝对可能(我一直这样做)。


1
2018-01-31 00:14





一般来说,不要过分担心尺寸。如果你的文件变大了2-3倍,那么你 威力 在32位系统上开始耗尽内存。我认为如果每个 领域 该表是100字节,即每行是4000字节,你将使用大约400 MB的RAM将数据存储在内存中,如果你加入大约相同的处理,你仍然只使用800或所以MB。这些计算非常重要而且非常慷慨(如果数据中有很多长字符串或大量整数,那么你只会使用这么多内存,因为标准数据类型的最大值是8字节漂浮或长)。

如果你  开始耗尽内存,64位可能是要走的路。但除此之外,Python将使用aplomb处理大量数据,尤其是当与numpy / scipy结合使用时。使用Numpy数组几乎总是比使用本机列表更快。 Matplotlib将处理大多数绘图需求,并且当然可以处理您描述的简单绘图。

最后,如果您发现Python无法做到的事情,但已经编写了代码库,请查看 RPY


1
2018-01-26 21:53