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)
Вывод результатов

Результаты прогнозирования выведены в последний столбец выходного набора данных:

Результирующий набор
Рисунок 1. Результирующий набор

Алгоритм дерево решений

Скачайте и откройте файл в Loginom. При необходимости Loginom CE можно скачать бесплатно

Скачать демопример

Минимальные требования к системе:

  • Операционная система: Windows 8.1 и выше.
  • CPU x64: 1 core.
  • Оперативная память: 1 GB.
  • Жесткий диск: 10 GB.