commit 5f09410869b36cb26a7f9e3c329212501f837f49 Author: Dmitry Date: Tue Apr 7 21:00:58 2026 +0300 Инициализация репозитория для ИРФМ_МИФИ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..075a631 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Local datasets and databases +/data/montcoalert/ +*.db +*.sqlite +*.sqlite3 diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/LR1/specialities.html b/LR1/specialities.html new file mode 100644 index 0000000..2ee5de0 --- /dev/null +++ b/LR1/specialities.html @@ -0,0 +1,2204 @@ + + + + Анализ данных файла specialities.xml + + + +

Анализ данных файла specialities.xml (specialities.xml)

+
+
Анализ поля id
+
Тип данных: integer
+
Число пустых: 0
+
Нужен: NOT NULL
+
+
+
Анализ поля name
+
Тип данных: Текст
+
Самый длинный элемент: + Твердотельная электроника, радиоэлектронные компоненты, микро- и наноэлектроника на квантовых эффектах , длина: 102
+
Число пустых: 0
+
Нужен: NOT NULL
+
+
+
Анализ поля code
+
Тип данных: Текст
+
Самый длинный элемент: + 14.05.03 , длина: 8
+
Число пустых: 0
+
Нужен: NOT NULL
+
+
+
Анализ поля level
+
Тип данных: Текст
+
Самый длинный элемент: + Магистратура , длина: 12
+
Число пустых: 0
+
Нужен: NOT NULL
+
Нужен: CHECK (level IN( + 'Специалитет' , 'Магистратура' , 'Бакалавриат' , 'Аспирантура' + ))
+
+
+
Анализ поля level-id
+
Тип данных: integer
+
Число пустых: 0
+
Нужен: NOT NULL
+
Нужен: CHECK (level_id IN( + '1' , '2' , '0' , '3' + ))
+
+
+
Анализ поля generation
+
Тип данных: Текст
+
Самый длинный элемент: + ФГОС3+ , длина: 6
+
Число пустых: 0
+
Нужен: NOT NULL
+
Нужен: CHECK (generation IN( + 'ФГОС3+' , 'ГОС2' + ))
+
+
+
Анализ поля generation-id
+
Тип данных: integer
+
Число пустых: 0
+
Нужен: NOT NULL
+
Нужен: CHECK (generation_id IN( + '1' , '0' + ))
+
+
+
Анализ поля type
+
Тип данных: Текст
+
Самый длинный элемент: + специальность , длина: 13
+
Число пустых: 0
+
Нужен: NOT NULL
+
Нужен: CHECK (type IN( + 'специальность' , 'направление' + ))
+
+
+
Анализ поля type-id
+
Тип данных: integer
+
Число пустых: 0
+
Нужен: NOT NULL
+
Нужен: CHECK (type_id IN( + '1' , '0' + ))
+
+

SQL-файл

+
DROP TABLE IF EXISTS specialities; +DROP SEQUENCE IF EXISTS specialities_id_seq; + +CREATE SEQUENCE specialities_id_seq + START WITH 1 + INCREMENT BY 1; + +CREATE TABLE specialities ( + id INTEGER NOT NULL, + + name VARCHAR(102) NOT NULL, + + code VARCHAR(8) NOT NULL, + + level VARCHAR(12) NOT NULL CHECK (level IN ('Специалитет', 'Магистратура', 'Бакалавриат', 'Аспирантура')), + + level_id INTEGER NOT NULL CHECK (level_id IN (1, 2, 0, 3)), + + generation VARCHAR(6) NOT NULL CHECK (generation IN ('ФГОС3+', 'ГОС2')), + + generation_id INTEGER NOT NULL CHECK (generation_id IN (1, 0)), + + type VARCHAR(13) NOT NULL CHECK (type IN ('специальность', 'направление')), + + type_id INTEGER NOT NULL CHECK (type_id IN (1, 0)), + CONSTRAINT pk_specialities PRIMARY KEY (id) +);
+

SQL: INSERT-запросы, сформированные из XML

+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Технологии разделения изотопов и ядерное топливо', + '14.05.03', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерные физика и технологии', + '14.04.02', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Юриспруденция', + '030501', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика', + '230401', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационная безопасность', + '090900', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Конструкторско-технологическое обеспечение машиностроительных производств', + '151900', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика кинетических явлений', + '140303', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная информатика', + '09.03.03', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика и информатика', + '01.03.02', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Бизнес-информатика', + '38.04.05', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационные системы и технологии', + '09.04.02', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Применение и эксплуатация автоматизированных систем специального назначения', + '09.05.01', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Безопасность и нераспространение ядерных материалов', + '140309', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Техническая физика', + '140400', + 'Магистратура', + 2, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерные физика и технологии', + '140800', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика и информатика', + '010501', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Атомные станции: проектирование, эксплуатация и инжиниринг', + '14.05.02', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Юриспруденция', + '40.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономика', + '38.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная информатика (по областям)', + '080801', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Материаловедение и технологии материалов', + '22.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Юриспруденция', + '40.04.01', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационно-аналитические системы безопасности', + '10.05.04', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Материаловедение и технологии материалов', + '150100', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Электроника и автоматика физических установок', + '14.05.04', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Международные отношения', + '41.03.05', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Технологии разделения изотопов и ядерное топливо', + '141405', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Безопасность информационных технологий в правоохранительной сфере', + '10.05.05', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономика', + '080100', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная информатика', + '230700', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерные физика и технологии', + '14.03.02', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информатика и вычислительная техника', + '09.04.01', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Бизнес-информатика', + '38.03.05', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Системный анализ и управление', + '27.03.03', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационная безопасность', + '090900', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерная энергетика и теплофизика', + '14.04.01', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информатика и вычислительная техника', + '230100', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Вычислительные машины, комплексы, системы и сети', + '230101', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика и информатика', + '010400', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика', + '01.03.04', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Комплексная защита объектов информатизации', + '090104', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика и информатика', + '010400', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Правовое обеспечение национальной безопасности', + '40.05.01', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика', + '03.03.02', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационная безопасность', + '10.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика металлов', + '150702', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика пучков заряженных частиц и ускорительная техника', + '140304', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Медицинская физика', + '010707', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика и информатика', + '01.04.02', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационная безопасность', + '10.04.01', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Комплексное обеспечение информационной безопасности автоматизированных систем', + '090105', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладные математика и физика', + '03.04.01', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Материаловедение и технологии материалов', + '22.04.01', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная информатика', + '09.04.03', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Международные отношения', + '030701', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерные реакторы и материалы', + '14.05.01', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика и информатика', + '010500', + 'Бакалавриат', + 0, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладные математика и физика', + '010600', + 'Бакалавриат', + 0, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информатика и вычислительная техника', + '09.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Программная инженерия', + '09.04.04', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика и информатика', + '010500', + 'Магистратура', + 2, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика', + '010700', + 'Бакалавриат', + 0, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Менеджмент', + '080500', + 'Бакалавриат', + 0, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика', + '011200', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационная безопасность автоматизированных систем', + '10.05.03', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладные математика и физика', + '010900', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Материаловедение и технологии материалов', + '150100', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Математические методы в экономике', + '080116', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика', + '011200', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономика и управление на предприятии (по отраслям)', + '080502', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Международные отношения', + '41.04.05', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика', + '03.04.02', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладные математика и физика', + '010600', + 'Магистратура', + 2, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Электроника и микроэлектроника', + '210100', + 'Магистратура', + 2, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Менеджмент', + '38.03.02', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Финансы и кредит', + '080105', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информатика и вычислительная техника', + '230100', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономика', + '080100', + 'Бакалавриат', + 0, + 'ГОС2', + 0, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика конденсированного состояния вещества', + '140301', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерные реакторы и энергетические установки', + '140305', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационная безопасность автоматизированных систем', + '090303', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика атомного ядра и частиц', + '140302', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Менеджмент', + '38.04.02', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационные системы и технологии', + '09.03.02', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Бухгалтерский учет, анализ и аудит', + '080109', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Программная инженерия', + '231000', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладные математика и физика', + '03.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономика', + '38.04.01', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерные физика и технологии', + '140800', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Конструкторско-технологическое обеспечение машиностроительных производств', + '15.04.05', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Автоматизированные системы обработки информации и управления', + '230102', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Прикладная математика', + '01.04.04', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономическая безопасность', + '38.05.01', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Радиационная безопасность человека и окружающей среды', + '140307', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономика', + '080100', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Менеджмент', + '080200', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Программная инженерия', + '09.03.04', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Системный анализ и управление', + '27.04.03', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Менеджмент', + '080200', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерная энергетика и теплофизика', + '140700', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Электроника и автоматика физических установок', + '140306', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Дифференциальные уравнения', + '01.01.02', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Приборы и методы экспериментальной физики', + '01.04.01', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика и астрономия', + '03.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Теоретическая физика', + '01.04.02', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика конденсированного состояния', + '01.04.07', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика плазмы', + '01.04.08', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Электрофизика, электрофизические установки', + '01.04.13', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Теплофизика и теоретическая теплотехника', + '01.04.14', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Электро- и теплотехника', + '13.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика атомного ядра и элементарных частиц', + '01.04.16', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика пучков заряженных частиц и ускорительная техника', + '01.04.20', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Лазерная физика', + '01.04.21', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физика высоких энергий', + '01.04.23', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационно-измерительные и управляющие системы (по отраслям)', + '05.11.16', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Управление в технических системах', + '27.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Системный анализ, управление и обработка информации (по отраслям)', + '05.13.01', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информатика и вычислительная техника', + '09.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Элементы и устройства вычислительной техники и систем управления', + '05.13.05', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Автоматизация и управление технологическими процессами и производствами (по отраслям)', + '05.13.06', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей', + '05.13.11', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Математическое моделирование, численные методы и комплексы программ', + '05.13.18', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Компьютерные и информационные науки ', + '02.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Методы и системы защиты информации, информационная безопасность', + '05.13.19', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Информационная безопасность', + '10.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерные энергетические установки, включая проектирование, эксплуатацию и вывод из эксплуатации', + '05.14.03', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерная, тепловая и возобновляемая энергетика и сопутствующие технологии', + '14.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Твердотельная электроника, радиоэлектронные компоненты, микро- и наноэлектроника на квантовых эффектах', + '05.27.01', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Электроника, радиотехника и системы связи', + '11.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономика и управление народным хозяйством (по отраслям и сферам деятельности)', + '08.00.05', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономика', + '38.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Бухгалтерский учет, статистика', + '08.00.12', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Математические и инструментальные методы экономики', + '08.00.13', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Административное право, финансовое право, информационное право', + '12.00.14', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Юриспруденция', + '40.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Материаловедение', + '05.16.09', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Химическая технология', + '18.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Порошковая металлургия и композиционные материалы', + '05.16.06', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Технологии материалов', + '22.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Лазерная техника и лазерные технологии', + '12.03.05', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Математика и механика', + '01.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Юриспруденция', + '030900', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Компьютерные и информаионные науки', + '02.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Психология', + '37.04.01', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Лазерная техника и лазерные технологии', + '12.04.05', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Физико-технические науки и технологии', + '16.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экономическая безопасность', + '080101', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Химические науки', + '04.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Фотоника, приборостроение, оптические и биотехнические системы и технологии', + '12.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Машиностроение', + '15.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Психологические науки', + '37.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Биологические науки', + '06.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Электроника и наноэлектроника', + '11.04.04', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Электроника и наноэлектроника', + '11.03.04', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Авиационная и ракетно-космическая техника', + '24.06.01', + 'Аспирантура', + 3, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Биология', + '06.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Лечебное дело', + '31.05.01', + 'Специалитет', + 1, + 'ФГОС3+', + 1, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Менеджмент организации', + '080507', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Приборостроение', + '12.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Химия', + '04.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Химия, физика и механика материалов', + '04.04.02', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Экология и природопользование', + '05.03.06', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Атомные электрические станции и установки', + '140404', + 'Специалитет', + 1, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Ядерная энергетика и теплофизика', + '14.03.01', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Технология редких, рассеянных и радиоактивных элементов', + '05.17.02', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Технология электрохимических процессов и защита от коррозии', + '05.17.03', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Химическая технология топлива и высокоэнергетических веществ', + '05.17.07', + 'Аспирантура', + 3, + 'ГОС2', + 0, + 'специальность', + 1 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Фотоника и оптоинформатика', + '12.04.03', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Биотехнические системы и технологии', + '12.03.04', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Фотоника и оптоинформатика', + '12.03.03', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Высокотехнологические плазменные и энергетические установки', + '16.03.02', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Высокотехнологические плазменные и энергетические установки', + '16.04.02', + 'Магистратура', + 2, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + 'Мехатроника и робототехника', + '15.03.06', + 'Бакалавриат', + 0, + 'ФГОС3+', + 1, + 'направление', + 0 +);
+ + diff --git a/LR1/specialities.xsl b/LR1/specialities.xsl new file mode 100644 index 0000000..7b7dd57 --- /dev/null +++ b/LR1/specialities.xsl @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + +
Нужен: NOT NULL
+
+
+ + + + + NOT NULL + + + + + + + + + CHECK ( + + IN ( + + ' + + ' + + , + + + )) + + + + + + + + + CHECK ( + + IN ( + + + + , + + + )) + + + + + +
+
Анализ поля id
+
Тип данных: integer
+
Число пустых:
+ +
+
+ + + +
+
Анализ поля name
+
Тип данных: Текст
+
Самый длинный элемент: + + + , длина: + +
+
Число пустых:
+ +
+
+ + + +
+
Анализ поля code
+
Тип данных: Текст
+
Самый длинный элемент: + + + , длина: + +
+
Число пустых:
+ +
+
+ + + +
+
Анализ поля level
+
Тип данных: Текст
+
Самый длинный элемент: + + + , длина: + +
+
Число пустых:
+ +
Нужен: CHECK (level IN( + + '' + , + + ))
+
+
+ + + +
+
Анализ поля level-id
+
Тип данных: integer
+
Число пустых:
+ +
Нужен: CHECK (level_id IN( + + '' + , + + ))
+
+
+ + + +
+
Анализ поля generation
+
Тип данных: Текст
+
Самый длинный элемент: + + + , длина: + +
+
Число пустых:
+ +
Нужен: CHECK (generation IN( + + '' + , + + ))
+
+
+ + + +
+
Анализ поля generation-id
+
Тип данных: integer
+
Число пустых:
+ +
Нужен: CHECK (generation_id IN( + + '' + , + + ))
+
+
+ + + +
+
Анализ поля type
+
Тип данных: Текст
+
Самый длинный элемент: + + + , длина: + +
+
Число пустых:
+ +
Нужен: CHECK (type IN( + + '' + , + + ))
+
+
+ + + +
+
Анализ поля type-id
+
Тип данных: integer
+
Число пустых:
+ +
Нужен: CHECK (type_id IN( + + '' + , + + ))
+
+
+ + + + + + Анализ данных файла specialities.xml + + + +

Анализ данных файла specialities.xml (specialities.xml)

+ + + + + + + + + + + +

SQL-файл

+
DROP TABLE IF EXISTS specialities; +DROP SEQUENCE IF EXISTS specialities_id_seq; + +CREATE SEQUENCE specialities_id_seq + START WITH 1 + INCREMENT BY 1; + +CREATE TABLE specialities ( + id INTEGER, + + name VARCHAR( + ), + + code VARCHAR( + ), + + level VARCHAR( + ), + + level_id INTEGER, + + generation VARCHAR( + ), + + generation_id INTEGER, + + type VARCHAR( + ), + + type_id INTEGER, + CONSTRAINT pk_specialities PRIMARY KEY (id) +);
+ +

SQL: INSERT-запросы, сформированные из XML

+ +
INSERT INTO specialities (id, name, code, level, level_id, generation, generation_id, type, type_id) +VALUES ( + nextval('specialities_id_seq'), + '', + '', + '', + , + '', + , + '', + +);
+
+ + +
+
diff --git a/LR1/transform.py b/LR1/transform.py new file mode 100644 index 0000000..aa3f5f1 --- /dev/null +++ b/LR1/transform.py @@ -0,0 +1,14 @@ +from lxml import etree + +xml = etree.parse("specialities.xml") + +xslt = etree.parse("specialities.xsl") + +transform = etree.XSLT(xslt) + +result = transform(xml) + +with open("specialities.html", "wb") as f: + f.write(etree.tostring(result, pretty_print=True, encoding="UTF-8")) + +print("HTML успешно создан: specialities.html") diff --git a/LR2/irfm_lr2.ipynb b/LR2/irfm_lr2.ipynb new file mode 100644 index 0000000..b918549 --- /dev/null +++ b/LR2/irfm_lr2.ipynb @@ -0,0 +1,681 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "name": "python3", + "language": "python" + }, + "language_info": { + "name": "python", + "version": "3.12.13", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "mimetype": "text/x-python", + "nbconvert_exporter": "python", + "file_extension": ".py" + }, + "colab": { + "provenance": [] + } + }, + "nbformat": 4, + "nbformat_minor": 5, + "cells": [ + { + "cell_type": "code", + "id": "2e2f8a4c-7063-4650-ace5-8f230c8d994a", + "metadata": { + "id": "5tecyK1Y5y_0" + }, + "execution_count": 1, + "source": [ + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from scipy.stats import pearsonr, spearmanr, kendalltau\n", + "import sqlite3\n", + "import kagglehub\n" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "/home/ada/Documents/Files/files_mephi/Работы/ИРФМ/.venv/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not\n", + " found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ] + }, + { + "cell_type": "code", + "id": "8f16c784-75c9-44a1-8f9c-6555bdf38a08", + "metadata": { + "id": "-kxc18fy5gMU", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "3db947c3-f4c3-4449-91eb-1a5722ba2deb" + }, + "execution_count": 2, + "source": [ + "# https://www.kaggle.com/datasets/ziya07/financial-transaction-dataset-for-risk-prediction?select=financial_transactions.csv\n", + "dataset_dir = kagglehub.dataset_download(\n", + " \"mchirico/montcoalert\",\n", + " output_dir=\"../data/montcoalert\",\n", + " # force_download=True, # раскомментируйте, если нужно перекачать датасет\n", + ")\n", + "\n", + "print(\"Path to dataset files:\", dataset_dir)\n" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Path to dataset files: ../data/montcoalert\n" + ] + } + ] + }, + { + "cell_type": "code", + "id": "8228deb7-1ef3-4b6a-b16d-795c5b80a10b", + "metadata": { + "id": "jjxxafuj5twF", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 597 + }, + "outputId": "07ffb386-df17-4830-daa5-20e36a68e0c5" + }, + "execution_count": 3, + "source": [ + "import os\n", + "\n", + "df = pd.read_csv(os.path.join(dataset_dir, \"911.csv\"))\n", + "df\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "bcd5db7c-b149-4e05-a1c5-d5df628572d4", + "metadata": { + "id": "JFENAQ6x6M-2", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 424 + }, + "outputId": "69f2c9f2-256e-4184-f6cc-7895b3065557" + }, + "execution_count": 4, + "source": [ + "df = df.drop(columns=['desc', 'zip', 'addr', 'e'])\n", + "df['town'] = df['twp']\n", + "df = df.drop(columns=['twp'])\n", + "df\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "8322a532-24e5-406f-b019-cbf264676259", + "metadata": { + "id": "kjx88uH06yXh", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 241 + }, + "outputId": "b4525822-dc37-4baf-ef06-2429efb9d9b9" + }, + "execution_count": 5, + "source": [ + "df.isnull().sum()\n" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "lat 0\n", + "lng 0\n", + "title 0\n", + "timeStamp 0\n", + "town 293\n", + "dtype: int64\n" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "id": "9ea98f73-7ab5-4b31-a3c7-d4031b65636c", + "metadata": { + "id": "CVwu4mZY7j38", + "outputId": "10c839ff-e230-4429-8ec1-dd1160e0e52a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 241 + } + }, + "execution_count": 6, + "source": [ + "df = df.dropna()\n", + "df.isnull().sum()\n" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "lat 0\n", + "lng 0\n", + "title 0\n", + "timeStamp 0\n", + "town 0\n", + "dtype: int64\n" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "id": "1e0859b5-80a7-45d3-b681-4e3f5e97944f", + "metadata": { + "id": "BVziGRoT74je", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "outputId": "cb96454a-a04b-4ea0-d044-981fdddcc008" + }, + "execution_count": 7, + "source": [ + "df.describe()\n", + "\n", + "# штат Пенсильвания (PA) находится примерно в следующих координатах:\n", + "# Широта (lat): от 39.7° N до 42.5° N\n", + "# Долгота (lng): от -80.5° W до -74.7° W\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "6931cd95-26a2-43da-98f0-90d69e3a7afe", + "metadata": { + "id": "YZyG4DIl8uQE", + "outputId": "0f7ec0ed-aeed-426b-f367-640113d8057d", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + } + }, + "execution_count": 8, + "source": [ + "df_clean = df[\n", + " (df['lat'].between(39.7, 42.5)) &\n", + " (df['lng'].between(-80.5, -74.7))\n", + "]\n", + "df_clean.describe()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "76fd2b05-51a2-420d-a7c4-6a41cf922cfb", + "metadata": { + "id": "9UHU8d6s8597", + "outputId": "f822f2bb-1bcb-44b2-9371-e1bd0480a509", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 424 + } + }, + "execution_count": 9, + "source": [ + "df_grouped = df_clean.groupby('town').size().reset_index(name='count')\n", + "df_grouped = df_grouped[df_grouped['count'] >= 5]\n", + "df_grouped.sort_values(by='count', ascending=False)\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "7204f62a-c6a3-4b60-8a6c-ae055c771276", + "metadata": { + "id": "8XxEu-5I_6oz", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 526 + }, + "outputId": "831e0639-0ffe-4a9d-e309-e6d19745375a" + }, + "execution_count": 10, + "source": [ + "plt.figure(figsize=(8, 6))\n", + "sns.boxplot(y=df_grouped['count'])\n", + "plt.title('Распределение количества вызовов по городам')\n", + "plt.ylabel('Количество вызовов')\n", + "plt.show()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "8e69711f-ea64-4139-bd42-bab3ffe02750", + "metadata": { + "id": "hL-4vAqy_gsN", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "outputId": "50f07e22-0a9c-4b43-87a4-94c18e7601e6" + }, + "execution_count": 11, + "source": [ + "df_grouped.describe()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "2f9d95cf-4449-4b59-918e-7662c1eba9da", + "metadata": { + "id": "lFjeZjICF-C-", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "9c2c08fa-ae97-4b74-f3a4-92148999c037" + }, + "execution_count": 12, + "source": [ + "df_grouped = df_grouped.sort_values(by='count')\n", + "counts = df_grouped['count'].values\n", + "towns = df_grouped['town'].values\n", + "n = len(counts)\n", + "\n", + "total_range = counts.max() - counts.min() # Размах\n", + "gap_threshold = 0.1 * total_range # Порог\n", + "\n", + "# Отсекаем нижние и верхние 10% по порядку наблюдений\n", + "bottom_10_idx = int(n * 0.10)\n", + "top_10_idx = int(n * 0.90)\n", + "\n", + "towns_to_drop = set()\n", + "\n", + "# Проверка нижних 10% (идем от центра к краям)\n", + "# Ищем разрыв между y (индекс i) и соседом ближе к центру (индекс i+1)\n", + "for i in range(bottom_10_idx, -1, -1): # (6, 5, 4, 3, 2, 1, 0)\n", + " if i + 1 < n:\n", + " gap = counts[i+1] - counts[i]\n", + " if gap > gap_threshold:\n", + " # Нашли разрыв. Удаляем всё от y до края\n", + " for j in range(i, -1, -1):\n", + " towns_to_drop.add(towns[j])\n", + " break\n", + "\n", + "# Проверка верхних 10% (идем от центра к краям)\n", + "# Ищем разрыв между y (индекс i) и соседом ближе к центру (индекс i-1)\n", + "for i in range(top_10_idx, n):\n", + " if i - 1 >= 0:\n", + " gap = counts[i] - counts[i-1]\n", + " if gap > gap_threshold:\n", + " # Нашли разрыв. Удаляем всё от y до края\n", + " for j in range(i, n):\n", + " towns_to_drop.add(towns[j])\n", + " break\n", + "\n", + "towns_to_drop\n" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "{'LOWER MERION'}\n" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "id": "401fa973-2d94-440b-ae9a-65b7fa31c5e2", + "metadata": { + "id": "2Nch3p_tHwOf", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "cd95841f-df8d-496f-a39e-a6c4877e067a" + }, + "execution_count": 13, + "source": [ + "df_clean = df_clean[~df_clean['town'].isin(towns_to_drop)]\n", + "\n", + "df_clean.info()\n" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Index: 607557 entries, 0 to 663520\n", + "Data columns (total 5 columns):\n", + " # Column Non-Null Count Dtype\n", + "--- ------ -------------- -----\n", + " 0 lat 607557 non-null float64\n", + " 1 lng 607557 non-null float64\n", + " 2 title 607557 non-null str\n", + " 3 timeStamp 607557 non-null str\n", + " 4 town 607557 non-null str\n", + "dtypes: float64(2), str(3)\n", + "memory usage: 27.8 MB\n" + ] + } + ] + }, + { + "cell_type": "code", + "id": "a71317e7-7d15-4878-88f0-f201c15bf64d", + "metadata": { + "id": "pORHOk6xAe6b", + "outputId": "4151cbca-371f-4cab-d8e1-b91e9712703a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 526 + } + }, + "execution_count": 14, + "source": [ + "df_clean_grouped = df_clean.groupby('town').size().reset_index(name='count')\n", + "plt.figure(figsize=(8, 6))\n", + "sns.boxplot(y=df_clean_grouped['count'])\n", + "plt.title('Распределение количества вызовов по городам')\n", + "plt.ylabel('Количество вызовов')\n", + "plt.show()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "29af2c22-e4b2-401d-80bc-43c812867c4e", + "metadata": { + "id": "xFeEAU27DVWV", + "outputId": "d26f3a5f-6857-45e7-fc33-dce0818419f1", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + } + }, + "execution_count": 15, + "source": [ + "df_clean_grouped.describe()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "6c425257-1b4d-41e8-8c17-1b26ade1bbeb", + "metadata": { + "id": "bace27bc", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "6f3cd65b-abb6-4e9d-c880-c0d3162bb064" + }, + "execution_count": 16, + "source": [ + "df_clean['timeStamp'] = pd.to_datetime(df_clean['timeStamp'])\n", + "df_clean.info()\n" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Index: 607557 entries, 0 to 663520\n", + "Data columns (total 5 columns):\n", + " # Column Non-Null Count Dtype\n", + "--- ------ -------------- -----\n", + " 0 lat 607557 non-null float64\n", + " 1 lng 607557 non-null float64\n", + " 2 title 607557 non-null str\n", + " 3 timeStamp 607557 non-null datetime64[us]\n", + " 4 town 607557 non-null str\n", + "dtypes: datetime64[us](1), float64(2), str(2)\n", + "memory usage: 27.8 MB\n" + ] + } + ] + }, + { + "cell_type": "code", + "id": "cc0a488b-ce3f-4860-ac73-cc086623ad68", + "metadata": { + "id": "9d0eeaf8", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "outputId": "d158ac82-85e5-464c-854b-f1264a32406b" + }, + "execution_count": 17, + "source": [ + "df_clean['hour'] = df_clean['timeStamp'].dt.hour\n", + "df_clean.head()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "36b114ae-9647-4555-84ad-96cc3ca7ace4", + "metadata": { + "id": "91a1edc3", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "outputId": "04806088-c1be-4fae-e382-0240b286ffe5" + }, + "execution_count": 18, + "source": [ + "calls_by_hour = df_clean.groupby('hour').size().reset_index(name='count')\n", + "calls_by_hour.head()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "153435e0-d311-47ce-9934-527aa4918935", + "metadata": { + "id": "0ef31758", + "outputId": "4a0e5512-4174-4037-f749-697c2ca60963", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 607 + } + }, + "execution_count": 19, + "source": [ + "plt.figure(figsize=(10, 6))\n", + "sns.lineplot(x='hour', y='count', data=calls_by_hour, marker='o', label='Calls Count')\n", + "plt.title('Общее количество вызовов 911 по часам суток')\n", + "plt.xlabel('Час суток')\n", + "plt.ylabel('Количество вызовов')\n", + "plt.xticks(calls_by_hour['hour'])\n", + "plt.grid(True, linestyle='--', alpha=0.7)\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "plt.show()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "fe76bee3-d0a0-4dad-9867-ce6c3c711d08", + "metadata": { + "id": "jg4PAmmUQ_9o", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "512127d4-5308-419f-a7dd-cab7399473af" + }, + "execution_count": 20, + "source": [ + "def analyze_correlations(df, col1, col2):\n", + " x = df[col1].values\n", + " y = df[col2].values\n", + "\n", + " results = {\n", + " 'Пирсон': pearsonr(x, y),\n", + " 'Спирмен': spearmanr(x, y),\n", + " 'Кендалл': kendalltau(x, y)\n", + " }\n", + "\n", + " for method, (corr, p_value) in results.items():\n", + " abs_corr = abs(corr)\n", + "\n", + " if method == 'Кендалл':\n", + " thresholds = [0.2, 0.4, 0.6, 0.8]\n", + " else:\n", + " thresholds = [0.3, 0.5, 0.7, 0.9]\n", + "\n", + " if abs_corr < thresholds[0]:\n", + " strength = \"слабая (или отсутствует)\"\n", + " elif abs_corr < thresholds[1]:\n", + " strength = \"умеренная\"\n", + " elif abs_corr < thresholds[2]:\n", + " strength = \"заметная\"\n", + " elif abs_corr < thresholds[3]:\n", + " strength = \"высокая\"\n", + " else:\n", + " strength = \"весьма высокая\"\n", + "\n", + " status = \"Значима\" if p_value < 0.05 else \"НЕ значима\"\n", + " direction = \"положительная\" if corr > 0 else \"отрицательная\"\n", + "\n", + " print(f\"[{method}]\")\n", + " print(f\" Коэффициент: {corr:.4f} ({direction})\")\n", + " print(f\" P-value: {p_value:.4e} ({status})\")\n", + "\n", + " if p_value < 0.05:\n", + " print(f\" Вывод: Наблюдается {strength} связь.\")\n", + " else:\n", + " print(f\" Вывод: Недостаточно данных для подтверждения связи.\")\n", + " print(\"-\" * 40)\n", + "\n", + "analyze_correlations(calls_by_hour, 'hour', 'count')\n" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[Пирсон]\n", + " Коэффициент: 0.5114 (положительная)\n", + " P-value: 1.0638e-02 (Значима)\n", + " Вывод: Наблюдается заметная связь.\n", + "----------------------------------------\n", + "[Спирмен]\n", + " Коэффициент: 0.4991 (положительная)\n", + " P-value: 1.3028e-02 (Значима)\n", + " Вывод: Наблюдается умеренная связь.\n", + "----------------------------------------\n", + "[Кендалл]\n", + " Коэффициент: 0.3623 (положительная)\n", + " P-value: 1.2905e-02 (Значима)\n", + " Вывод: Наблюдается умеренная связь.\n", + "----------------------------------------\n" + ] + } + ] + }, + { + "cell_type": "code", + "id": "8ee4c692-afde-4bad-b7a5-bb0dda83a5aa", + "metadata": {}, + "execution_count": 24, + "source": [ + "conn = sqlite3.connect('../data/calls.db')\n", + "df_clean.to_sql('calls', conn, if_exists='replace', index=False)\n", + "conn.close()\n" + ], + "outputs": [] + }, + { + "cell_type": "code", + "id": "4e3cb3c7-62d9-4d2b-b7d0-5d209464fac2", + "metadata": { + "id": "1e5d291c", + "outputId": "783c15e5-5dce-46e2-c666-1f917a832051", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "execution_count": 25, + "source": [ + "conn = sqlite3.connect('../data/calls.db')\n", + "query = \"SELECT * FROM calls LIMIT 5\"\n", + "curr = conn.cursor()\n", + "\n", + "data = curr.execute(query).fetchall()\n", + "\n", + "conn.close()\n", + "data\n" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "[(40.2978759,\n", + " -75.5812935,\n", + " 'EMS: BACK PAINS/INJURY',\n", + " '2015-12-10 17:10:52',\n", + " 'NEW HANOVER',\n", + " 17),\n", + " (40.2580614,\n", + " -75.2646799,\n", + " 'EMS: DIABETIC EMERGENCY',\n", + " '2015-12-10 17:29:21',\n", + " 'HATFIELD TOWNSHIP',\n", + " 17),\n", + " (40.1211818,\n", + " -75.3519752,\n", + " 'Fire: GAS-ODOR/LEAK',\n", + " '2015-12-10 14:39:21',\n", + " 'NORRISTOWN',\n", + " 14),\n", + " (40.116153,\n", + " -75.343513,\n", + " 'EMS: CARDIAC EMERGENCY',\n", + " '2015-12-10 16:47:36',\n", + " 'NORRISTOWN',\n", + " 16),\n", + " (40.251492,\n", + " -75.6033497,\n", + " 'EMS: DIZZINESS',\n", + " '2015-12-10 16:56:52',\n", + " 'LOWER POTTSGROVE',\n", + " 16)]\n" + ] + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/LR3/cli_client.py b/LR3/cli_client.py new file mode 100644 index 0000000..e8662a1 --- /dev/null +++ b/LR3/cli_client.py @@ -0,0 +1,168 @@ +import json + +import requests + + +BASE_URL = "http://127.0.0.1:5000" + + +def ask_format() -> str: + """Запрашивает желаемый формат ответа и возвращает json или wsdl.""" + raw = input("Формат ответа (json/wsdl) [json]: ").strip().lower() + return raw if raw in {"json", "wsdl"} else "json" + + +def print_response(resp: requests.Response) -> None: + """Печатает HTTP-статус и тело ответа в JSON или сыром виде.""" + print(f"\nHTTP {resp.status_code}") + try: + print(json.dumps(resp.json(), ensure_ascii=False, indent=2)) + except ValueError: + print(resp.text) + + +def input_payload() -> dict: + """Собирает поля объекта из консоли и возвращает payload для POST/PUT.""" + print("Оставьте поле пустым, если не хотите его передавать") + payload = {} + + lat = input("lat: ").strip() + if lat: + payload["lat"] = float(lat) + + lng = input("lng: ").strip() + if lng: + payload["lng"] = float(lng) + + title = input("title: ").strip() + if title: + payload["title"] = title + + timestamp = input("timeStamp (YYYY-MM-DD HH:MM:SS): ").strip() + if timestamp: + payload["timeStamp"] = timestamp + + town = input("town: ").strip() + if town: + payload["town"] = town + + hour = input("hour (0-23): ").strip() + if hour: + payload["hour"] = int(hour) + + return payload + + +def list_calls() -> None: + """Запрашивает и выводит пагинированный список объектов calls.""" + page = input("page [1]: ").strip() or "1" + per_page = input("per_page [20]: ").strip() or "20" + fmt = ask_format() + + resp = requests.get( + f"{BASE_URL}/api/calls", + params={"page": page, "per_page": per_page, "format": fmt}, + timeout=30, + ) + print_response(resp) + + +def get_call() -> None: + """Запрашивает и выводит один объект calls по ID.""" + call_id = input("ID объекта: ").strip() + fmt = ask_format() + resp = requests.get( + f"{BASE_URL}/api/calls/{call_id}", params={"format": fmt}, timeout=30 + ) + print_response(resp) + + +def create_call() -> None: + """Создает новый объект calls из введенных пользователем данных.""" + payload = input_payload() + fmt = ask_format() + resp = requests.post( + f"{BASE_URL}/api/calls", params={"format": fmt}, json=payload, timeout=30 + ) + print_response(resp) + + +def update_call() -> None: + """Обновляет существующий объект calls по ID введенными полями.""" + call_id = input("ID объекта: ").strip() + payload = input_payload() + fmt = ask_format() + resp = requests.put( + f"{BASE_URL}/api/calls/{call_id}", + params={"format": fmt}, + json=payload, + timeout=30, + ) + print_response(resp) + + +def delete_call() -> None: + """Удаляет объект calls по ID и выводит результат операции.""" + call_id = input("ID объекта: ").strip() + fmt = ask_format() + resp = requests.delete( + f"{BASE_URL}/api/calls/{call_id}", params={"format": fmt}, timeout=30 + ) + print_response(resp) + + +def stats_by_hour() -> None: + """Запрашивает статистику количества обращений по выбранному часу.""" + hour = input("Час (0-23): ").strip() + fmt = ask_format() + resp = requests.get( + f"{BASE_URL}/api/stats/hour/{hour}", params={"format": fmt}, timeout=30 + ) + print_response(resp) + + +def show_wsdl() -> None: + """Получает и выводит WSDL-описание API.""" + resp = requests.get(f"{BASE_URL}/api/wsdl", timeout=30) + print_response(resp) + + +def menu() -> None: + """Запускает интерактивное меню CLI и обрабатывает выбор пользователя.""" + actions = { + "1": ("Список объектов", list_calls), + "2": ("Один объект по ID", get_call), + "3": ("Добавить объект", create_call), + "4": ("Изменить объект", update_call), + "5": ("Удалить объект", delete_call), + "6": ("Общее число обращений в час", stats_by_hour), + "7": ("Показать WSDL", show_wsdl), + "0": ("Выход", None), + } + + while True: + print("\n=== CLI для API LR3 ===") + for key, (name, _) in actions.items(): + print(f"{key}. {name}") + + choice = input("Выберите метод: ").strip() + action = actions.get(choice) + + if not action: + print("Неизвестный пункт меню") + continue + + if choice == "0": + print("Завершение работы") + break + + try: + action[1]() + except requests.RequestException as exc: + print(f"Ошибка запроса: {exc}") + except ValueError as exc: + print(f"Ошибка ввода: {exc}") + + +if __name__ == "__main__": + menu() diff --git a/LR3/irfm_lr3.py b/LR3/irfm_lr3.py new file mode 100644 index 0000000..2c71a91 --- /dev/null +++ b/LR3/irfm_lr3.py @@ -0,0 +1,300 @@ +import sqlite3 +from pathlib import Path +from xml.etree.ElementTree import Element, SubElement, tostring + +from flask import Flask, Response, jsonify, request + +BASE_DIR = Path(__file__).resolve().parent.parent +DB_PATH = BASE_DIR / "data" / "calls.db" + +app = Flask(__name__) + + +ALLOWED_FIELDS = ("lat", "lng", "title", "timeStamp", "town", "hour") + + +def parse_positive_int(raw_value: str, field_name: str) -> tuple[int | None, str | None]: + """Преобразует строку в положительное целое число или возвращает текст ошибки.""" + try: + value = int(raw_value) + except (TypeError, ValueError): + return None, f"{field_name} должен быть целым числом" + + if value <= 0: + return None, f"{field_name} должен быть положительным целым числом" + + return value, None + + +def get_db_connection() -> sqlite3.Connection: + """Создает и возвращает подключение к SQLite с доступом к колонкам по имени.""" + conn = sqlite3.connect(DB_PATH) + conn.row_factory = sqlite3.Row + return conn + + +def wants_wsdl() -> bool: + """Проверяет, запросил ли клиент XML/WSDL-формат через query-параметр format.""" + return request.args.get("format", "json").lower() == "wsdl" + + +def dict_to_xml(payload: dict) -> bytes: + """Преобразует словарь (включая вложенные dict/list) в XML-документ.""" + root = Element("response") + + for key, value in payload.items(): + if isinstance(value, dict): + obj_node = SubElement(root, str(key)) + for child_key, child_value in value.items(): + child = SubElement(obj_node, str(child_key)) + child.text = "" if child_value is None else str(child_value) + continue + + if isinstance(value, list): + list_node = SubElement(root, str(key)) + for item in value: + item_node = SubElement(list_node, "item") + if isinstance(item, dict): + for item_key, item_value in item.items(): + child = SubElement(item_node, str(item_key)) + child.text = "" if item_value is None else str(item_value) + else: + item_node.text = "" if item is None else str(item) + continue + + node = SubElement(root, str(key)) + node.text = "" if value is None else str(value) + + return tostring(root, encoding="utf-8", xml_declaration=True) + + +def format_response(payload: dict, status: int = 200) -> Response: + """Формирует ответ API: XML при format=wsdl, иначе JSON.""" + if wants_wsdl(): + xml_payload = dict_to_xml(payload) + return Response(xml_payload, status=status, mimetype="application/wsdl+xml") + resp = jsonify(payload) + resp.status_code = status + return resp + + +def fetch_call_by_id(conn: sqlite3.Connection, call_id: int): + """Возвращает запись calls по rowid или None, если запись не найдена.""" + query = """ + SELECT rowid AS id, lat, lng, title, timeStamp, town, hour + FROM calls + WHERE rowid = ? + """ + return conn.execute(query, (call_id,)).fetchone() + + +def parse_payload() -> tuple[dict, str | None]: + """Читает JSON-тело запроса, валидирует и оставляет только разрешенные поля.""" + if not request.is_json: + return {}, "Body должен быть в формате JSON" + + payload = request.get_json(silent=True) + if not isinstance(payload, dict): + return {}, "Некорректный JSON-объект" + + filtered = {k: payload[k] for k in ALLOWED_FIELDS if k in payload} + if not filtered: + return {}, "Не переданы поля для записи" + + return filtered, None + + +@app.get("/api/calls") +def list_calls() -> Response: + """Возвращает пагинированный список объектов calls.""" + page = max(request.args.get("page", default=1, type=int), 1) + per_page = min(max(request.args.get("per_page", default=20, type=int), 1), 100) + offset = (page - 1) * per_page + + conn = get_db_connection() + total = conn.execute("SELECT COUNT(*) AS total FROM calls").fetchone()["total"] + rows = conn.execute( + """ + SELECT rowid AS id, lat, lng, title, timeStamp, town, hour + FROM calls + ORDER BY rowid + LIMIT ? OFFSET ? + """, + (per_page, offset), + ).fetchall() + conn.close() + + payload = { + "page": page, + "per_page": per_page, + "total": total, + "items": [dict(row) for row in rows], + } + return format_response(payload) + + +@app.get("/api/calls/") +def get_call(call_id: int) -> Response: + """Возвращает один объект calls по его идентификатору.""" + if call_id <= 0: + return format_response({"error": "id должен быть положительным целым числом"}, status=400) + + conn = get_db_connection() + row = fetch_call_by_id(conn, call_id) + conn.close() + + if row is None: + return format_response({"error": "Объект не найден"}, status=404) + + return format_response({"item": dict(row)}) + + +@app.post("/api/calls") +def create_call() -> Response: + """Создает новый объект calls из данных JSON-тела запроса.""" + payload, error = parse_payload() + if error: + return format_response({"error": error}, status=400) + + columns = ", ".join(payload.keys()) + placeholders = ", ".join(["?"] * len(payload)) + + conn = get_db_connection() + cur = conn.execute( + f"INSERT INTO calls ({columns}) VALUES ({placeholders})", + tuple(payload.values()), + ) + conn.commit() + created_id = cur.lastrowid + if created_id is None: + conn.close() + return format_response({"error": "Не удалось создать объект"}, status=500) + + created_row = fetch_call_by_id(conn, int(created_id)) + conn.close() + if created_row is None: + return format_response( + {"error": "Не удалось получить созданный объект"}, status=500 + ) + + return format_response({"item": dict(created_row)}, status=201) + + +@app.put("/api/calls/") +def update_call(call_id: int) -> Response: + """Обновляет существующий объект calls по id частичным набором полей.""" + if call_id <= 0: + return format_response({"error": "id должен быть положительным целым числом"}, status=400) + + payload, error = parse_payload() + if error: + return format_response({"error": error}, status=400) + + assignments = ", ".join([f"{key} = ?" for key in payload.keys()]) + values = tuple(payload.values()) + (call_id,) + + conn = get_db_connection() + exists = fetch_call_by_id(conn, call_id) + if exists is None: + conn.close() + return format_response({"error": "Объект не найден"}, status=404) + + conn.execute(f"UPDATE calls SET {assignments} WHERE rowid = ?", values) + conn.commit() + updated_row = fetch_call_by_id(conn, call_id) + conn.close() + if updated_row is None: + return format_response( + {"error": "Не удалось получить обновленный объект"}, status=500 + ) + + return format_response({"item": dict(updated_row)}) + + +@app.delete("/api/calls/") +def delete_call(call_id: int) -> Response: + """Удаляет объект calls по id и возвращает статус операции.""" + if call_id <= 0: + return format_response({"error": "id должен быть положительным целым числом"}, status=400) + + conn = get_db_connection() + exists = fetch_call_by_id(conn, call_id) + if exists is None: + conn.close() + return format_response({"error": "Объект не найден"}, status=404) + + conn.execute("DELETE FROM calls WHERE rowid = ?", (call_id,)) + conn.commit() + conn.close() + + return format_response({"message": f"Объект {call_id} удален"}) + + +@app.get("/api/stats/hour/") +def stats_by_hour(hour: int) -> Response: + """Возвращает количество обращений в таблице calls для заданного часа (0-23).""" + if hour < 0 or hour > 23: + return format_response({"error": "Час должен быть от 0 до 23"}, status=400) + + conn = get_db_connection() + total = conn.execute( + "SELECT COUNT(*) AS total FROM calls WHERE hour = ?", (hour,) + ).fetchone()["total"] + conn.close() + + payload = { + "hour": hour, + "total_calls": total, + } + return format_response(payload) + + +@app.route("/api/calls/", methods=["GET", "PUT", "DELETE"]) +def invalid_call_id(call_id: str) -> Response: + """Возвращает понятную ошибку, если id в URL не является корректным числом.""" + _, error = parse_positive_int(call_id, "id") + if error: + return format_response({"error": error}, status=400) + return format_response({"error": "Некорректный запрос"}, status=400) + + +@app.get("/api/stats/hour/") +def invalid_hour(hour: str) -> Response: + """Возвращает понятную ошибку, если hour в URL задан некорректно.""" + try: + parsed_hour = int(hour) + except (TypeError, ValueError): + return format_response({"error": "Час должен быть целым числом"}, status=400) + + if parsed_hour < 0 or parsed_hour > 23: + return format_response({"error": "Час должен быть от 0 до 23"}, status=400) + + return format_response({"error": "Некорректный запрос"}, status=400) + + +@app.get("/api/wsdl") +def wsdl_description() -> Response: + """Отдает статическое WSDL-описание доступных операций сервиса.""" + wsdl = """ + + + REST API для сущности calls из LR2. + + + + + + + + + + +""" + return Response(wsdl, mimetype="application/wsdl+xml") + + +if __name__ == "__main__": + app.run(debug=True) diff --git a/LR3/task3.pdf b/LR3/task3.pdf new file mode 100644 index 0000000..948a58a Binary files /dev/null and b/LR3/task3.pdf differ diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..b0684b9 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,17 @@ +[project] +name = "irfm" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "flask>=3.1.2", + "jupyterlab>=4.5.6", + "kagglehub>=1.0.0", + "matplotlib>=3.10.8", + "numpy>=2.4.4", + "pandas>=3.0.2", + "requests>=2.32.5", + "scipy>=1.17.1", + "seaborn>=0.13.2", +]