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

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

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

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

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

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

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

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

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

  • Python: вычисление параллельных расстояний вызывает ошибку памяти
  • обобщенные кумулятивные функции в NumPy / SciPy?
  • Прямоугольная ограничивающая рамка вокруг блобов в монохромном изображении с использованием python
  • Scary's sparse eigsh () для небольших собственных значений
  • Среднее скользящее среднее
  • Различные результаты интеграции с использованием метода Монте-Карло против scipy.integrate.nquad
  • Хранение малоразмерной матрицы в HDF5 (PyTables)
  • Объем выпуклого корпуса с QHull от SciPy
  • 6 Solutions collect form web for “Python: обработка большого набора данных. Scipy или Rpy? И как?”

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

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

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

    Файловый ввод-вывод 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) в интерактивный интерпретатор).

    Насколько огромны ваши данные, это больше, чем память вашего ПК? Если он может быть загружен в память, вы можете использовать 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 

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

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

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

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

    Python - лучший язык программирования в мире.