Python: Анализ файлов CSV 100 000 строк x 40 столбцов

У меня есть о 100 файлы CSV каждый столбцы строк 100,000 x 40. Я хотел бы сделать некоторый статистический анализ его, вытащить некоторые демонстрационные данные, вывести общие тенденции на печать, сделать различие и анализ R-квадрата, и вывести некоторые схемы спектров на печать. На данный момент я рассматриваю numpy для анализа.

Я задавался вопросом, какие проблемы я должен ожидать с такими большими файлами? Я уже проверил на ошибочные данные. Каковы Ваши рекомендации на выполнении статистического анализа? было бы лучше, если бы я просто разделил файлы и делаю все это в Excel?

12
задан dassouki 27 January 2010 в 12:45
поделиться

5 ответов

Я обнаружил, что 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 ) )

Мне очень нравится возможность составлять более сложные функции из более простых.

13
ответ дан 2 December 2019 в 19:31
поделиться

У меня был большой успех, используя чтение и поколение файлов Python и CSV. Используя скромный ноутбук Core 2 Duo, я смог сохранить близко к тому же количеству данных, как вы и обрабатываете его в память через несколько минут. Мой главный совет при этом - это разделить вашу работу, чтобы вы могли делать вещи в отдельных шагах, поскольку добыча все ваша задача сразу может быть болью, когда вы хотите выполнить только одну функцию для выполнения. Придумайте хороший битвой ритм, который позволяет вам максимально использовать ваши ресурсы.

Excel приятно для небольших партий данных, но проверьте MATPLOTLIB для выполнения графов и диаграмм, обычно зарезервированных для Excel.

1
ответ дан 2 December 2019 в 19:31
поделиться

В общем, не беспокойтесь о размере. Если ваши файлы вырастут в 2-3 раза, вы можете начать заканчивать память на 32-битной системе. Я подумал, что если каждое поле таблицы составляет 100 байт, т.е. каждая строка - 4000 байт, то для хранения данных в памяти вы будете использовать примерно 400 МБ оперативной памяти, а если вы добавите для обработки примерно столько же, то все равно будете использовать только 800 или около того МБ. Эти вычисления очень обратные и очень щедрые (вы будете использовать столько памяти только в том случае, если у вас много длинных строк или огромных целых чисел в данных, так как максимум, который вы будете использовать для стандартных типов данных, составляет 8 байт для плавающей или длинной строки).

Если вы do начнете исчерпывать память, то 64-битный вариант может оказаться подходящим. Но в остальном Python будет обрабатывать большие объемы данных с апломбом, особенно в сочетании с numpy/scipy. Использование массивов Numpy почти всегда будет быстрее, чем использование нативных списков. Matplotlib позаботится о большинстве графиков и, конечно же, сможет справиться с простыми графиками, которые вы описали.

Наконец, если вы нашли что-то, что Python не может сделать, но уже имеет написанную кодовую базу, посмотрите на RPy.

1
ответ дан 2 December 2019 в 19:31
поделиться

Python очень хорош для такого рода обработки данных, особенно если ваши примеры - "строки", и вы можете обрабатывать каждую такую строку самостоятельно:

 row1
 row2
 row3
 etc.

На самом деле, ваша программа может занимать очень мало места в памяти, благодаря генераторам и выражениям генераторов, о которых вы можете прочитать здесь: http://www.dabeaz.com/generators/ (это не основной материал, а некоторые ментализирующие приложения генераторов).

Что касается ответа С.Лотта, то, вероятно, вы хотите избежать применения функции 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
ответ дан 2 December 2019 в 19:31
поделиться

Для массовых наборов данных вас могут заинтересовать root . Его можно использовать для анализа и очень эффективного хранения петабайт данных. Это также приходит с некоторыми основными и более Advanced статистические инструменты.

Хотя он написан для использования с C ++, также есть довольно полные привязки Python. Они не делают чрезвычайно легко получить прямой доступ к необработанным данным (например, использовать их в R или Numpy) - но это определенно возможно (я делаю это все время).

2
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: