Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет бд 3 сем.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
3.66 Mб
Скачать

Лабораторная работа №2 метод анализа иерархий

Целью лабораторной работы является освоение приемов:

  • обработки датафреймовых данных на алгоритмическом языке Python;

  • подготовки данных для использования их при применении метода анализа иерархий;

  • приведения данных к общим единицам измерения для получения комплексных оценок альтернатив;

  • использования средств и библиотек Python для решения задачи методом анализа иерархий.

Задание на выполнение лабораторной работы

Разработать программу для реализации метода анализа иерархий на алгоритмическом языке Python, которая в соответствии с вариантом 16 выбор квартиры позволяет сделать следующее:

  1. Ввести заранее подготовленный в таблице 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)

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

Отсечение происходит по следующим критериям:

  • Площадь м2 должна быть больше 35 м2

  • Рядом должно быть метро

  • Дом должен быть новый

  1. Задать веса каждого признака (значения веса выбираются из «соображений разумного» или используется метод попарных сравнений).

Значения весов для каждого критерия задаются програмно в цикле 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. Вывести для пользователя полный отсортированный список кандидатов.

Вывод:

Соседние файлы в предмете Большие данные