- •Лабораторная работа №1 разведочный анализ данных
- •Лабораторная работа №2 метод анализа иерархий
- •Лабораторная работа №3 группировка и агрегирование с помощью pandas
- •Лабораторная работа №4 регрессионный анализ
- •Лабораторная работа №5 программирование генетических алгоритмов на алгоритмическом языке python
- •Лабораторная работа №6 программирование лувенского алгоритма
Лабораторная работа №2 метод анализа иерархий
Целью лабораторной работы является освоение приемов:
обработки датафреймовых данных на алгоритмическом языке Python;
подготовки данных для использования их при применении метода анализа иерархий;
приведения данных к общим единицам измерения для получения комплексных оценок альтернатив;
использования средств и библиотек Python для решения задачи методом анализа иерархий.
Задание на выполнение лабораторной работы
Разработать программу для реализации метода анализа иерархий на алгоритмическом языке Python, которая в соответствии с вариантом 16 выбор квартиры позволяет сделать следующее:
Ввести заранее подготовленный в таблице Excel файл, содержащий данные о 12-15 альтернативах по 8-10 критериям для дальнейшего отбора.
Цель выбора квартиры: для молодой семьи с маленьким ребенком
Таблица Excel:
Листинг программы:
import pandas as pd ex = pd.read_excel('lab2.xlsx') list1 = ex.index[ex["Площадь м2"]<35].tolist() list2 = ex.index[ex["Ближайшее метро"]=="-"].tolist() list3 = ex.index[ex["Новый дом или вторичный рынок"]=="Вторичный"].tolist() for i in list2: if i in list1: continue else: list1.append(i) for i in list3: if i in list1: continue else: list1.append(i) for i in list1: ex.drop(i, axis=0, inplace=True) Index = [] index = ex.index for i in index: Index.append(i) dic = {} dic["Аэропорт"] = 0.6 dic["Динамо"] = 0.6 dic["Сокол"] = 0.6 dic["Бабушкинская"] = 0.4 dic["Новогиреево"] = 0.4 dic["Перово"] = 0.4 dic["Бутово"] = 0.4 dic["Коммунарка"] = 0.4 dic["Пушкинская"] = 0.8 dic["Охотный ряд"] = 0.8 dic["Лужники"] = 0.8 dic["Проспект Мира"] = 0.8 dic["Арбатская"] = 0.8 dic["да"] = 0.85 dic["нет"] = 0.4 dic["САО"] = 0.5 dic["ЮАО"] = 0.5 dic["СВАО"] = 0.5 dic["ЮВАО"] = 0.5 dic["ЦАО"] = 0.5 dic["ЗАО"] = 0.5 dic["ВАО"] = 0.5 dic["ЮЗАО"] = 0.5 dic["Новый "] = 0.9 dic["Детсад, школа"] = 0.5 dic["Детсад, поликлиника"] = 0.5 dic["Поликлиника"] = 0.3 dic["Школа"] = 0.3 dic["Детсад"] = 0.3 dic["Детсад, школа, поликлиника"] = 0.9 dic["Школа, поликлиника"] = 0.5 dic["Детсад, поликлиника"] = 0.5 a=0.8 for i in range(70): dic[i] = a a = a - 0.02 list4 = [] for i in ex["Стоимость за м2 в тыс.руб"]: list4.append(i) list4.sort() b=0.8 for i in range(91): dic[i] = b b = b-0.01 list5 = [] for i in ex["Площадь м2"]: list5.append(i) list5.sort() c=0.8 for i in range(4): dic[i] = c c = c-0.3 list6 = [] for i in ex["Количество комнат"]: list6.append(i) list6.sort() d=0.8 for i in range(26): dic[i] = d d = d-0.05 list7 = [] for i in ex["Этаж"]: list7.append(i) list7.sort() f=0.8 for i in range(5): dic[i] = f f = f-0.04 list8 = [] for i in ex["Рейтинг компании застройщика"]: list8.append(i) list8.sort() list9 = [] for i in ex: list10 = [] for j in Index: list10.append(ex[i][j]) list9.append(list10) for i in range(len(list9[0])): winner = 0 for j in range(1, len(list9)): winner = winner + dic[list9[j][i]] print(list9[0][i], ":", winner)
Задать или ввести требования к кандидатам по каждому из критериев; при этом ряд требований могут позволить некоторых кандидатов сразу отсечь, а некоторые предназначены для определения градации по признаку.
Отсечение происходит по следующим критериям:
Площадь м2 должна быть больше 35 м2
Рядом должно быть метро
Дом должен быть новый
Задать веса каждого признака (значения веса выбираются из «соображений разумного» или используется метод попарных сравнений).
Значения весов для каждого критерия задаются програмно в цикле for
dic = {} dic["Аэропорт"] = 0.6 dic["Динамо"] = 0.6 dic["Сокол"] = 0.6 dic["Бабушкинская"] = 0.4 dic["Новогиреево"] = 0.4 dic["Перово"] = 0.4 dic["Бутово"] = 0.4 dic["Коммунарка"] = 0.4 dic["Пушкинская"] = 0.8 dic["Охотный ряд"] = 0.8 dic["Лужники"] = 0.8 dic["Проспект Мира"] = 0.8 dic["Арбатская"] = 0.8 dic["да"] = 0.85 dic["нет"] = 0.4 dic["САО"] = 0.5 dic["ЮАО"] = 0.5 dic["СВАО"] = 0.5 dic["ЮВАО"] = 0.5 dic["ЦАО"] = 0.5 dic["ЗАО"] = 0.5 dic["ВАО"] = 0.5 dic["ЮЗАО"] = 0.5 dic["Новый "] = 0.9 dic["Детсад, школа"] = 0.5 dic["Детсад, поликлиника"] = 0.5 dic["Поликлиника"] = 0.3 dic["Школа"] = 0.3 dic["Детсад"] = 0.3 dic["Детсад, школа, поликлиника"] = 0.9 dic["Школа, поликлиника"] = 0.5 dic["Детсад, поликлиника"] = 0.5 a=0.8 for i in range(70): dic[i] = a a = a - 0.02 list4 = [] for i in ex["Стоимость за м2 в тыс.руб"]: list4.append(i) list4.sort() b=0.8 for i in range(91): dic[i] = b b = b-0.01 list5 = [] for i in ex["Площадь м2"]: list5.append(i) list5.sort() c=0.8 for i in range(4): dic[i] = c c = c-0.3 list6 = [] for i in ex["Количество комнат"]: list6.append(i) list6.sort() d=0.8 for i in range(26): dic[i] = d d = d-0.05 list7 = [] for i in ex["Этаж"]: list7.append(i) list7.sort() f=0.8 for i in range(5): dic[i] = f f = f-0.04 list8 = [] for i in ex["Рейтинг компании застройщика"]: list8.append(i) list8.sort()
4. Определить значение каждой альтернативы.
5. Произвести сортировку альтернатив в соответствии с их значениями.
6. Вывести для пользователя полный отсортированный список кандидатов.
Вывод:
