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