Подается в Excel для любителей электронных таблиц с PyXLL

Обычным субботним днем ​​я сижу с компаньоном и пью кофе. Темой обсуждения является создание среды для демонстрации модели машинного обучения. Естественно, разговор зашел об HTML с веб-сервером, и я действительно боялся всего этого. Видите ли, я не написал ни строчки кода примерно за 6 месяцев, а настройка веб-сервера, определение вызовов, HTML и все эти атрибуты звучали как случай с большим количеством кофе, пожалуйста!

Пока я стою в очереди за кофе, мой телефон предупреждает меня о нескольких новых электронных письмах, одно из которых привлекает мое внимание. Очередная попытка фишинга, но креативная! Подождите, в представлении было еще одно интересное письмо.

PyXLL 5.3.0 выпущен для Python 3.10. Вау! Я до сих пор помню программирование на Python 2.7, а PyXLL был техникой, которую я использовал раньше. Так родилась идея, которая могла бы понравиться тем любителям электронных таблиц, но продемонстрировать получение прогноза от модели. Поскольку это сработало так хорошо, я решил поделиться им со всеми, чтобы оценить. Наслаждаться!

Надстройка PyXLL для Excel

Использование надстроек Excel широко распространено в корпоративном мире. Такие приложения, как Essbase, IBM Cognos Planning, Longview и многие другие корпоративные приложения предлагают возможность надстройки Excel. Надстройка позволяет пользователям создавать рабочие листы и рабочие документы, которые могут читать и записывать в многомерные кубы в корпоративном стеке. Такие параметры, как текущий год и доход за предыдущий год, легко сравнивать, тогда как записи в системе ERP не сделают такое сравнение естественным.

PyXLL позволяет создавать пользовательские функции (UDF) в Excel, которые выполняются с использованием локальной среды Python. Excel позволяет создавать пользовательские функции с помощью VBA, но у этого подхода есть недостатки. Поэтому, прежде чем слишком волноваться, стоило сделать небольшое доказательство концепции.

Доказательство концепции

Мы остановились на использовании модели машинного обучения набора данных Iris после работы некоторых предыдущих авторов из Towards Data Science. Мы вдохновились Начните изучать машинное обучение с задачей классификации цветков ириса Фелипе Триндади, и, конечно же, PyXLL — это работа Тони Робертса.

Настройка

Использование PyXLL достаточно просто, но вам нужно, чтобы ваша среда работала правильно. Основными компонентами являются: -

  • Вам нужна среда Python, установленная со всеми доступными модулями, такими как sklearn и другие.
  • Вам нужен Excel, и я использую свою среду Windows для таких задач, а не Mac Mini M1, и, конечно же, Ubuntu не поддерживает «Excel».
  • Вам нужен загруженный компонент PyXLL и настроенный.
  • Лицензия на PyXLL относительно недорога по сравнению с созданием веб-серверов и кодированием HTML, но есть также пробный период, который поможет вам оценить концепцию.
  • PyXLL необходимо добавить в Excel, и вам может потребоваться настроить параметры Excel в «Центре управления безопасностью».
  • PyXLL использует файл конфигурации, а некоторые настройки указывают на интерпретатор Python, лицензионный ключ и расположение определяемых вами модулей.

Существует много поддержки в Интернете, и после нескольких проб и ошибок среда будет работать.

Определение модели

Для определения модели я использовал Spyder IDE. Кода очень мало, так как это всего лишь демонстрация концепции использования Excel в качестве пользовательского интерфейса.

from pyxll import xl_func
from datetime import date, timedelta
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
iris_dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)

Изначально мы импортируем xl_func, выбранные элементы из sklearn и numpy для структуры данных. Данные Iris доступны в sklearn, и мы приступаем к созданию набора обучающих данных и обучению модели KNN. В этом упражнении нет необходимости оценивать точность модели. Это уже было сделано много раз. Далее нам нужно создать эту определяемую пользователем функцию (UDF) для Excel. Файл сценария py сохраняется в месте, которое вы указали в файле конфигурации PyXLL.

Определение определяемой пользователем функции (UDF)

@xl_func("float[] array: str")
def iris(array):
    X_new = np.array(array)    
    prediction = knn.predict(X_new.reshape(1,-1))
    label = iris_dataset['target_names'][prediction][0]
    return label

Наша UDF называется iris, и она принимает одномерный массив чисел с плавающей запятой [1.0,2.0,3.3,4.4]. Это быстрая и грязная реализация, поэтому здесь нет встроенных элементов управления и проверок. Однако, как мы знаем, к моделям предъявляются строгие требования, а функции прогнозирования должны точно соответствовать модели.

Поскольку у нас есть обученная модель, нам нужно только сделать прогноз в UDF. Значения, переданные в UDF, формируются, передаются в метод предсказания KNN, и метка возвращается из вызова UDF. Возвращаемая этикетка — это название цветка. Когда среда установлена ​​и пользовательская функция создана, пришло время определить матрицу электронной таблицы.

Матрица электронной таблицы

Определение Матрицы было случайным моделированием наблюдений за цветами в дикой природе. Каждый образец будет иметь дату, кто его наблюдал, где он наблюдался и размеры цветка. Метка представляет собой столбец "идентифицированные виды" и является результатом формулы UDF. Так что просто представьте, что я оставил свою кофейную чашку достаточно долго, чтобы поехать мерить цветы в разных городах. Крайне маловероятно для меня, но обязательно посмотрите ..

Интеграция UDF в Excel проста, если надстройка PyXLL работает правильно.

=iris(E4:H4)

Я думаю, что это довольно круто! Поскольку мы используем формулу Excel, матрица не статична. Если бы я сделал ошибку, что редко бывает! Я могу настроить любое измерение, и метка обновляется автоматически.

Вот оно! Мы создали определяемую пользователем функцию под названием «радужная оболочка». Он принимает диапазон значений ячеек и возвращает прогноз машинного обучения характеристик цветка на основе заданных измерений. Все гибкие возможности Excel для определения рабочего документа с силой экосистемы машинного обучения Python.

Концепция доказана! Теперь определение модели машинного обучения, которая знает все цветы, вероятно, является более сложной задачей.

Дополнительные материалы на plainenglish.io