From ac80d2bba06e0e15ce68458355b4073e43080371 Mon Sep 17 00:00:00 2001 From: schrom01 Date: Thu, 13 Oct 2022 08:54:09 +0200 Subject: [PATCH] Created Script DeskriptiveStatistik.py --- DeskriptiveStatistik.py | 151 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 DeskriptiveStatistik.py diff --git a/DeskriptiveStatistik.py b/DeskriptiveStatistik.py new file mode 100644 index 0000000..2e1bf40 --- /dev/null +++ b/DeskriptiveStatistik.py @@ -0,0 +1,151 @@ +import numpy as np + +def werteListe(absoluteHaufigkeiten): + werte = [] + for wert in absoluteHaufigkeiten.keys(): + for i in range(absoluteHaufigkeiten[wert]): + werte.append(wert) + return werte + +def mittelwert(werte=[], haufigkeiten={}): + count = 0 + sum = 0 + if(len(haufigkeiten) > 0): + for wert in haufigkeiten.keys(): + sum = sum + wert * haufigkeiten[wert] + count = count + haufigkeiten[wert] + return sum / count + else: + return np.sum(werte) / len(werte) + +def anzahlElemente(werte, absoluteHaufigkeiten={}): + if(len(absoluteHaufigkeiten) > 0): + sum(absoluteHaufigkeiten.values()) + else: + return len(werte) + +def absoluteHaufigkeiten(werte): + haufigkeiten = {} + for wert in werte: + if(wert in haufigkeiten): + haufigkeiten[wert] = haufigkeiten[wert] + 1 + else: + haufigkeiten[wert] = 1 + return haufigkeiten + +def relativeHaufigkeiten(werte=[], absoluteWerte={}): + haufigkeiten = {} + if(len(absoluteWerte) == 0): + absoluteWerte = absoluteHaufigkeiten(werte) + anzahl = anzahlElemente(werte) + for wert in absoluteWerte.keys(): + haufigkeiten[wert] = absoluteWerte[wert] / anzahl + return haufigkeiten + +def qquantil(werte, q): + werteSortiert = sorted(werte) + nq = len(werteSortiert) * q + if nq % 1 == 0: #ganze Zahl + nq = int(nq - 1) + return 0.5 * (werteSortiert[nq] + werteSortiert[nq+1]) + else: #nicht ganze Zahl + return werteSortiert[int(np.ceil(nq - 1))] + +def median(werte): + return qquantil(werte, 0.5) + +def interqurartilsabstand(werte): + return qquantil(werte, 0.75) - qquantil(werte, 0.25) + +def obereAntenne_obereAusreisser(werte): + werteSortiert = sorted(werte) + resultat = ["",[]] + maxAntenne = (qquantil(werte, 0.75) + interqurartilsabstand(werteSortiert) * 1.5) + if(max(werteSortiert) > maxAntenne): + for i in range(len(werteSortiert)): + wert = werteSortiert[i] + if(i+1 == len(werteSortiert)): + resultat[1].append(wert) + elif(werteSortiert[i+1] > maxAntenne) and resultat[0] == "": + resultat[0] = wert + elif(werteSortiert[i+1] > maxAntenne): + resultat[1].append(wert) + else: + resultat[0] = max(werteSortiert) + return resultat + +def untereAntenne_untereAusreisser(werte): + werteSortiert = sorted(werte, reverse=True) + resultat = ["",[]] + maxAntenne = (qquantil(werte, 0.25) - interqurartilsabstand(werteSortiert) * 1.5) + if(min(werteSortiert) < maxAntenne): + for i in range(len(werteSortiert)): + wert = werteSortiert[i] + if(i+1 == len(werteSortiert)): + resultat[1].append(wert) + elif(werteSortiert[i+1] < maxAntenne) and resultat[0] == "": + resultat[0] = wert + elif(werteSortiert[i+1] < maxAntenne): + resultat[1].append(wert) + else: + resultat[0] = min(werteSortiert) + return resultat + +def varianz(werte=[], absoluteHaufigkeiten={}, relativeHaufigkeiten={}, pdf={}, stichprobengroesse=0, korrigiert=False): + summe = 0 + if(len(relativeHaufigkeiten) > 0): + mittel = mittelwert(haufigkeiten=relativeHaufigkeiten) + for wert in relativeHaufigkeiten.keys(): + summe = summe + (relativeHaufigkeiten[wert] * (wert - mittel) ** 2) + if (korrigiert): + return summe * stichprobengroesse / (stichprobengroesse - 1) + else: + return summe + elif (len(pdf) > 0): + mittel = mittelwert(haufigkeiten=pdf) + for wert in pdf.keys(): + summe = summe + (pdf[wert] * (wert - mittel) ** 2) + if(korrigiert): + return (summe / sum(pdf.values())) * stichprobengroesse / (stichprobengroesse - 1) + else: + return summe / sum(pdf.values()) + elif(len(absoluteHaufigkeiten) > 0): + werte = werteListe(absoluteHaufigkeiten) + if(len(werte) > 0): + mittel = mittelwert(werte=werte) + for wert in werte: + summe = summe + (wert - mittel)**2 + if(korrigiert): + return summe / (anzahlElemente(werte=werte) - 1) + else: + return summe / anzahlElemente(werte=werte) + +def standardabweichung(werte=[], absuluteHaufigkeit={}, relativeHaufigkeiten={}, pdf={}, stichprobengroesse=0, korrigiert=False): + return np.sqrt(varianz(werte, absuluteHaufigkeit, relativeHaufigkeiten, pdf, stichprobengroesse, korrigiert)) + + + +if __name__ == '__main__': + werte = [12, -5, 5, 52, -6, -5, 8, -7, 22, -46, 8, -14, 5, 47] + haufigkeiten = {0: 6, 1: 6, 2: 3, 3: 5, 8: 6} + #werte = [9, 7, 7, 6, 1] + # haufigkeiten = {11: 3/20, 13: 1/2, 15: 1/10, 17: 1/5, 19: 1/20} + # print("Anzahl Elemente: " , anzahlElemente(werte)) + # print("Absolute häufigkeiten: " , absoluteHaufigkeiten(werte)) + # print("RElative Haufigkeiten: ", relativeHaufigkeiten(werte)) + # print("Mittelwert: ", mittelwert(werte)) + print("q1: " ,qquantil(werte, 0.25)) + print("q2: " , qquantil(werte, 0.5)) + print("q3: " , qquantil(werte, 0.75)) + print("Interquartilsabstand: ", interqurartilsabstand(werte)) + print("obere Antenne: ", obereAntenne_obereAusreisser(werte)[0]) + print("obere Ausreisser: ", obereAntenne_obereAusreisser(werte)[1]) + print("untere Antenne: ", untereAntenne_untereAusreisser(werte)[0]) + print("untere Ausreisser: ", untereAntenne_untereAusreisser(werte)[1]) + print("Varianz: ", varianz(absoluteHaufigkeiten=haufigkeiten)) + #print("Standardabweichung: ", standardabweichung(werte, korrigiert=True)) + # print("Mittelwert : ", mittelwert(haufigkeiten=haufigkeiten)) + # print("empirische Varianz: ", varianz(absoluteHaufigkeiten=haufigkeiten, stichprobengroesse=0, korrigiert=True)) + # print("empirische Standardabweichung", standardabweichung(absuluteHaufigkeit=haufigkeiten, stichprobengroesse=20, korrigiert=False)) + # print("empirische Varianz: ", varianz(absoluteHaufigkeiten=haufigkeiten, stichprobengroesse=20, korrigiert=True)) + #print("empirische Standardabweichung", standardabweichung(werte=werte, stichprobengroesse=0, korrigiert=True))