Python: обработка большого набора данных.Scipy или Rpy?И как? - PullRequest
7 голосов
/ 28 июля 2011

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

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

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

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

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

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

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

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

Ответы [ 6 ]

5 голосов
/ 28 июля 2011

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

3 голосов
/ 28 июля 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) в интерактивном интерпретаторе).

2 голосов
/ 26 сентября 2011

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

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

2 голосов
/ 29 июля 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
1 голос
/ 31 июля 2011

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

1 голос
/ 28 июля 2011

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

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

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

...