<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AStatistics</id>
	<title>Модуль:Statistics - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AStatistics"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Statistics&amp;action=history"/>
	<updated>2026-04-30T22:20:59Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Statistics&amp;diff=35758&amp;oldid=prev</id>
		<title>Patarakin: Новая страница: «-- Модуль для статистических расчетов -- Использование: {{#invoke:Statistics|functionName|arg1|arg2|...}}  local stats = {}  -- Функция для разбора CSV-строки local function parseCSV(str)     local numbers = {}     for num in string.gmatch(str, &quot;[^,]+&quot;) do         table.insert(numbers, tonumber(num))     end     return numbers end  -- Функция для расчета среднего ар...»</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Statistics&amp;diff=35758&amp;oldid=prev"/>
		<updated>2025-11-26T18:45:34Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «-- Модуль для статистических расчетов -- Использование: {{#invoke:Statistics|functionName|arg1|arg2|...}}  local stats = {}  -- Функция для разбора CSV-строки local function parseCSV(str)     local numbers = {}     for num in string.gmatch(str, &amp;quot;[^,]+&amp;quot;) do         table.insert(numbers, tonumber(num))     end     return numbers end  -- Функция для расчета среднего ар...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Модуль для статистических расчетов&lt;br /&gt;
-- Использование: {{#invoke:Statistics|functionName|arg1|arg2|...}}&lt;br /&gt;
&lt;br /&gt;
local stats = {}&lt;br /&gt;
&lt;br /&gt;
-- Функция для разбора CSV-строки&lt;br /&gt;
local function parseCSV(str)&lt;br /&gt;
    local numbers = {}&lt;br /&gt;
    for num in string.gmatch(str, &amp;quot;[^,]+&amp;quot;) do&lt;br /&gt;
        table.insert(numbers, tonumber(num))&lt;br /&gt;
    end&lt;br /&gt;
    return numbers&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для расчета среднего арифметического (mean)&lt;br /&gt;
function stats.mean(frame)&lt;br /&gt;
    local data = parseCSV(frame.args[1])&lt;br /&gt;
    if #data == 0 then return &amp;quot;Ошибка: пустые данные&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local sum = 0&lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        sum = sum + v&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local mean = sum / #data&lt;br /&gt;
    return string.format(&amp;quot;%.2f&amp;quot;, mean)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для расчета медианы&lt;br /&gt;
function stats.median(frame)&lt;br /&gt;
    local data = parseCSV(frame.args[1])&lt;br /&gt;
    if #data == 0 then return &amp;quot;Ошибка: пустые данные&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    -- Сортировка данных&lt;br /&gt;
    table.sort(data)&lt;br /&gt;
    &lt;br /&gt;
    local n = #data&lt;br /&gt;
    local median&lt;br /&gt;
    &lt;br /&gt;
    if n % 2 == 0 then&lt;br /&gt;
        median = (data[n/2] + data[n/2 + 1]) / 2&lt;br /&gt;
    else&lt;br /&gt;
        median = data[math.ceil(n/2)]&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return string.format(&amp;quot;%.2f&amp;quot;, median)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для расчета дисперсии (variance)&lt;br /&gt;
function stats.variance(frame)&lt;br /&gt;
    local data = parseCSV(frame.args[1])&lt;br /&gt;
    if #data == 0 then return &amp;quot;Ошибка: пустые данные&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    -- Расчет среднего значения&lt;br /&gt;
    local sum = 0&lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        sum = sum + v&lt;br /&gt;
    end&lt;br /&gt;
    local mean = sum / #data&lt;br /&gt;
    &lt;br /&gt;
    -- Расчет дисперсии&lt;br /&gt;
    local variance_sum = 0&lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        variance_sum = variance_sum + (v - mean) ^ 2&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local variance = variance_sum / (#data - 1)&lt;br /&gt;
    return string.format(&amp;quot;%.2f&amp;quot;, variance)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для расчета стандартного отклонения (standard deviation)&lt;br /&gt;
function stats.stddev(frame)&lt;br /&gt;
    local data = parseCSV(frame.args[1])&lt;br /&gt;
    if #data == 0 then return &amp;quot;Ошибка: пустые данные&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    -- Расчет среднего значения&lt;br /&gt;
    local sum = 0&lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        sum = sum + v&lt;br /&gt;
    end&lt;br /&gt;
    local mean = sum / #data&lt;br /&gt;
    &lt;br /&gt;
    -- Расчет дисперсии&lt;br /&gt;
    local variance_sum = 0&lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        variance_sum = variance_sum + (v - mean) ^ 2&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local variance = variance_sum / (#data - 1)&lt;br /&gt;
    local stddev = math.sqrt(variance)&lt;br /&gt;
    &lt;br /&gt;
    return string.format(&amp;quot;%.2f&amp;quot;, stddev)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для минимума и максимума&lt;br /&gt;
function stats.minmax(frame)&lt;br /&gt;
    local data = parseCSV(frame.args[1])&lt;br /&gt;
    if #data == 0 then return &amp;quot;Ошибка: пустые данные&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local min_val = data[1]&lt;br /&gt;
    local max_val = data[1]&lt;br /&gt;
    &lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        if v &amp;lt; min_val then min_val = v end&lt;br /&gt;
        if v &amp;gt; max_val then max_val = v end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return &amp;quot;Мин: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, min_val) .. &lt;br /&gt;
           &amp;quot; | Макс: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, max_val)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для расчета суммы&lt;br /&gt;
function stats.sum(frame)&lt;br /&gt;
    local data = parseCSV(frame.args[1])&lt;br /&gt;
    if #data == 0 then return &amp;quot;Ошибка: пустые данные&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local sum = 0&lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        sum = sum + v&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return string.format(&amp;quot;%.2f&amp;quot;, sum)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для расчета количества элементов (count)&lt;br /&gt;
function stats.count(frame)&lt;br /&gt;
    local data = parseCSV(frame.args[1])&lt;br /&gt;
    return tostring(#data)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для расчета корреляции Пирсона&lt;br /&gt;
function stats.correlation(frame)&lt;br /&gt;
    local data_x = parseCSV(frame.args[1])&lt;br /&gt;
    local data_y = parseCSV(frame.args[2])&lt;br /&gt;
    &lt;br /&gt;
    if #data_x ~= #data_y then&lt;br /&gt;
        return &amp;quot;Ошибка: размеры массивов не совпадают&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if #data_x == 0 then&lt;br /&gt;
        return &amp;quot;Ошибка: пустые данные&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Средние значения&lt;br /&gt;
    local mean_x = 0&lt;br /&gt;
    local mean_y = 0&lt;br /&gt;
    for i = 1, #data_x do&lt;br /&gt;
        mean_x = mean_x + data_x[i]&lt;br /&gt;
        mean_y = mean_y + data_y[i]&lt;br /&gt;
    end&lt;br /&gt;
    mean_x = mean_x / #data_x&lt;br /&gt;
    mean_y = mean_y / #data_y&lt;br /&gt;
    &lt;br /&gt;
    -- Расчет корреляции&lt;br /&gt;
    local numerator = 0&lt;br /&gt;
    local denominator_x = 0&lt;br /&gt;
    local denominator_y = 0&lt;br /&gt;
    &lt;br /&gt;
    for i = 1, #data_x do&lt;br /&gt;
        numerator = numerator + (data_x[i] - mean_x) * (data_y[i] - mean_y)&lt;br /&gt;
        denominator_x = denominator_x + (data_x[i] - mean_x) ^ 2&lt;br /&gt;
        denominator_y = denominator_y + (data_y[i] - mean_y) ^ 2&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local correlation = numerator / math.sqrt(denominator_x * denominator_y)&lt;br /&gt;
    return string.format(&amp;quot;%.4f&amp;quot;, correlation)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функция для создания таблицы статистики&lt;br /&gt;
function stats.summary(frame)&lt;br /&gt;
    local data = parseCSV(frame.args[1])&lt;br /&gt;
    if #data == 0 then return &amp;quot;Ошибка: пустые данные&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local sum = 0&lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        sum = sum + v&lt;br /&gt;
    end&lt;br /&gt;
    local mean = sum / #data&lt;br /&gt;
    &lt;br /&gt;
    local variance_sum = 0&lt;br /&gt;
    for _, v in ipairs(data) do&lt;br /&gt;
        variance_sum = variance_sum + (v - mean) ^ 2&lt;br /&gt;
    end&lt;br /&gt;
    local variance = variance_sum / (#data - 1)&lt;br /&gt;
    local stddev = math.sqrt(variance)&lt;br /&gt;
    &lt;br /&gt;
    table.sort(data)&lt;br /&gt;
    local n = #data&lt;br /&gt;
    local median&lt;br /&gt;
    if n % 2 == 0 then&lt;br /&gt;
        median = (data[n/2] + data[n/2 + 1]) / 2&lt;br /&gt;
    else&lt;br /&gt;
        median = data[math.ceil(n/2)]&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;{| class=&amp;#039;wikitable&amp;#039;\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;! Показатель\n! Значение\n|-\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;| Количество (N)\n| &amp;quot; .. tostring(#data) .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;| Среднее\n| &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, mean) .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;| Медиана\n| &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, median) .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;| Дисперсия\n| &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, variance) .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;| Стандартное отклонение\n| &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, stddev) .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;| Минимум\n| &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, data[1]) .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;| Максимум\n| &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, data[#data]) .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
    result = result .. &amp;quot;|}\n&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return stats&lt;/div&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
</feed>