Python: обработка большого набора данных. Scipy или Rpy? И как?

В моей среде Python пакеты Rpy и Scipy уже установлены.

Проблема, которую я хочу решить, такова:

1) Огромный набор финансовых данных хранится в текстовом файле. Загрузка в Excel невозможна

2) Мне нужно суммировать определенные поля и получить итоги.

3) Мне нужно показать первые 10 строк на основе итогов.

Какой пакет (Scipy или Rpy) лучше всего подходит для этой задачи?

Если да, не могли бы вы дать мне несколько советов (например, документацию или онлайн-пример), которые могут помочь мне реализовать решение?

Скорость беспокоит. В идеале scipy и Rpy могут обрабатывать большие файлы, даже если файлы настолько велики, что не могут быть помещены в память.


person Anthony Kong    schedule 28.07.2011    source источник
comment
Полезную информацию можно найти на странице dabeaz.com/generators-uk.   -  person lazy1    schedule 28.07.2011
comment
Что означает «огромный набор» именно в вашем случае?   -  person radek    schedule 28.07.2011


Ответы (6)


Как заметил @gsk3, для этого отлично подходит пакет bigmemory, а также пакеты biganalytics и bigtabulate (есть и другие, но их стоит проверить). Есть также ff, хотя им не так легко пользоваться.

Общим для R и Python является поддержка HDF5 (см. пакеты ncdf4 или NetCDF4 в R), что делает очень быстрым и простым доступ к массивным наборам данных на диске. Лично я в основном использую bigmemory, хотя это специфично для R. Поскольку HDF5 доступен в Python и работает очень, очень быстро, вероятно, это будет ваш лучший выбор для Python.

person Iterator    schedule 26.09.2011

Ни Rpy, ни Scipy не нужны, хотя numpy может сделать это немного проще. Эта проблема кажется идеально подходящей для построчного синтаксического анализатора. Просто откройте файл, прочитайте строку в строку, отсканируйте строку в массив (см. numpy.fromstring), обновите свои текущие суммы и перейдите к следующей строке.

person so12311    schedule 28.07.2011

Файловый ввод-вывод Python не имеет плохой производительности, поэтому вы можете просто использовать модуль file напрямую. Посмотреть, какие функции в нем доступны, можно, набрав help (file) в интерактивном интерпретаторе. Создание файла является частью основных функций языка и не требует от вас import file.

Что-то типа:

f = open ("C:\BigScaryFinancialData.txt", "r");
for line in f.readlines():
    #line is a string type
    #do whatever you want to do on a per-line basis here, for example:
    print len(line)

Отказ от ответственности: это ответ Python 2. Я не уверен на 100%, что это работает в Python 3.

Я оставлю это вам, чтобы выяснить, как показать первые 10 строк и найти суммы строк. Это можно сделать с помощью простой программной логики, что не должно быть проблемой без каких-либо специальных библиотек. Конечно, если строки имеют какое-то сложное форматирование, затрудняющее анализ значений, вы можете использовать какой-то модуль для анализа, например re (введите help(re) в интерактивном интерпретаторе).

person Gravity    schedule 28.07.2011

Насколько велики ваши данные, они больше, чем память вашего ПК? Если его можно загрузить в память, вы можете использовать numpy.loadtxt() для загрузки текстовых данных в массив numpy. Например:

import numpy as np
with file("data.csv", "rb") as f:
   title = f.readline()  # if your data have a title line.
   data = np.loadtxt(f, delimiter=",") # if your data splitted by ","
   print np.sum(data, axis=0)  # sum along 0 axis to get the sum of every column
person HYRY    schedule 29.07.2011

Я ничего не знаю о Rpy. Я знаю, что SciPy используется для серьезной обработки чисел с действительно большими наборами данных, поэтому он должен работать для вашей проблемы.

Как заметил зефир, вам может не понадобиться ни один из них; если вам просто нужно сохранить некоторые текущие суммы, вы, вероятно, можете сделать это в Python. Если это файл CSV или другой распространенный формат файла, проверьте и посмотрите, есть ли модуль Python, который проанализирует его для вас, а затем напишите цикл, который суммирует соответствующие значения.

Я не уверен, как получить первые десять строк. Можете ли вы собирать их на лету или вам нужно вычислить суммы, а затем выбрать строки? Чтобы собрать их, вы можете использовать словарь для отслеживания текущих 10 лучших строк и использовать ключи для хранения метрики, которую вы использовали для их ранжирования (чтобы было легко найти и выбросить строку, если другая строка заменяет ее). ). Если вам нужно найти строки после завершения вычислений, поместите все данные в массив numpy.array или просто выполните второй проход по файлу, чтобы извлечь десять строк.

person steveha    schedule 28.07.2011

Поскольку у этого есть тег R, я дам несколько решений R:

person Ari B. Friedman    schedule 31.07.2011