Python в Loginom
Loginom имеет широкий функционал для решения многих задач. Однако некоторые алгоритмы пока не реализованы в Loginom в качестве стандартных компонентов. В таких случаях можно встраивать в сценарий расчеты, сделанные при помощи кода на языке программирования.
Один из поддерживаемых языков программирования в Loginom — Python, который часто используется для анализа данных. В данном примере показано, как с помощью Python реализовать алгоритм Дерево решений, предсказывающий риск ишемической болезни сердца в ближайшие 10 лет.
Для работы узла Python может потребоваться предварительная настройка Loginom и установка Python. В демопримере используются библиотеки pandas, numpy и sklearn. Инструкция по установке библиотек.
Примечание: Демопример имеет ограничение демонстрации всех возможностей при запуске на демостенде (Запустить демо). Рекомендуем установить пример локально.
Описание алгоритма
1. Импорт данных
В подмодели Импорт данных импортируется исходный файл.
В наборе данных содержится информация о 4238 пациентах.
Поля, по которым прогнозируется результат:
Имя | Описание |
---|---|
male | Пол мужской или женский (1 — мужчина, 0 — женщина) |
age | Возраст пациента |
education | Образование (0 — 4) |
current_smoker | Является ли пациент курильщиком в данный момент? (1 — да, 0 — нет) |
cigs_per_day | Количество сигарет, выкуриваемых в среднем за один день |
BPMeds | Принимал ли пациент лекарства от кровяного давления (1 — да, 0 — нет) |
prevalent_stroke | Был ли у пациента ранее инсульт (1 — да, 0 — нет) |
diabets | Был ли у пациента диабет (1 — да, 0 — нет) |
tot_chol | Уровень общего холестерина |
sys_bp | Систолическое артериальное давление |
dia_bp | Диастолическое артериальное давление |
BMI | Индекс массы тела |
heart_rate | Частота сердечных сокращений |
glucose | Уровень глюкозы |
Прогнозируемое поле:
- TenYearCHD (10-летний риск ишемической болезни сердца ИБС): 1 — да, 0 — нет.
2. Предобработка данных
В подмодели Предобработка данных выполняется подготовка данных к анализу, в результате которой они приводятся в соответствие с требованиями, определяемыми спецификой решаемой задачи.
В нашем случае данные не требуют значительной обработки. Для корректной работы алгоритма «Дерево решений» необходимо только исключить или заполнить пропуски.
В представленном наборе пропусков немного, поэтому можно просто удалить строки с пустыми значениями полей.
Очистка пустых полей осуществляется с помощью узла Заполнение пропусков. По каждому полю устанавливается метод обработки: Удалять записи.
3. Дерево решений
Деревья решений — один из инструментов интеллектуального анализа данных и предсказательной аналитики, который позволяет решать задачи классификации и регрессии.
Для доступа к данным портов и другим встроенным объектам в контексте выполнения кода предусмотрены:
- Входные наборы данных (InputTables, InputTable)
- Входные переменные (InputVariables)
- Выходной набор данных (OutputTable)
- Необходимые перечисления (DataType, DataKind, UsageType)
Вышеуказанные объекты импортируются из встроенного модуля "builtin_data". По умолчанию в текст исполняемого узлом кода добавляется строка импорта.
Передать подготовленные данные в узел Python. Разрешить формировать выходные столбцы из кода. Код программы:
import builtin_data
from builtin_data import InputTable, InputTables, InputVariables, OutputTable, DataType, DataKind, UsageType
import numpy as np
import pandas as pd
from builtin_pandas_utils import to_data_frame, prepare_compatible_table, fill_table
Входной порт необязательный:
if InputTable:
#Создать pd.DataFrame по входному набору №1
input_frame = to_data_frame(InputTable)
Разделить атрибуты и метки. Здесь X — все столбцы из набора, кроме:
"TenYearCHD". Y - "TenYearCHD"
X = input_frame.drop('TenYearCHD', axis=1)
Y = input_frame['TenYearCHD']
Разделить данные на обучающие и тестовые наборы:
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.20)
Обучить модель на тренировочных данных:
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
classifier.fit(X_train, Y_train)
Прогноз на тестовых данных:
Y_pred = classifier.predict(X_test)
Слияние атрибутов и меток:
X_test = X_test.reset_index()
Y_pred = pd.Series(Y_pred)
df = pd.DataFrame()
df = pd.concat([df, Y_pred], axis=1)
X_test = pd.concat([X_test, df], axis=1)
print(X_test)
Вывод результата в таблицу:
prepare_compatible_table(OutputTable, X_test, with_index=False)
fill_table(OutputTable, X_test, with_index=False)
import builtin_data
from builtin_data import InputTable, InputTables, InputVariables, OutputTable, DataType, DataKind, UsageType
import numpy as np
import pandas as pd
from builtin_pandas_utils import to_data_frame, prepare_compatible_table, fill_table
#Входной порт необязательный
if InputTable:
#Создать pd.DataFrame по входному набору №1
input_frame = to_data_frame(InputTable)
#Разделяем атрибуты и метки. Здесь X — все столбцы из набора, кроме "TenYearCHD". Y - "TenYearCHD"
X = input_frame.drop('TenYearCHD', axis=1)
Y = input_frame['TenYearCHD']
#Разделим данные на обучающие и тестовые наборы
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.20)
#Обучаем модель на тренировочных данных
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
classifier.fit(X_train, Y_train)
#Прогноз на тестовых данных
Y_pred = classifier.predict(X_test)
#Слияние атрибутов и меток
X_test = X_test.reset_index()
Y_pred = pd.Series(Y_pred)
df = pd.DataFrame()
df = pd.concat([df, Y_pred], axis=1)
X_test = pd.concat([X_test, df], axis=1)
print(X_test)
#Вывод результата в таблицу
prepare_compatible_table(OutputTable, X_test, with_index=False)
fill_table(OutputTable, X_test, with_index=False)
Результаты прогнозирования выведены в последний столбец выходного набора данных:
Скачайте и откройте файл в Loginom. При необходимости Loginom CE можно скачать бесплатно
Минимальные требования к системе:
- Операционная система: Windows 8.1 и выше.
- CPU x64: 1 core.
- Оперативная память: 1 GB.
- Жесткий диск: 10 GB.