Я будую робочий процес для створення моделей машинного навчання (в моєму випадку, використовуючи Python pandas
і sklearn
пакунки) з даних, витягнутих з дуже великої бази даних (тут, Vertica за допомогою SQL і pyodbc
), і критичний крок у цьому процесі передбачає введення відсутніх значення предикторів. Це зрозуміло в рамках однієї платформи аналітики чи статистики - будь то Python, R, Stata тощо. - - але мені цікаво, де найкраще знайти цей крок у багатоплатформенному робочому процесі.
Це досить просто зробити в Python, або з sklearn.preprocessing.Imputer
класом, використовуючи pandas.DataFrame.fillna
метод, або вручну (залежно від складності використовуваного методу імпутації). Але оскільки я буду використовувати це для десятків чи сотень стовпців у сотнях мільйонів записів, мені цікаво, чи існує більш ефективний спосіб зробити це безпосередньо через SQL достроково. Окрім потенційної ефективності цього на розподіленій платформі, як Vertica, це матиме додаткову перевагу, що дозволяє нам створити автоматизований конвеєр для побудови "повних" версій таблиць, тому нам не потрібно заповнювати новий набір пропущених значень з нуля кожного разу, коли ми хочемо запустити модель.
Мені не вдалося знайти багато настанов з цього приводу, але я думаю, що ми могли б:
- створити таблицю значень замінника (наприклад, середнє / середнє / режим, загальне чи за групою) для кожного неповного стовпця
- з'єднайте таблицю значень заміщення з початковою таблицею, щоб призначити значення замінника для кожного рядка та неповного стовпця
- використовуйте серію випадок, щоб взяти початкове значення, якщо воно доступне, а значення замінника - інакше
Це розумна справа в Vertica / SQL, чи є вагомий привід не турбуватися і просто обробляти це на Python? І якщо останнє, чи є вагомий випадок робити це в пандах, а не в склеарні чи навпаки? Спасибі!