Я пытался много раз продумать ответ на этот вопрос, изучая pandas. Я использую SAS для повседневной работы, и это отлично подходит для его поддержки из-за ядра. Однако SAS является ужасным как часть программного обеспечения по многим другим причинам.
В один прекрасный день я надеюсь заменить мое использование SAS на python и pandas, но в настоящее время мне не хватает встроенного рабочего процесса для больших наборов данных. Я не говорю о "больших данных", для которых требуется распределенная сеть, а файлы слишком велики, чтобы вписаться в память, но достаточно мала, чтобы поместиться на жесткий диск.
Моя первая мысль - использовать HDFStore
для хранения больших наборов данных на диске и вытащить только те части, которые мне нужны, в dataframes для анализа. Другие упомянули MongoDB как более легкую в использовании альтернативу. Мой вопрос таков:
Каковы наиболее эффективные рабочие процессы для выполнения следующих действий:
- Загрузка плоских файлов в постоянную структуру базы данных на диске
- Запрос этой базы данных для извлечения данных для подачи в структуру данных pandas
- Обновление базы данных после обработки элементов в pandas
Примеры в реальном мире будут высоко оценены, особенно от тех, кто использует pandas для "больших данных".
Изменить - пример того, как я хотел бы, чтобы это работало:
- Итеративно импортируйте большой плоский файл и сохраните его в постоянной структуре базы данных на диске. Эти файлы обычно слишком велики для размещения в памяти.
- Чтобы использовать pandas, я хотел бы прочитать подмножества этих данных (как правило, несколько столбцов за раз), которые могут поместиться в памяти.
- Я бы создал новые столбцы, выполнив различные операции над выбранными столбцами.
- Затем я должен добавить эти новые столбцы в структуру базы данных.
Я пытаюсь найти оптимальный способ выполнения этих действий. Чтение ссылок о pandas и pytables кажется, что добавление нового столбца может быть проблемой.
Изменить - Отвечая на вопросы Джеффа конкретно:
- Я строю модели потребительского кредитного риска. Типы данных включают телефон, SSN и характеристики адреса; значения свойств; уничижительная информация, такая как судимость, банкротства и т.д.... Наборы данных, которые я использую каждый день, имеют от 1000 до 2000 полей в среднем по смешанным типам данных: непрерывные, номинальные и порядковые переменные как числовых, так и символьных данных. Я редко добавляю строки, но я выполняю много операций, которые создают новые столбцы.
- Типичные операции включают объединение нескольких столбцов с использованием условной логики в новый составной столбец. Например,
if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'
. Результатом этих операций является новый столбец для каждой записи в моем наборе данных. - Наконец, я хотел бы добавить эти новые столбцы в структуру данных на диске. Я бы повторил шаг 2, исследуя данные с кросс-таблицами и описательной статистикой, пытаясь найти интересные, интуитивные отношения для моделирования.
- Типичный файл проекта обычно составляет около 1 ГБ. Файлы организованы таким образом, что строка состоит из записи потребительских данных. Каждая строка имеет одинаковое количество столбцов для каждой записи. Это всегда будет иметь место.
- Довольно редко, когда я создавал новый столбец, я бы подмножал строки. Тем не менее, для меня довольно распространено подмножество строк при создании отчетов или генерации описательной статистики. Например, я могу создать простую частоту для определенной линии бизнеса, например, розничные кредитные карты. Для этого я бы выделил только те записи, в которых линия бизнеса = розничная торговля в дополнение к тому, какие столбцы я хочу сообщить. Однако при создании новых столбцов я бы вытащил все строки данных и только те столбцы, которые мне нужны для операций.
- Процесс моделирования требует, чтобы я анализировал каждый столбец, искал интересные отношения с некоторой переменной результата и создавал новые составные столбцы, описывающие эти отношения. Колонки, которые я исследую, обычно выполняются небольшими наборами. Например, я сосредоточусь на наборе из примерно 20 столбцов, посвященных только значениям свойств, и наблюдайте, как они связаны с дефолтом по кредиту. Когда они будут исследованы и будут созданы новые столбцы, я перейду к другой группе столбцов, скажем, об образовании в колледже, и повторю процесс. То, что я делаю, - это создание переменных-кандидатов, которые объясняют взаимосвязь между моими данными и некоторым результатом. В самом конце этого процесса я применяю некоторые методы обучения, которые создают уравнение из этих составных столбцов.
Редко я когда-либо добавлял строки в набор данных. Я почти всегда создаю новые столбцы (переменные или функции в языке статистики/машинного обучения).