Я купил данные об акциях Kibot, и они огромны.У меня есть около 125 000 000 строк для загрузки (1000 акций * 125 тыс. Строк / акция [данные бара за 1 минуту с 2010-01-01), каждая акция в CSV-файле, чьи поля: дата, время, открытие, максимум, минимум, закрытие,Объем).Я совершенно новичок в Python (я выбрал его, потому что он бесплатный и хорошо поддерживается сообществом), и я выбрал SQLite для хранения данных, потому что Python имеет встроенную поддержку.(И я очень хорошо знаю язык SQL. SQLiteStudio - жемчужина бесплатной программы.)
Моя программа-загрузчик работает хорошо, но работает медленнее.БД SQLite составляет около 6 ГБ и загружена только наполовину.Я получаю около 500 тыс. Строк в час с использованием операторов INSERT и фиксирую транзакцию после каждой акции (около 125 тыс. Строк).
Итак, вот вопрос: - это PyTables значительно быстрее, чем SQLite ,прилагая усилия, чтобы узнать, как это стоит?(И поскольку я нахожусь в режиме обучения, не стесняйтесь предлагать альтернативы этим двум.) Одна вещь, которая беспокоит меня о PyTables, заключается в том, что это действительно голые кости, почти как сохранение двоичного файла для бесплатной версии.Никаких функций «где предложение» или индексации нет, поэтому вы начинаете сканировать нужные вам строки.
После загрузки данных я собираюсь провести статистический анализ (регрессия, корреляция и т. Д.)используя что-то на основе NumPy: Timeseries, larry, pandas или scikit.Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эту рекомендацию лучше всего использовать либо с PyTables, либо с пандами (или чем-то еще), укажите это в своем ответе.
(Для @Джон) Python 2.6;
32-разрядная версия Windows XP SP3;
Изготовленные строки, используемые в качестве операторов INSERT;
Использование памяти стабильно на 750M физической памяти 2G;
Загрузка ЦП составляет 10% +/ - 5%;
Полная привязка ввода / вывода (диск всегда хрустит).
Схема БД:
create table MinuteBarPrices (
SopDate smalldatetime not null,
Ticker char( 5 ) not null,
Open real,
High real,
Low real,
Close real not null,
Volume int,
primary key ( SopDate, Ticker )
);
create unique index MinuteBarPrices_IE1 on MinuteBarPrices (
Ticker,
SopDate
);