ArtemiiKravchuk / статистика

MTP модуль для роботи із статистичними функціями. Середнє (арифметичне, геометричне, гармонійне), медіана, мода та інші.

Отримати
взяти "хмарний.пак.укр/статистика/1.0.0"
1.0.0
модуль статистика

    ;; визначити, чи містить список даний елемент (логічний результат інвертується, тоді чи_не_містить), з оновленням Мавки замінити на умову "містить"
    дія чи_не_містить(вхідний_список, шукоме_значення)
        результат = так
        перебрати вхідний_список як елемент
            якщо елемент == шукоме_значення
                результат = ні
            кінець
        кінець
        результат
    кінець

    дія перевірити_вхідні_дані(назва_функції текст, вхідні_дані щось, дозволяти_не_числа_в_списку логічне = ні) пусто
        якщо вхідні_дані не є список
            впасти "статистика.%(назва_функції)(): очікувався список як аргумент."
        кінець
        якщо вхідні_дані.довжина() == 0
            впасти "статистика.%(назва_функції)(): як аргумент очікувався список, що має щонайменш 1 елемент."
        кінець
        якщо дозволяти_не_числа_в_списку == ні
            перебрати вхідні_дані як елемент
                якщо елемент не є число
                    впасти "статистика.%(назва_функції)(): дана функція приймає тільки список чисел, '"+елемент+"' не є числом."
                кінець
            кінець
        кінець
    кінець

    дія середнє_степеневе(вхідні_дані список, степень число) число
        перевірити_вхідні_дані("середнє_степеневе", вхідні_дані)
        результат = 0
        перебрати вхідні_дані як елемент
            результат = результат + (елемент**степень)
        кінець
        якщо степень < 0
            вернути (вхідні_дані.довжина()/результат)**(1/-степень)
        кінець
        (результат/вхідні_дані.довжина())**(1/степень)
    кінець

    дія середнє_геометричне(вхідні_дані список) число
        перевірити_вхідні_дані("середнє_геометричне", вхідні_дані)
        добуток = 1
        перебрати вхідні_дані як елемент
            добуток = добуток * елемент
        кінець
        добуток ** (1/вхідні_дані.довжина())
    кінець

    дія середнє_арифметичне(вхідні_дані список) число
        перевірити_вхідні_дані("середнє_арифметичне", вхідні_дані)
        середнє_степеневе(вхідні_дані, 1)
    кінець

    дія середнє_гармонійне(вхідні_дані список) число
        перевірити_вхідні_дані("середнє_гармонійне", вхідні_дані)
        середнє_степеневе(вхідні_дані, -1)
    кінець

    дія середнє_квадратичне(вхідні_дані список) число
        перевірити_вхідні_дані("середнє_квадратичне", вхідні_дані)
        середнє_степеневе(вхідні_дані, 2)
    кінець

    дія середнє_кубічне(вхідні_дані список) число
        перевірити_вхідні_дані("середнє_кубічне", вхідні_дані)
        середнє_степеневе(вхідні_дані, 3)
    кінець

    дія середнє_розмаху(вхідні_дані список) число
        перевірити_вхідні_дані("середнє_розмаху", вхідні_дані)
        сортовано = вхідні_дані.сортувати()
        (сортовано[0]+сортовано[сортовано.довжина()-1])/2
    кінець

    дія розмах(вхідні_дані список) число
        перевірити_вхідні_дані("розмах", вхідні_дані)
        сортовано = вхідні_дані.сортувати()
        сортовано[сортовано.довжина()-1]-сортовано[0]
    кінець

    дія медіана(вхідні_дані список) число
        перевірити_вхідні_дані("медіана", вхідні_дані)
        вхідні_дані.сортувати()
        довжина = вхідні_дані.довжина()
        якщо довжина % 2 == 1
            вернути вхідні_дані[довжина/2-0.5]
        інакше
            вернути (вхідні_дані[довжина/2-1]+вхідні_дані[довжина/2])/2
        кінець
    кінець

    дія низька_медіана(вхідні_дані список) число
        перевірити_вхідні_дані("низька_медіана", вхідні_дані)
        вхідні_дані.сортувати()
        довжина = вхідні_дані.довжина()
        якщо довжина % 2 == 1
            вернути вхідні_дані[довжина/2-0.5]
        інакше
            вернути вхідні_дані[довжина/2-1]
        кінець
    кінець

    дія висока_медіана(вхідні_дані список) число
        перевірити_вхідні_дані("висока_медіана", вхідні_дані)
        вхідні_дані.сортувати()
        довжина = вхідні_дані.довжина()
        якщо довжина % 2 == 1
            вернути вхідні_дані[довжина/2-0.5]
        інакше
            вернути вхідні_дані[довжина/2]
        кінець
    кінець

    дія мода(вхідні_дані список) число
        перевірити_вхідні_дані("мода", вхідні_дані, так)
        унікальні_елементи = []
        перебрати вхідні_дані як елемент
            якщо чи_не_містить(унікальні_елементи, елемент)
                унікальні_елементи.додати(елемент)
            кінець
        кінець
        максимальна_кількість = 0
        мода = пусто
        перебрати унікальні_елементи як значення
            кількість = 0
            перебрати вхідні_дані як елемент
                якщо елемент == значення
                    кількість += 1
                кінець
            кінець
            якщо кількість > максимальна_кількість
                максимальна_кількість = кількість
                мода = значення
            кінець
        кінець
        мода
    кінець

    дія мультимода(вхідні_дані список) число
        перевірити_вхідні_дані("мультимода", вхідні_дані, так)
        унікальні_елементи = []
        перебрати вхідні_дані як елемент
            якщо чи_не_містить(унікальні_елементи, елемент)
                унікальні_елементи.додати(елемент)
            кінець
        кінець
        максимальна_кількість = 0
        мода = []
        перебрати унікальні_елементи як значення
            кількість = 0
            перебрати вхідні_дані як елемент
                якщо елемент == значення
                    кількість += 1
                кінець
            кінець
            якщо кількість == максимальна_кількість
                мода.додати(значення)
            кінець
            якщо кількість > максимальна_кількість
                максимальна_кількість = кількість
                мода = [значення]
            кінець
        кінець
        мода
    кінець

    дія міжквартильний_розмах(вхідні_дані список) число
        перевірити_вхідні_дані("міжквартильний_розмах", вхідні_дані)
        вхідні_дані = вхідні_дані.сортувати()
        довжина_даних = вхідні_дані.довжина()
        якщо довжина_даних % 2 == 0
            вернути медіана(вхідні_дані.зрізати(довжина_даних/2, довжина_даних)) - медіана(вхідні_дані.зрізати(0, довжина_даних/2))
        інакше
            вернути медіана(вхідні_дані.зрізати((довжина_даних-1)/2+1, довжина_даних)) - медіана(вхідні_дані.зрізати(0, (довжина_даних-1)/2))
        кінець
    кінець

    дія дисперсія(вхідні_дані список, чи_вибірка логічне = ні) число
        перевірити_вхідні_дані("дисперсія", вхідні_дані)
        якщо чи_вибірка не є логічне
            впасти "статистика.дисперсія(): як другий аргумент очікувалося логічне значення, не \"%(чи_вибірка)\"."
        кінець
        середнє = середнє_арифметичне(вхідні_дані)
        результат = 0
        перебрати вхідні_дані як елемент
            результат += (елемент-середнє)**2
        кінець
        якщо чи_вибірка
            результат / (вхідні_дані.довжина()-1)
        інакше
            результат / вхідні_дані.довжина()
        кінець
    кінець

    дія стандартне_відхилення(вхідні_дані список, чи_вибірка логічне = ні) число
        перевірити_вхідні_дані("стандартне_відхилення", вхідні_дані)
        якщо чи_вибірка не є логічне
            впасти "статистика.стандартне_відхилення(): як другий аргумент очікувалося логічне значення, не \"%(чи_вибірка)\"."
        кінець
        дисперсія(вхідні_дані, чи_вибірка) ** 0.5
    кінець

    дати перевірити_вхідні_дані
    дати середнє_степеневе, середнє_арифметичне, середнє_геометричне, середнє_гармонійне, середнє_квадратичне, середнє_кубічне
    дати середнє_розмаху, розмах, міжквартильний_розмах
    дати медіана, низька_медіана, висока_медіана
    дати мода, мультимода
    дати дисперсія, стандартне_відхилення
кінець

дати статистика
Версії