Разработка интеллектуальной системы подбора товара

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    814,94 Кб
  • Опубликовано:
    2012-04-16
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка интеллектуальной системы подбора товара











Разработка интеллектуальной системы подбора товара

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ И ПОСТАНОВКА ЗАДАЧИ

.1 Задача разработки интеллектуальных систем подбора товаров

.2 Анализ ассортимента компании

.3 Постановка задачи

. ИНТЕЛЛЕКТУАЛЬНЫЙ АНАЛИЗ ДАННЫХ

.1 Задача поиска ассоциативных правил

.2 Характеристики ассоциативных правил

.3 Методы поиска ассоциативных правил

.3.1 Алгоритм AIS

.3.2 Алгоритм SETM

.4 Применение ассоциативных правил

. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ

.1 Требования к программному обеспечению

.2 Тестирование программного обеспечения и полученные результаты

.3 Пример оформления заказа

ВЫВОДЫ

ПЕРЕЧЕНЬ ССЫЛОК

ПРИЛОЖЕНИЕ

ВВЕДЕНИЕ

В любом бизнесе имеются данные, что в свою очередь требует создания некоторого организованного метода или механизма управления этими данными. Такой механизм принято называть системой управления базами данных (СУБД). Системы управления базами данных используются уже много лет. Основываясь на современных технологиях, доказавшие свою пользу системы управления базами данных начали развиваться в других направлениях, отвечая требованиям растущего бизнеса, все возрастающих объемов корпоративных данных [1-2].

Современные информационно-управляющие системы относятся к классу сложных систем с длительным циклом разработки. Внедрение СУБД − технологий является важной и актуальной задачей. Их применение позволяет значительно снизить трудоемкость и повысить качество проектных решений.

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

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

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

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

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

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

 

1.  
АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ И ПОСТАНОВКА ЗАДАЧИ


Каждый человек на протяжении своей жизни сталкивается с проблемой выбора. Данная проблема возникает в большинстве случаев из-за того, что человек не знает чего он хочет, а также из-за перенасыщенности рынка (большое количество продукции), порой не дает человеку совершить правильный, осознанный выбор. Существует и проблема того, что человек не является экспертом в той предметной области в которой он хочет совершить покупку. В таких случаях на помощь человеку приходят системы помогающие сделать выбор.

Данная система позволяет человеку выбрать продукт, а также существует возможность рекомендации дополнительных товаров. В программе достаточно удобный и простой интерфейс, позволяющий пользователям успешно совершать покупки. Система рассчитана на то, что человек не определился с тем продуктом который он хочет заказать. Для этого были введены вопросы, позволяющие определить интересы пользователя. Ответив на вопросы пользователь определяет что является для него приоритетным и на основании этих данных формирует заказ. Заказ у клиента может состоять из большого количества продуктов. Доведенный заказ формирует транзакцию. В свою очередь транзакция с данными о покупке, о дате и времени сохраняется в списке транзакций, где в дальнейшем можно просмотреть все совершенные операции с товаром [1-2].

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

1.1  ЗАДАЧА РАЗРАБОТКИ ИНТЕЛЛЕКТУАЛЬНЫХ СИСТЕМ ПОДБОРА ТОВАРОВ


В компьютерных науках <#"551929.files/image001.gif">

Рисунок 2.1 - Алгоритм Apriori

На первом этапе происходит формирование одноэлементных кандидатов. Далее алгоритм подсчитывает поддержку одноэлементных наборов. Наборы с уровнем поддержки меньше установленного, то есть 3, отсекаются. В нашем примере это наборы e и f, которые имеют поддержку, равную 1. Оставшиеся наборы товаров считаются часто встречающимися одноэлементными наборами товаров: это наборы a, b, c, d.

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

Если смотреть на работу алгоритма прямолинейно, на последнем этапе алгоритм формирует трехэлементные наборы товаров: abc, abd, bcd, acd, подсчитывает их поддержку и отсекает наборы с уровнем поддержки, меньшим 3. Набор товаров abc может быть назван часто встречающимся.

Однако алгоритм Apriori уменьшает количество кандидатов, отсекая - априори − тех, которые заведомо не могут стать часто встречающимися, на основе информации об отсеченных кандидатах на предыдущих этапах работы алгоритма [14-16].

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

Так наборы товаров ad, bc, cd были отброшены как нечасто встречающиеся, алгоритм не рассматривал товаров abd, bcd, acd.

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

Алгоритм Apriori рассчитывает также поддержку наборов, которые не могут быть отсечены априори. Это так называемая негативная область (negative border), к ней принадлежат наборы-кандидаты, которые встречаются редко, их самих нельзя отнести к часто встречающимся, но все подмножества данных наборов являются часто встречающимися.

В зависимости от размера самого длинного часто встречающегося набора алгоритм Apriori сканирует базу данных определенное количество раз. Разновидности алгоритма Apriori, являющиеся его оптимизацией, предложены для сокращения количества сканирований базы данных, количества наборов-кандидатов или того и другого. Были предложены следующие разновидности алгоритма Apriori: AprioriTID и AprioriHybrid [14-16].

а)   AprioriTid.

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

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

б)   AprioriHybrid.

Анализ времени работы алгоритмов Apriori и AprioriTid показывает, что в более ранних проходах Apriori добивается большего успеха, чем AprioriTid; однако AprioriTid работает лучше Apriori в более поздних проходах. Кроме того, они используют одну и ту же процедуру формирования наборов-кандидатов. Основанный на этом наблюдении, алгоритм AprioriHybrid предложен, чтобы объединить лучшие свойства алгоритмов Apriori и AprioriTid. AprioriHybrid использует алгоритм Apriori в начальных проходах и переходит к алгоритму AprioriTid, когда ожидается, что закодированный набор первоначального множества в конце прохода будет соответствовать возможностям памяти. Однако, переключение от Apriori до AprioriTid требует вовлечения дополнительных ресурсов.

Некоторыми авторами были предложены другие алгоритмы поиска ассоциативных правил, целью которых также было усовершенствование алгоритма Apriori. Кратко изложим суть нескольких, для более подробной информации можно рекомендовать [14-16].

Один из них − алгоритм DHP, также называемый алгоритмом хеширования. В основе его работы − вероятностный подсчет наборов-кандидатов, осуществляемый для сокращения числа подсчитываемых кандидатов на каждом этапе выполнения алгоритма Apriori. Сокращение обеспечивается за счет того, что каждый из k-элементных наборов-кандидатов помимо шага сокращения проходит шаг хеширования. В алгоритме на k-1 этапе во время выбора кандидата создается так называемая хеш-таблица. Каждая запись хеш-таблицы является счетчиком всех поддержек k-элементных наборов, которые соответствуют этой записи в хеш-таблице. Алгоритм использует эту информацию на этапе k для сокращения множества k-элементных наборов-кандидатов. После сокращения подмножества, как это происходит в Apriori, алгоритм может удалить набор-кандидат, если его значение в хеш-таблице меньше порогового значения, установленного для обеспечения [14-16].

К другим усовершенствованным алгоритмам относятся: PARTITION, DIC, алгоритм «выборочного анализа».

PARTITION алгоритм. Этот алгоритм разбиения (разделения) заключается в сканировании транзакционной базы данных путем разделения ее на непересекающиеся разделы, каждый из которых может уместиться в оперативной памяти. На первом шаге в каждом из разделов при помощи алгоритма Apriori определяются «локальные» часто встречающиеся наборы данных. На втором подсчитывается поддержка каждого такого набора относительно всей базы данных. Таким образом, на втором этапе определяется множество всех потенциально встречающихся наборов данных.

Алгоритм DIC, Dynamic Itemset Counting. Алгоритм разбивает базу данных на несколько блоков, каждый из которых отмечается так называемыми «начальными точками» (start point), и затем циклически сканирует базу данных.

 

2.4  ПРИМЕНЕНИЕ АССОЦИАТИВНЫХ ПРАВИЛ


Для реализации данного бакалаврского проекта был выбран метод Apripri.

Допустим, имеется транзакционная база данных D. Присвоим значениям товаров переменные (табл. 2.3) [10-17].

Таблица 2.3 - Транзакционная база данных TID

TID

Приобретенные покупки

1

Пена для бритья, гель для душа, бальзам после бритья

2

Гель для душа, мыло

3

Гель для душа, пена для бритья, мыло, бальзам после бритья

4

Духи, мыло

5

6

Крем для тела


Пена для бритья = a; Гель для душа = b; Бальзам после бритья = c;

Мыло = d; Духи = e; Крем для тела = f;

Рассмотрим набор товаров (Itemset), включающий, например, {пена для бритья, гель для душа, бальзам после бритья}. Выразим этот набор с помощью переменных, получаем: abc={a,b,c}

В ассоциативных правилах существует понятие поддержки. Это набор товаров встречается в разработанной базе данных три раза, т.е. поддержка этого набора товаров равна 3: SUP(abc)=3. При минимальном уровне поддержки, равной трем, набор товаров abc является часто встречающимся шаблоном. В таблице 2.4 приведены часто встречающиеся товары.

При минимальном уровне поддержки, равной трем, набор товаров abc является часто встречающимся шаблоном. min_sup=3, {Пена для бритья, гель для душа, бальзам после бритья} − часто встречающийся шаблон [10-17].

Поддержкой называют количество или процент транзакций, содержащих определенный набор данных.

Для данного набора товаров поддержка, выраженная в процентном отношении, равна 50%. SUP(abc)=(3/6)*100%=50%

Поддержку иногда также называют обеспечением набора. Таким образом, набор представляет интерес, если его поддержка выше определенного пользователем минимального значения (min support). Эти наборы называют часто встречающимися (frequent).

В ассоциативных правилах также существует понятие достоверности. Правило «Из A следует B» справедливо с достоверностью С, если c% транзакций из всего множества, содержащих набор элементов A, также содержат набор элементов B.

Число транзакций, содержащих мыло, равно четырем, число транзакций, содержащих пену для бритья, равно трем, достоверность правила равна (3/4)*100%, т.е. 75%.

Достоверность правила «Из покупки мыла следует покупка пены для бритья» равна 75%, т.е. 75% транзакций, содержащих товар А, также содержат товар B.

Таблица 2.4 - Часто встречающиеся наборы товаров

TID

Приобретенные покупки


TID

Приобр. покупки

1

Пена для бритья, гель для душа, бальзам после бритья


100

a, b, c

2

Гель для душа, мыло


200

b, d

3

Гель для душа, пена для бритья, мыло, бальзам после бритья


300

b, a, d, c

4

Духи, мыло


400

e, d

5

Пена для бритья, гель для душа, бальзам после бритья, мыло


500

a, b, c, d

6

Крем для тела


600

f


Также существуют и другие методы адаптации услуг и продукции под конкретного пользователя. Таким методом является персонализация.

3.  
Программная реализация системы


3.1 ТРЕБОВАНИЯ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ


Программный продукт - интеллектуальная система, которая позволяет человеку подобрать продукт и рекомендует дополнительный наиболее релевантный продукт.

Для работы программы требуется:

-    операционная система Windows 98/2000/XP;

-       установленная среда Python 2.6;

-       установленный SQL Server 2005.

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

3.2  ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ПОЛУЧЕННЫЕ РЕЗУЛЬТАТЫ


Главная форма программы «Apriori», как показано на рисунке 3.1, отображает все продукты, добавленные в базу данных, а также кнопки с дополнительными сервисами. С главной формы можно перейти к корзине, где можно подобрать продукцию (рис. 3.2), просмотреть популярные наборы (рис. 3.3), а также посмотреть правила (рис. 3.4).

В данной программе также можно добавлять категорию в базу данных, с пользовательского интерфейса (рис. 3.5), добавлять товары в главную форму программы, также посмотреть список транзакций (рис. 3.6).

Рисунок 3.1 - Главная форма

Рисунок 3.2 - Подбор продукции

Рисунок 3.3 − Популярные наборы (с учетом уровня поддержки 2-5)

Рисунок 3.4 − Правила

Рисунок 3.5 - Добавление категории

Рисунок 3.6 - Список транзакций

 

3.3  ПРИМЕР ОФОРМЛЕНИЯ ЗАКАЗА

персонализация интеллектуальный товар ассоциативный

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

а)   Оформление заказа с помощью «Эксперта выбора».

Для того чтобы воспользоваться «Экспертом выбора» необходимо на главной форме программы нажать кнопку корзина. На экране появится окно, где есть кнопка «Эксперт выбора» (рис. 3.7).

Рисунок 3.7 - «Эксперт выбора»

После нажатие данной кнопки, пользователю предлагается ответить на три вопроса. Вопрос №1 представлен на рисунке 3.8, вопрос №2 представлен на рисунке 3.9, вопрос №3 представлен на рисунке 3.10.

Рисунок 3.8 - Вопрос №1

Рисунок 3.9 - Вопрос №2

Рисунок 3.10 - Вопрос №3

После ответов на данные вопросы, программа покажет интересующие пользователя продукты. Пользователь выбирает соответствующий продукт и нажимает кнопку «Добавить в корзину» (рис. 3.11).

Рисунок 3.11 - Выбор продукта

Выбранный пользователем продукт автоматически добавляется в корзину, где на основании ассоциативных правил и анализа предыдущих транзакций пользователю рекомендуется дополнительный продукт, который пользователь может приобрести (рис. 3.12).

Рисунок 3.12 - Покупка продукции

В случае, если пользователь решил завершить покупку, то после нажатия кнопки «оформить покупку», автоматически добавляется в список транзакций (рис. 3.6). В случае если хочет добавить к своему заказу еще продукт, то нажимает на кнопку «Эксперт выбора», и проходит снова три вопроса.

б)   Оформление заказа «вручную».

Для оформления заказа «вручную» необходимо на главной форме системы нажать кнопку «Транзакции», которую можно увидеть на рисунке 3.6. После чего следует нажать на кнопку «Добавить данные» (рис 3.13), и через запятую следует ввести необходимые товары.

Рисунок 3.13 - Добавление транзакции

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

ВЫВОДЫ

В данной бакалаврской работе была разработана интеллектуальная системы подбора товаров, работа которой базируется на использовании ассоциативных правил. При заданном запросе система подбирает клиенту необходимый продукт и предлагает дополнительные товары в зависимости от интересов. Для этого клиент должен описать критерии, по которым система определит потребности.

Интеллектуальная система создана с использованием средств СУБД SQL SERVER, а также среды Python 2.6. Работа с системой не требует от пользователей особых знаний в области баз данных. При заданном запросе система подбирает клиенту необходимый продукт и предлагает дополнительные товары в зависимости от интересов. Для этого клиент должен описать критерии, по которым система определит потребности. Программа является легкой в освоении и эксплуатации, что достаточно важно для конечного пользователя.

ПЕРЕЧЕНЬ ССЫЛОК

1.   Agrawal R. Mining Association Rules Between Sets of Items in Large Databases. / R. Agrawal, T. Imielinski, A. Swami. // SIGMOD Conference 1993. − Р. 207-216.

2.      Hipp J. Algorithms for association rule mining - A general survey and comparison. / J. Hipp, U. Güntzer, G. Nakhaeizadeh. // SIGKDD Explorations. − №2(2). - 2000. - Р. 1-58.

.        Omiecinski E. Alternative interest measures for mining associations in databases. / E. Omiecinski. // IEEE Transactions on Knowledge and Data Engineering. - 2003. - №15(1). - Р. 57-69.

4.   Поиск ассоциативных правил: [Электрон. ресурс]. − Режим доступа: http://wiki.auditory.ru/.

5.      Поиск ассоциативных правил при интеллектуальном анализе данных: [Электрон. ресурс]. − Режим доступа: www.rammus.ru/products/arda/.

.        Области применения ассоциативных правил: [Электрон. ресурс]. − Режим доступа: www.rammus.ru/products/arda/article_review_ar_applications/.

7.      Association rule learning: [Электрон. ресурс]. − Режим доступа: http://en.wikipedia.org/wiki/Association_rule_learning/.

8.   Методы поиска ассоциативных правил: [Электрон. ресурс]. − Режим доступа: www.intuit.ru/department/database/datamining/15/.

9.      Введение в анализ ассоциативных правил: [Электрон. ресурс].− Режим доступа: www.basegroup.ru/library/analysis/association_rules/intro/.

10.   Apriori - масштабируемый алгоритм поиска ассоциативных правил: [Электрон. ресурс]. − Режим доступа: www.basegroup.ru/library/association_rule/.

11.    Apriori: [Электрон. ресурс]. − Режим доступа: ru.wikipedia/Apriori/.

.        Персонализация данных: [Электрон. ресурс]. − Режим доступа: www.copy-market.ru/index.php?page...dannyh/.

.        Персонализация данных: [Электрон. ресурс].− Режим доступа: http://www.copy-market.ru/personalizatsiya-dannyh/.

.        Персонализация: [Электрон. ресурс]. − Режим доступа: www.lscorp.ru/.

.        Data Mining: [Электрон. ресурс]. − Режим доступа: www.int.ru/datamining/.

.        Data Mining - интеллектуальный анализ данных: [Электрон. ресурс]. − Режим доступа: www.inftech.webservis.ru/it/database/datamining/ar2.html/.

17.    Apriori algorithm source code: [Электрон. ресурс]. − Режим доступа: msug.vn.ua/blogs/datamining/archive/2009/08/02/apriori-algorithm/.

18.    Data Mining: [Электрон. ресурс]. − Режим доступа: http://habrahabr.ru/blogs/data_mining/66016/.

19.   Боуман Дж. Практическое руководство по SQL. / Дж. Боуман, С. Эмерсон, М. Дарновски. − К.: Диалектика, 1998. - 565 с.

20.    Введение в стандарты языка баз данных SQL. [Электрон. ресурс]. − Режим доступа: www.citforum.ru/database/sqlbook/index.shtml/.

ПРИЛОЖЕНИЕ

Программный код файла «qt»

#!/usr/bin/python2.6

# -*- coding: utf-8 -*-

FROM __future__ IMPORT unicode_literalsplatformsysPyQt4 IMPORT QtCore, QtGuiresource_rcmodels IMPORT Category, ItemFormResult IMPORT FormResultFormTransactions IMPORT FormTransactionsFormCategories IMPORT FormCategoriesFormItem IMPORT FormItemFormCart IMPORT FormCartFormRules IMPORT FormRulesFormPopular IMPORT FormPopularFormSupp IMPORT FormSupp

__version__ = "1.0.0"Form(QtGui.QDialog):__init__(self, parent=NONE):(Form, self).__init__(parent)= QtGui.QAction(QtGui.QIcon(":/edit_add.png"), "&Добавить", self,=self.add_item)= QtGui.QAction(QtGui.QIcon(":/remove.png"), "&Удалить", self,=self.delete_item)=QtGui.QAction(QtGui.QIcon(":/category.png"), "&Категории", self,=self.show_categories)=QtGui.QAction(QtGui.QIcon(":/database.png"), "&Транзакции", self,=self.show_transactions)=QtGui.QAction(QtGui.QIcon(":/chart_bar.png"), "&Популярные товары", self,=self.show_popular)=QtGui.QAction(QtGui.QIcon(":/calculator.png"), "&Правила", self,=self.show_rules)=QtGui.QAction(QtGui.QIcon(":/cart2.png"), "&Корзина", self,=self.show_cart)=QtGui.QAction(QtGui.QIcon(":/refresh.png"), "&Товары", self,=self.show_items)=QtGui.QAction(QtGui.QIcon(":/help.png"),"&О программе", self,=self.help_about)= QtGui.QToolBar()

#QStyle.SH_TitleBar_NoBorder.addAction(addAction).addAction(delAction).addAction(categoryAction).addAction(TRANSACTION).addAction(popularAction).addAction(rulesAction).addAction(cartAction).addAction(itemsAction).addAction(aboutAction)

#init grid.tableWidget = QtGui.QTableWidget().refreshTable()= QtGui.QVBoxLayout().addWidget(toolBar).addWidget(self.tableWidget).setLayout(layout).connect(self.tableWidget,.SIGNAL("itemDoubleClicked(QTableWidgetItem*)"),.edit_item)

self.setWindowTitle(u"Apriori. Помощь в подборе товара при покупке")

self.setGeometry(250, 250, 950, 400)=QtGui.QDesktopWidget().screenGeometry()=self.geometry().move((screen.width()-size.width())/2,(screen.height()-size.height())/2)refreshTable(self):.tableWidget.clear().tableWidget.setSortingEnabled(True).tableWidget.setRowCount(0).tableWidget.enabledChange(False).tableWidget.setSelectionMode(QtGui.QAbstractItemView.SingleSelection); self.tableWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows);.tableWidget.setEditTriggers(QtGui.QTableWidget.NoEditTriggers).tableWidget.setColumnCount(3).tableWidget.setHorizontalHeaderLabels(["№","Название",'Категория']).tableWidget.setColumnWidth(0, 40).tableWidget.setColumnWidth(1, 400).tableWidget.setColumnWidth(2, 400)item in Item.get():=self.tableWidget.rowCount().tableWidget.insertRow(no).tableWidget.setItem(no, 0, QtGui.QTableWidgetItem(str(item.id))).tableWidget.setItem(no, 1, QtGui.QTableWidgetItem(item.name)).tableWidget.setItem(no, 2, QtGui.QTableWidgetItem(Category.get (item.category_id).get_name())).tableWidget.setRowHeight(no, 20)show_rules(self):= FormSupp()forms.exec_():=FormRules(minsupp=forms.minText.text().toInt()[0], maxsupp=forms.maxText.text().toInt()[0]).exec_()show_popular(self):= FormSupp()forms.exec_():=FormPopular(minsupp=forms.minText.text().toInt()[0], maxsupp=forms.maxText.text().toInt()[0]).exec_()show_cart(self):= FormCart().exec_()add_item(self):= FormItem().exec_().refreshTable()edit_item(self):= self.tableWidget.currentRow()no != -1:= self.tableWidget.item(no, 0).text()= FormItem(model=Item.get(id)).exec_().refreshTable()delete_item(self):= QtGui.QMessageBox.question(self,

"Удаление",

"Запись будет удалена! Вы уверены?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

if reply == QtGui.QMessageBox.Yes:= self.tableWidget.currentRow()!= -1:= self.tableWidget.item(no, 0).text()(id=id).delete().refreshTable()show_items(self):= FormResult().exec_()show_transactions(self):= FormTransactions().exec_()show_categories(self):= FormCategories().exec_()help_about(self):.QMessageBox.about(self, "Apriori - О программе",

"""<b>Apriori</b> v {0}

<p>&copy; 2010, Евгений Лукашевский.

Все права защищены.

<p>Python {1} - Qt {2} - PyQt {3} on {4}""".format(

__version__, platform.python_version(),.QT_VERSION_STR, QtCore.PYQT_VERSION_STR,

platform.system()))= QtGui.QApplication(sys.argv)= Form().show().exec_()

Программный код файла «Models»

ConfigParser, osautumn.db.connection IMPORT autumn_dbautumn.model IMPORT Modelautumn.db.relations IMPORT ForeignKey, OneToManyautumn IMPORT validatorsDATETIME= ConfigParser.ConfigParser().readfp(OPEN('app.cfg'))_db.conn.connect('mysql', HOST=config.get('Database', 'host'), \=config.get('Database', 'user'), \=config.get('Database', 'db'), \=config.get('Database', 'passwd'), \='utf8')ORDER(Model):= OneToMany('OrderItem', 'order_id')Meta:= 'orders'OrderItem(Model):= ForeignKey(ORDER, 'order_id')Meta:= 'order_items'Item(Model):Meta:= 'items'Category(Model):Meta:= 'categories'get_name(self):self.lvl == 1:self.nameself.lvl == 2:_category = Category.get(self.parent_id)sub_category.name + ' -> ' + self.nameself.lvl == 3:sub_category2.name + ' -> ' + sub_category.name + ' -> ' + self.nameget_parent_name(self):self.lvl == 2:_category = Category.get(self.parent_id)sub_category.nameself.lvl == 3:_category = Category.get(self.parent_id)_category2 = Category.get(sub_category.parent_id)sub_category2.name + ' -> ' + sub_category.name

Программный код файла «Apriori»

-*- coding: utf-8 -*-models IMPORT ORDER, OrderItemApriori:__init__(self, minsupp=0, maxsupp=1000):.orders = NONE.items = NONE.max_items = 0.minsupp = minsupp.maxsupp = maxsupptransactions(self):

""" Формирование списка транзакций"""= []ORDER IN Order.get():

_items = []item IN order.items:.append(_items).orders = orders_items = 0ORDER IN orders:len(ORDER) > max_items: max_items = len(ORDER).max_items = max_itemsself.ordersitems_(self):= {}self.orders == NONE:.transactions()ORDER IN self.orders:item IN ORDER:item NOT IN items:[item] = 1:[item] = items[item] + 1self.itemscalc(self):self.items == NONE:.items_()= {}= [][1] = [{'elements': [d], 'cnt': n} FOR d, n IN self.items.iteritems()]NO IN xrange(2, self.max_items):[NO] = self.Apriorigen(k[NO - 1], self.orders, self.minsupp, self.maxsupp)= result + k[NO]resultApriorigen(self, DATA, orders, minsupp, maxsupp):

""" Генерация k+1 элементных кандидатов.

Размер k определяется размером списка DATA

"""candidate == tmp:_exist = TRUEc IN candidates:c['elements'] == item:['cnt'] = c['cnt'] + 1:.append({'cnt': 1, 'elements': item[:]})item IN candidates:= self.find_supp(item['elements'][:len(item['elements']) - 1], DATA)['supp'] = FLOAT(item['cnt']) / supp * 100_filter = [line FOR line IN candidates IF line['cnt'] >= minsupp AND line['cnt'] <= maxsupp]candidates_filterfind_supp(self, el, DATA):i IN DATA:el == i['elements']:i['cnt']0popular(self):= self.calc()= sorted(k, KEY = lambda X: -X['supp'])items

Похожие работы на - Разработка интеллектуальной системы подбора товара

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!