Большие данные в Excel — большая головная боль.

Представьте: перед вами тысячи строк в Excel с опечатками и разными форматами. VBA и Python помогают, но... что если есть способ быстрее? Я нашел решение, которое экономит часы ручной работы.

Необходимо проверить соответствие данных справочника номенклатурным позициям. Это может быть: вид номенклатуры, единица измерения, количество штук в упаковке и т.п.

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

При поиске данных я заметил, что Yandex GPT в поисковике очень быстро выдает правильные результаты, если они не требуют глубокого анализа. Прочитав документацию от Yandex, как оказалось можно делать запросы при помощи API в Yandex Cloud – они начали тестировать облачную платформу для бизнеса ещё в июне 2023 года.

В основном сервис используется для:

  • Чат боты и виртуальные ассистенты (поддержка клиентов)

  • Генерация контента (описания товаров, посты)

  • Оптимизация поиска по сайту

Хочу привести пару примеров применения Yandex GPT в анализе данных.

Примерытестирования Yandex GPT Lite на реальных данных

Пример 1: Проверка номенклатуры

Тестирование на «чистых» данных

Для чистоты эксперимента выгрузил заведомо «чистые» группы, где ошибки должны быть редкостью.
Результат: из 4092 позиций Yandex GPT посчитал, что 381 не соответствует действительности. Пробежавшись по ним, только 1 позиция была не в той группе

Результат проверки
Результат проверки
Свод по категориям
Свод по категориям

Тестирование на «грязных» данных

Для сравнения я взял другую выборку 1585 позиций, которые:

  • Уже проходили предварительную нормализацию

  • Заведомо содержали много некорректных данных

Результаты второй выборки: GPT определила 97.3%, как несоответствие, что достаточно хорошо.

В целом, для «грязных» справочников GPT– отличное решение для первичной очистки данных

Результат проверки
Результат проверки
Свод по категориям
Свод по категориям

Пример 2: Проверка количества штук в упаковке

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

На тот момент я ещё не знал, что Yandex GPT использует «пустую» модель, в отличие от поисковой версии, которая уже дообучена.

Вот как это работает на практике:

prompt = (f"Ответь только числом без каких-либо пояснений. "
          f"Сколько штук в упаковке у товара: {item_name}")
  1. Для названия «Батарейка 1.5В Camelion, LR 6 Plus Alkaline, 1652» модель выдала 4 шт. (вероятно, среагировала на цифру 1652)»

  2. Но если в наименование добавить «BL-2» («Батарейка…BL-2, 1652») GPT четко определила 2 шт. в упаковке.

Это значит, что:

  • GPT точно распознаёт явные указатели по типу «BL-2»

  • Без четких маркеров, может давать неточные ответы

  • Отлично подходит для распознавания и извлечения атрибутов из нестандартизированных наименований

  • Требуется ручная проверка

Описание работы Yandex GPT

Тарификация за запросы в Yandex GPT

  • Все запросы платные: 1 запрос = 0,01 руб. (Версия Yandex GPT Lite)

  • Анализ 4 000 позиций обошелся мне в 40 руб., что делает GPT доступным для небольших проектов

  • Стоимость может меняться в зависимости от модели

Бесплатный грант для новых пользователей: Срок действия гранта – 60 дней (хватит на ~ 400 000 запросов).

Описание работы кода на Python:

Для начала необходимо получить folder_id и OAuth-token:

  1. Заходим на страницу Yandex Cloud со своим Яндекс ID https://yandex.cloud/ru. Переходим в раздел «Консоль»

  2. Создаем платежный аккаунт и привязываем карту любого российского банка

  3. Для подключения к Yandex GPT нам необходим идентификатор папки folderID

  4. Также нам необходим OAuth token, его можно получить по ссылке

folder_id
folder_id

Настройка и работа с API Yandex GPT

После получения folder_id и OAuth-token вам потребуется:

  1. Установка сторонней библиотеки yandexgptlite

  2. Настройки, которые влияют на результат: temperature – по стандарту установлен 0.6, но для более точных ответов советую 0.2-0.3 (чем выше значение, тем более непредсказуемым будет результат) и max_tokens – ограничивает длину ответа

import tkinter as tk
from tkinter import filedialog
import pandas as pd
import time
from yandexgptlite import YandexGPTLite

# Конфигурация YandexGPT
FOLDER_ID = "b1************"
TOKEN_ID = "y0__********************************************************"

# Инициализация YandexGPT
gpt = YandexGPTLite(folder=FOLDER_ID, token=TOKEN_ID)

def check_category_match(material, category):
    prompt = f"Соответствует ли наименование модели: {material} к виду номенклатуры: {category}. Ответь только ДА или НЕТ"
    try:
        response = gpt.create_completion(prompt=prompt, temperature=0.2, max_tokens=3)
        return "ДА" if "ДА" in response.upper() else "НЕТ"
    except Exception as e:
        print(f"Ошибка: {e}")
        return "Ошибка проверки"

def process_excel_file():
    root = tk.Tk()
    root.withdraw()
    
    # Выбор файла
    file_path = filedialog.askopenfilename(
        title="Выберите Excel файл",
        filetypes=[("Excel files", "*.xlsx *.xls"), ("All files", "*.*")]
    )
    
    if not file_path:
        print("Файл не выбран.")
        return

    try:
        df = pd.read_excel(file_path)
        
        required_columns = ["Наименование модели", "Наименование категории МП"]
        for col in required_columns:
            if col not in df.columns:
                print(f'Столбец "{col}" не найден')
                return

        # Создание столбцов
        if "Соответствие категории" not in df.columns:
            df["Соответствие категории"] = ""

        # Обработка каждой строчки
        for index, row in df.iterrows():
            material = str(row["Наименование модели"]).strip()
            category = str(row["Наименование категории МП"]).strip()
            
            if not material or material == "nan":
                continue
            
            # Проверяем соответствие категории
            if category and category != "nan":
                match_result = check_category_match(material, category)
                df.at[index, "Соответствие категории"] = match_result
            
            print(f"Материал: {material} | Соответствие: {match_result}")
            
            df.to_excel(file_path, index=False)
            time.sleep(1)

        print("Готово")

    except Exception as e:
        print(f"Ошибка: {e}")

process_excel_file()

Вывод

Плюсы:

  • Довольно быстро (1 сек / 1 запрос)

  • Недорого (от 0.01 руб. / запрос)

  • Простая интеграция через Python

  • Использование Yandex GPT без VPN в отличие от ChatGPT

Минусы:

  • Требуется ручная проверка

  • Платная модель

  • Ограниченное использование

Yandex GPT – это недорогой и достаточно гибкий инструмент, особенно с учетом стартового гранта. Его можно использовать достаточно эффективно для анализа данных, только с ограничениями, которые описал выше.

Комментарии (0)