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 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)) def kovarianz(werte=[]): summe = 0 n = len(werte) xMittel = mittelwert([wert[0] for wert in werte]) yMittel = mittelwert([wert[1] for wert in werte]) for wert in werte: x = wert[0] y = wert[1] summe = summe + ((x - xMittel) * (y - yMittel)) return float(summe) / float(n) def korrelationskoeffizentPearson(werte=[]): xStandardabweichung = standardabweichung([wert[0] for wert in werte]) yStandardabweichung = standardabweichung([wert[1] for wert in werte]) return float(kovarianz(werte)) / float(xStandardabweichung * yStandardabweichung) def bildeWertePaare(x=[], y=[]): wertePaare = [] if not len(x) == len(y): return False for i in range(len(x)): wertePaare.append((x[i], y[i])) return wertePaare 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} werteX = [163, 165, 166, 169, 170, 171, 171, 173, 174, 175, 177, 177, 179, 180, 185] werteY = [59, 62, 65, 69, 65, 69, 76, 73, 75, 73, 80, 71, 82, 84, 81] werte = bildeWertePaare(werteX, werteY) print(kovarianz(werte)) print(korrelationskoeffizentPearson(werte)) #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("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))