напиши код для блокнота на виндовс простой
Créé le : 12 juin 2025
Créé le : 12 juin 2025
pythonimport matplotlib.pyplot as plt import numpy as np import matplotlib.image as mpimg img = mpimg.imread('/mnt/data/5357245715304281725.jpg') plt.imshow(img) plt.axis('off') (-0.5, 750.5, 795.5, -0.5)
pythonplt.figure(figsize=(4,4)) plt.imshow(img[150:400,0:500]) plt.axis('off') (-0.5, 499.5, 249.5, -0.5)
pythonplt.figure(figsize=(4,4)) plt.imshow(img[390:600,0:550]) plt.axis('off') (-0.5, 549.5, 209.5, -0.5)
pythonplt.figure(figsize=(4,4)) plt.imshow(img[250:350,0:550]) plt.axis('off') (-0.5, 549.5, 99.5, -0.5)
pythonplt.figure(figsize=(4,4)) plt.imshow(img[300:450,0:550]) plt.axis('off') (-0.5, 549.5, 149.5, -0.5)
pythonplt.figure(figsize=(4,4)) plt.imshow(img[100:150,0:550]) plt.axis('off') (-0.5, 549.5, 49.5, -0.5)
python# Crop lower part of task 2 lines maybe after 5/3. plt.figure(figsize=(4,4)) plt.imshow(img[200:300,0:550]) plt.axis('off') (-0.5, 549.5, 99.5, -0.5)
Ниже — простой «каркас» .js-файла, который можно вставить прямо в обычный Блокнот (Notepad) на Windows, сохранить как tasks.js (важно выбрать «Все файлы» и обязательно расширение .js), а затем запустить, например, через Node.js или скопировать в консоль браузера.
javascript/************************* * Задания по JavaScript * *************************/ /* 1. Переменные разных типов */ let str = "Привет"; let num = 123; let flag = true; let txt = "true"; console.log("1) typeof:", typeof str, typeof num, typeof flag, typeof txt); /* 2. Математические операторы */ let a1 = 5 + 3; let a2 = 5 - 3; let a3 = 5 * 3; let a4 = 5 / 3; let a5 = 5 ** 3; // 5 в 3-й степени (по желанию, можно Math.pow) console.log("2) a1-a5:", a1, a2, a3, a4, a5); /* 3. Разные операции со строками и числами */ let a6 = 5 % 3; let a7 = 3 % 5; let a8 = 5 + "3"; let a9 = "5" - 3; let a10 = 75 + "кг"; console.log("3) a6-a10:", a6, a7, a8, a9, a10); /* 4. Площадь прямоугольника (см²) */ let height = 23; // см let width = 10; // см let s = height * width; console.log("4) S прямоугольника =", s, "см²"); /* 5. Объём цилиндра (м³) */ let heightC = 10; // м let dC = 4; // м let v = Math.PI * (dC / 2) ** 2 * heightC; // π·r²·h console.log("5) V цилиндра =", v.toFixed(2), "м³"); /* 6. Гипотенуза прямоугольного треугольника */ let n = 3; let m = 4; let k = Math.hypot(n, m); // также можно Math.sqrt(n**2 + m**2) console.log("6) k (гипотенуза) =", k); /* 7. 12-й элемент ряда Фибоначчи */ let nFib = 12; let f1 = 1, f2 = 1; for (let i = 3; i <= nFib; i++) { [f1, f2] = [f2, f1 + f2]; } let e12 = nFib < 3 ? 1 : f2; console.log(`7) ${nFib}-й элемент Фибоначчи =`, e12); /* 8. Переплата по ипотеке (простые проценты) */ let S = 2_000_000; // руб let p = 10; // % let years = 5; let perepl = S * (p / 100) * years; console.log("8) Переплата по кредиту =", perepl, "руб");
Как запустить
tasks.js
.или скопируйте содержимое файла в консоль браузера.bashnode tasks.js
Каждый пункт выводит результат сразу в консоль — удобно проверять, что всё работает корректно.
(пример – ваши 7 наблюдений: «стаж семейной жизни (лет)» × «возраст (лет)»)
№ | B – Стаж | C – Возраст |
---|---|---|
1 | 20 | 45 |
2 | 2 | 23 |
3 | 30 | 54 |
4 | 15 | 48 |
5 | 4 | 28 |
6 | 24 | 50 |
7 | 13 | 33 |
Поместите таблицу в диапазон B2:C8 (номера строк – в A-столбце только для удобства).
excel=КОРЕНЬ( ($B$2-$B$3)^2 + ($C$2-$C$3)^2 )
Подсказка: используйте смешанные ссылки (знаки $) или функцию СМЕЩ/INDEX, чтобы она автоматически подтягивала координаты для каждой пары.
excel=СРЗНАЧ(…)
Если нужно удобнее – установите бесплатный ад-ин Real Statistics или XLMiner Analysis ToolPak: там есть кнопка Cluster Analysis, задаёте число кластеров и диапазон данных.
Что это | Зачем |
---|---|
Факторный анализ (FA) – статистический метод, «сворачивающий» множество наблюдаемых переменных в меньшее число скрытых факторов. | 1. Уменьшение размерности (economy). <br>2. Выявление скрытой структуры: какие переменные «ходят» вместе. <br>3. Очистка данных перед регрессиями/кластеризацией. <br>4. Создание композитных индексов (баллов). |
Этап | Действия (Excel-реализация) |
---|---|
1. Подготовка данных | – Соберите ≥ 5–10 переменных на ≥ 100 наблюдений. <br>– Стандартизируйте: Z = (X – среднее)/σ . |
2. Проверка пригодности | – KMO ≥ 0,6, тест Бартлетта p < 0,05 (Real Statistics → Factor Analysis даёт сразу). |
3. Извлечение факторов | – Метод главных компонент (Principal components) или Maximum Likelihood. <br>– Сколько брать? Критерий Кайзера (λ>1) или граф «локтя» (scree plot). |
4. Вращение | – Varimax (ортогональная) или Promax (наклонная) для большей интерпретируемости. |
5. Интерпретация | – Смотрите матрицу факторных нагрузок > 0,4. Дайте фактору имя («финансовая стабильность», «удовлетворённость» …). |
6. Расчёт факторных баллов | – =MMULT(матрица_Z ; матрица_коэфф) или встроенная функция в ад-ине. |
7. Использование | – Вставьте факторные баллы в регрессию, кластеризацию, визуализацию и т.п. |
Важно: сам Excel без надстроек не умеет считать собственные значения/векторы «из коробки», поэтому либо:
• ставите Real Statistics (бесплатно) → Add-Ins ▸ Real Statistics ▸ Multivariate ▸ Factor Analysis,
• или извлекаете собственные значения через функцию ПОИСКПОЗ/LINEST (сложнее).
=КОРЕНЬ((x2-x1)^2 + (y2-y1)^2)
=SQRT( ($B2-$B$10)^2 + ($C2-$C$10)^2 )
, где B10:C10 – координаты центра.Теперь у вас есть:
Если потребуется пример файла или помощь с формулами / надстройками – дайте знать!
Ниже — готовый пример, который можно набрать в обычном Блокноте на Windows и сохранить как два файла в папке C:\app\
(название и место могут быть любыми).
Он повторяет приём «внешний .js-файл + HTML-страница», показанный в учебном PDF на странице 1 .
index.html
html<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Кластеры: пример 10-й класс</title> </head> <body> <h2>Кластеризация 7 пар (стаж × возраст)</h2> <p>Откройте «Инструменты разработчика → Console», чтобы увидеть расчёты.</p> <!-- Подключаем внешний скрипт --> <script src="main.js"></script> </body> </html>
main.js
javascript/***************************************************** * Пример для 10-го класса информатики. * * Демонстрация: * * • массив точек (стаж семейной жизни, возраст) * * • функция Евклидова расстояния * * • простейший поиск ближайшей пары (кластер) * *****************************************************/ // ─── 1. Исходные данные ──────────────────────────── const couples = [ { id: 1, x: 20, y: 45 }, { id: 2, x: 2, y: 23 }, { id: 3, x: 30, y: 54 }, { id: 4, x: 15, y: 48 }, { id: 5, x: 4, y: 28 }, { id: 6, x: 24, y: 50 }, { id: 7, x: 13, y: 33 } ]; // ─── 2. Евклидово расстояние d = √((x₂–x₁)² + (y₂–y₁)²) ── function dist(p, q) { return Math.sqrt((q.x - p.x) ** 2 + (q.y - p.y) ** 2); } // ─── 3. Строим «матрицу расстояний» и ищем минимальное ── let min = { i: null, j: null, d: Number.POSITIVE_INFINITY }; for (let i = 0; i < couples.length - 1; i++) { for (let j = i + 1; j < couples.length; j++) { const d = dist(couples[i], couples[j]); console.log(`D(${couples[i].id},${couples[j].id}) = ${d.toFixed(2)}`); if (d < min.d) min = { i: couples[i].id, j: couples[j].id, d }; } } // ─── 4. Вывод ближайшей пары (первый «кластер») ───────── console.log( `\nБлиже всего объекты ${min.i} и ${min.j}: расстояние = ${min.d.toFixed(2)}` ); // ─── 5. Дополнительно: интерактивный расчёт двух точек ─ if (confirm("Хотите вычислить расстояние любых двух точек?")) { const x1 = +prompt("x1 ="); const y1 = +prompt("y1 ="); const x2 = +prompt("x2 ="); const y2 = +prompt("y2 ="); const d = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); alert(`Расстояние = ${d.toFixed(2)}`); }
C:\app\
.index.html
→ Файл ▸ Сохранить как...index.html
, Тип: «Все файлы», Кодировка: UTF-8.main.js
рядом, в подпапке js
или прямо в той же папке (важно, чтобы путь в <script src="main.js">
совпал).index.html
.√((x₂−x₁)²+(y₂−y₁)²)
выполнится автоматически.Такой минимальный пример демонстрирует:
- подключение внешнего скрипта;
- использование формулы Евклидова расстояния в коде;
- базовые приёмы кластеризации (поиск самой близкой пары) — достаточно для практики в 10-м классе.
При необходимости усложнить (k-means, факторные баллы, автоматический пересчёт центров и т. п.) — дайте знать!
Кластеризация — это группировка наблюдений (строк таблицы) так, чтобы внутри группы объекты были «похожи», а между группами — как можно более различны. В прикладных задачах Excel чаще всего используют:
Метод | Когда удобно | Ключевой результат |
---|---|---|
Иерархическая кластеризация (Nearest / Ward, дендрограмма) | Когда k (число кластеров) заранее неизвестно | Дерево-дендрограмма и матрица расстояний |
k-Means (k-средних) | Когда нужно заранее заданное k и много строк | Координаты центров и принадлежность каждой строки к кластеру |
Пример возьмём из вашего рисунка «Стаж семейной жизни – Возраст» (7 строк).
A | B – Стаж (x) | C – Возраст (y) |
---|---|---|
1 | 20 | 45 |
2 | 2 | 23 |
… | … | … |
excel=КОРЕНЬ( ($B3-$B4)^2 + ($C3-$C4)^2 )
=СРЗНАЧ(…)
) в отдельную строку и пересчитайте новую матрицу между:
Такие пять шагов подробно разобраны в практическом занятии №3 (слайды 13-18) .
excel=КОРЕНЬ( ($B3-$H$2)^2 + ($C3-$I$2)^2 )
Правее аналогичная формула для второго центра.
3. В столбце «Метка» поставьте:
excel=ЕСЛИ(J3<K3;1;2)
excel=СРЗНАЧ(ЕСЛИ($L$3:$L$9=1;$B$3:$B$9))
(ввести как формулу массива / динамический диапазон).
5. Нажимайте F9 (пересчёт) или включите автоматический пересчёт, пока метки не перестанут меняться.
Надстройка | Где взять | Что делает |
---|---|---|
Real Statistics Resource Pack (бесплатно) | https://real-statistics.com/free-download/ | Меню Multivariate → Cluster Analysis: иерархическая (7 методов) и k-Means, автоматически строит дендрограмму и таблицы центров turn0search1 |
XLSTAT / Lumivero (30-дн. демо) | вкладка XLSTAT → Clustering | Диалог k-means / Hierarchical; строит графики «silhouette», дендрограмму; можно зафиксировать «seed», чтобы результаты были воспроизводимы turn0search0 |
Solver (встроенный) | Данные → Анализ → Поиск решения | Можно сформулировать k-Means как задачу оптимизации «минимизировать сумму квадратов до центров»; подойдёт для малых наборов, но требует ручного описания ограничений. |
=(X-СРЗНАЧ(X))/СТАНДОТКЛОН.П(X)
) — тогда вклад каждого столбца в дистанцию будет одинаков.from sklearn.cluster import KMeans
прямо в ячейке PY, но это уже вне рамок школьного курса.RealStats.xlam
, потом Multivariate → K-Means.Если по ходу появятся вопросы по формулам, настройке надстроек или отрисовке дендрограмм — пишите!
Ниже — полный текст макроса VBA, который автоматизирует все шаги «Практического занятия № 3 – Кластерный анализ» из вашего метод-файла (слайды «Шаг 1» → «Шаг 4») .
Код можно набрать в обычном Блокноте, сохранить как Cluster.bas (тип «Все файлы», UTF-8), а затем импортировать в Excel (Разработчик → Visual Basic → Файл → Импорт файла).
vb'===== Cluster.bas ============================================= Option Explicit '--------------------------------------------------------------- ' Кластеризация 2-мерных точек (и-ерархическая, single-link) ' Автор: для практического занятия 10-го класса информатики '--------------------------------------------------------------- '--- ПУБЛИЧНЫЙ МАКРОС: выполнить этот Sub ----------------------- Sub BuildClusters() Const SRC_SHEET$ = "Sheet1" 'лист с данными Const OUT1_SHEET$ = "Distances" 'лист для матрицы расстояний Const OUT2_SHEET$ = "Steps" 'лист-лог слияния кластеров Dim wsSrc As Worksheet, wsDist As Worksheet, wsLog As Worksheet Dim n&, i&, j&, step& Dim x(), y(), lbl() 'массивы координат и меток кластера Dim minI&, minJ&, minD#, d# '----- 0. Подготовка ---------------------------------------- Set wsSrc = Worksheets(SRC_SHEET) n = wsSrc.Cells(wsSrc.Rows.Count, "B").End(xlUp).Row - 1 'строк данных If n < 2 Then MsgBox "Недостаточно точек!": Exit Sub ReDim x(1 To n): ReDim y(1 To n): ReDim lbl(1 To n) For i = 1 To n x(i) = wsSrc.Cells(i + 1, "B") y(i) = wsSrc.Cells(i + 1, "C") lbl(i) = i 'первоначально: каждый сам кластер Next i Application.ScreenUpdating = False Set wsDist = PrepareSheet(OUT1_SHEET) Set wsLog = PrepareSheet(OUT2_SHEET) wsLog.Range("A1:D1").Value = Array("Шаг", "Кластер 1", "Кластер 2", "Dmin") '----- 1. Цикл слияния кластеров --------------------------- step = 0 Do step = step + 1 minD = 1E+99 '1.1 ищем наименьшее расстояние между РАЗНЫМИ кластерами For i = 1 To n - 1 For j = i + 1 To n If lbl(i) <> lbl(j) Then d = Dist(x(i), y(i), x(j), y(j)) If d < minD Then minD = d: minI = lbl(i): minJ = lbl(j) End If End If Next j Next i '1.2 логируем и окрашиваем минимальное расстояние wsLog.Cells(step + 1, 1).Resize(1, 4).Value = _ Array(step, minI, minJ, Round(minD, 5)) '1.3 сливаем два кластера: все j-метки → i-метки For i = 1 To n If lbl(i) = minJ Then lbl(i) = minI Next i '1.4 рисуем актуальную матрицу расстояний (по желанию) Call PrintMatrix(wsDist, x, y, lbl, step) '1.5 условие остановки: остался 1 кластер? If UniqueCount(lbl) = 1 Then Exit Do Loop Application.ScreenUpdating = True MsgBox "Кластеры построены — смотрите листы """ & OUT1_SHEET & """ и """ & OUT2_SHEET & """!" End Sub '--- Евклидово расстояние √((x2-x1)²+(y2-y1)²) ----------------- Private Function Dist#(x1#, y1#, x2#, y2#) Dist = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2) End Function '--- Подсчёт разных элементов в массиве меток ------------------- Private Function UniqueCount&(a) Dim dict As Object, i& Set dict = CreateObject("Scripting.Dictionary") For i = LBound(a) To UBound(a): dict(a(i)) = 1: Next i UniqueCount = dict.Count End Function '--- Создать / очистить рабочий лист ---------------------------- Private Function PrepareSheet(name$) As Worksheet On Error Resume Next: Set PrepareSheet = Worksheets(name) If PrepareSheet Is Nothing Then Set PrepareSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count)) PrepareSheet.Name = name End If PrepareSheet.Cells.Clear End Function '--- Вывод матрицы расстояний (с учётом актуальных меток) ------- Private Sub PrintMatrix(ws As Worksheet, x, y, lbl, step) Dim n&, i&, j&, row0& n = UBound(x): row0 = (step - 1) * (n + 3) + 1 'чтобы матрицы шли «лестницей» 'заголовки For i = 1 To n ws.Cells(row0 + 1, i + 1).Value = i ws.Cells(row0 + i + 1, 1).Value = i Next i 'данные For i = 1 To n For j = 1 To n ws.Cells(row0 + i + 1, j + 1).Value = _ IIf(lbl(i) = lbl(j), "", _ Round(Dist(x(i), y(i), x(j), y(j)), 3)) Next j Next i End Sub '================================================================
Готовим данные
Лист Sheet1
textA B (стаж) C (возраст) 1 20 45 2 2 23 3 30 54 4 15 48 5 4 28 6 24 50 7 13 33
Импорт макроса
Разработчик → Visual Basic → Файл → Импорт файла → выберите Cluster.bas.
Запуск
Alt + F8 → выбрать BuildClusters
→ Выполнить.
Результат
Лист “Distances” — пошаговые матрицы расстояний;
Лист “Steps” — журнал слияний (какие кластеры объединились и минимальная D).
Финальным «кластером» будет группа, описанная в примере на слайде «Шаг 4» методички .
Шаг в коде | Соответствие методичке |
---|---|
Расчёт пары D(i,j) | формула =КОРЕНЬ((x2-x1)^2+(y2-y1)^2) — «Шаг 1» |
Поиск минимальной D | выбор ближайших объектов — «Шаг 2, 3...» |
Переназначение меток | «объединяем эти данные в группу» |
Итерации до единого кластера | продолжаем, пока не останется 1 кластер («Шаг 4») |
При желании можно остановить процесс раньше (например, после 2 кластеров) — добавьте условие If UniqueCount(lbl)=2 Then Exit Do
.
Теперь всё задание выполняется одним запуском: Евклидовы расстояния → матрицы → логи объединений → итоговые кластеры.
notepad
).index.html
(тип файлов – «Все файлы», кодировка UTF-8).√((x₂-x₁)²+(y₂-y₁)²)
(шаг 1 методички),При желании замените массив
pts
на свои данные (координаты х- и у-переменных).
html<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Простейший кластерный анализ — 10 класс</title> </head> <body> <h2>Кластеры (single-link) для 2-D точек</h2> <p>Откройте консоль разработчика (F12) и смотрите шаги алгоритма.</p> <script> /* -------------------------------------------------------- Школьная демонстрация иерархической кластеризации («ближайшего соседа», single-link) из методички: 1) строим матрицу евклидовых расстояний 2) находим минимальную D -> объединяем 3) повторяем, пока не останется 1 кластер -------------------------------------------------------- */ // ---------- 1. Данные (x, y) ---------- const pts = [ {id: 1, x: 20, y: 45}, {id: 2, x: 2, y: 23}, {id: 3, x: 30, y: 54}, {id: 4, x: 15, y: 48}, {id: 5, x: 4, y: 28} ]; // ---------- 2. Евклидово расстояние ---------- function dist(a, b) { return Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2); } // ---------- 3. Печать матрицы расстояний ---------- function printMatrix(objs) { let out = ['Матрица расстояний:']; for (let i = 0; i < objs.length; i++) { let row = []; for (let j = 0; j < objs.length; j++) { row.push(i === j ? '--' : dist(objs[i], objs[j]).toFixed(2)); } out.push(row.join('\t')); } console.log(out.join('\n')); } // ---------- 4. Single-link кластеризация ---------- function singleLink(data) { let clusters = data.map(p => [p]); // каждая точка — отдельный кластер let step = 1; while (clusters.length > 1) { let minD = Infinity, c1 = 0, c2 = 1; // ищем ближайшие кластеры (минимальная пара точек) for (let i = 0; i < clusters.length - 1; i++) { for (let j = i + 1; j < clusters.length; j++) { clusters[i].forEach(p => clusters[j].forEach(q => { let d = dist(p, q); if (d < minD) { minD = d; c1 = i; c2 = j; } }) ); } } console.log(`Шаг ${step}: объединяем кластеры ${c1 + 1} и ${c2 + 1}, d = ${minD.toFixed(2)}`); clusters[c1] = clusters[c1].concat(clusters[c2]); // слияние clusters.splice(c2, 1); // убираем лишний step++; } } // ---------- 5. Запуск ---------- console.clear(); console.log('Исходные точки:', pts.map(p => `[${p.id}](${p.x},${p.y})`).join(' ')); printMatrix(pts); singleLink(pts); console.log('Готово!'); </script> </body> </html>
Что делает скрипт
dmin
и слияние — отображает каждое объединение (Шаг 2 → Шаг 4).Таким образом всё «по заданию» реализовано одной простой страницей — можно редактировать прямо в Блокноте, без установки надстроек или макросов.