Упростите рабочий процесс обработки данных с помощью этих простых советов для записной книжки.
Будем честны. В основном мы работаем в тетради.
Но иногда, когда кода становится слишком много, у нас кружится голова от того, чтобы расположить или визуализировать его в ячейках блокнота.
Я просто понимаю это. Итак, теперь я даю вам простые советы от себя, чтобы сделать ваш код более читабельным. Советы:
Создавайте классы.
Если вы никогда не занимались созданием классов и пакетов, эта статья подойдет вам, так как это будет очень простой вариант использования.
В противном случае пропустите или прокомментируйте.
Я разделю это на несколько тем.
- Отдельный блокнот для обучения (моделирования) и блокнот для тестирования (прогнозирования)
- Создайте как минимум классы моделирования и прогнозирования
- Создать из него модуль
Отдельный ноутбук для обучения (моделирование) и тестирования (прогнозирование)
Вдохновленные платформой автомоделей, есть раздел моделирования и раздел прогнозирования. В этом случае мы можем использовать раздел моделирования для подготовки данных и самого моделирования. В то время как для раздела прогнозирования мы можем оценить или так же просто, как прогнозировать немаркированный ввод.
Создайте класс моделирования и прогнозирования
Создайте как минимум два класса: класс моделирования и класс прогнозирования. Это связано с аккуратностью кода.
- В этой записной книжке Train (Modelling) мы будем использовать класс Modeling.
- В то время как для ноутбука Test (Predicting) мы будем использовать класс Predicting. Мы унаследуем методы от класса Modeling
Зачем создавать классы?
- Таким образом, вы можете легко создать pickle для производства/развертывания после того, как все методы класса моделирования будут выполнены и выполнены.
- И pickle будет использоваться на стороне производства вместе с классом Predicting.
Короче говоря, вы можете просто передать эти пакеты своему инженеру DevOps вместе с рассолом. Возьмите блокнот в качестве документов для вашего пакета, чтобы ваши коллеги могли получить пример, чтобы понять, как выполнять ваш пакет.
class Modelling: def __init__(self): self.varMode = {} self.uniq = {} self.indexDummy = None self.model = None self.threshold = None def fit_varmode_uniq(self, data): for i in data: if data[i].dtype=='O': self.varMode[i] = data[i].mode()[0] self.uniq[i] = data[i].dropna().unique() elif data[i].dtype.kind in ['i', 'f']: self.varMode[i] = data[i].median() else: print('column', i, data[i].dtype) print('dataype not decided yet!') break return self def transform_null(self, data): for col, val in self.varMode.items(): data[col] = data[col].fillna(val) return data def fit_dummy(self, data): self.indexDummy = pd.get_dummies(data).columns return self def transform_dummy(self, data): data = pd.get_dummies(data) data = data.reindex(columns=self.indexDummy, fill_value=0) return data def fit_model(self, X, y): self.model = LGBMClassifier() self.model.fit(X, y) return self class Predicting(Modelling): def __init__(self): try: with open('credit_score_model_and_assortments.pkl', 'rb') as f: pkl = pickle.load(f) self.varMode = pkl['varMode'] self.uniq = pkl['uniq'] self.indexDummy = pkl['indexDummy'] self.model = pkl['model'] self.threshold = pkl['threshold'] except FileNotFoundError: raise FileNotFoundError('Where is the file?') def transform_not_uniq(self, data): for col, val in self.uniq.items(): data[col] = data[col].map(lambda x: self.varMode[col] if x not in val else x) return data def predict_data(self, X): y_pred = self.model.predict(X) y_proba = self.model.predict_proba(X)[:,1] return y_pred, y_proba
В этом классе вы также можете создать в нем дополнительные функции или методы. Вы можете добавить функцию подсчета очков или функцию разработки функций.
Если вы спрашиваете о методе, который я создал, вот статья, в которой он объясняется. Возможно, вы удивляетесь, почему я подгоняю медиану, моду и уникальные значения категориальных столбцов.
Создать модуль
Просто перенесите классы из блокнота в .py (модуль), если вы создали его в блокноте, скажем, credictscore.py.
Кстати, не забудьте создать файл __init__.py в той же папке.
Хорошо, теперь как выполнить это в блокноте?
Я использую этот кредитный набор данных. Вы можете выполнить этот код в блокноте моделирования. Цель состоит в том, чтобы вывести рассол.
import pandas as pd from creditscore import X_y, Modelling, Predicting import pickle data_train = pd.read_csv('/Users/ALVIN RACHMAT/End To End Credit Scoring/credit_risk_dataset_train.csv') X_train, y_train = X_y(data_train, 'loan_status') # X_train = feat_eng(X_train) a = Modelling() a.fit_varmode_uniq(X_train) X_train = a.transform_null(X_train) a.fit_dummy(X_train) X_train = a.transform_dummy(X_train) a.fit_model(X_train, y_train) with open('credit_score_model_and_assortments.pkl', 'wb') as f: pickle.dump(a.__dict__, f)
И вы можете выполнить этот код в блокноте прогнозирования. Или это также может быть использовано в производстве.
import pandas as pd from creditscore import X_y, Modelling, Predicting data_test = pd.read_csv('/Users/ALVIN RACHMAT/End To End Credit Scoring/credit_risk_dataset_test.csv') X_test, y_test = X_y(data_test, 'loan_status') # X_test = feat_eng(X_test) b = Predicting() X_test = b.transform_null(X_test) X_test = b.transform_not_uniq(X_test) X_test = b.transform_dummy(X_test) y_pred, y_proba = b.predict_data(X_test)
В конце концов, на производственной стороне вы будете генерировать прогноз и вероятность для каждой выборки данных, используя pickle и сам пакет.
Это готово к производству, просто отдайте свой пакет DevOps/Backend Engineer вместе с pickle во время выполнения прогнозирующего кода.
На самом деле я предполагал, что вы знаете, как устанавливать пакеты и настраивать jupyter. Я предоставляю статью о том, как я настроил среду с помощью virtualenv.
Чего мы еще не научились, так это вернуть эту оценку/вероятность в базу данных или создать простой API с помощью FastAPI или даже создать простой интерфейс для вашего пользователя. для ввода параметра и вывода оценки.
Думаете о меньшем объяснении здесь? Вот почему я предоставил вам репозиторий github для самостоятельного выполнения, чтобы вы могли получить опыт и понять. Самостоятельная работа очень важна в наше время.
Кстати, я создал все это всего за 2 часа, может быть, вы захотите использовать бенчмарк. Я хочу, чтобы ты тоже смог.
Подводить итоги
Теперь вы можете меньше беспокоиться о работе в блокноте, а также подготовить производственный код в пакете/модуле :). Кстати, я буду постоянно обновлять эту статью, так что, возможно, некоторые из связанных статей здесь пока нельзя щелкнуть.
Кроме того, в следующей статье будет небольшое введение в докер, где мы попробуем ввести данные в postgres, внесем дополнительные нюансы в реальный вариант использования. Это подготовка перед тем, как мы настроим полную среду postgres в докере, чтобы также сохранять выходные данные от каждого клика, когда пользователь вычисляет оценку.