diff --git a/DeskriptiveStatistik/DeskriptiveStatistik.py b/DeskriptiveStatistik/DeskriptiveStatistik.py index 8aab3e7..18df76f 100644 --- a/DeskriptiveStatistik/DeskriptiveStatistik.py +++ b/DeskriptiveStatistik/DeskriptiveStatistik.py @@ -1,4 +1,5 @@ import numpy as np +import math def werteListe(absoluteHaufigkeiten): werte = [] @@ -92,21 +93,49 @@ def standardabweichung(werte=[], absuluteHaufigkeit={}, relativeHaufigkeiten={}, return np.sqrt(varianz(werte, absuluteHaufigkeit, relativeHaufigkeiten, pdf, stichprobengroesse, korrigiert)) -def kovarianz(werte=[]): +def kovarianz(wertePaare=[]): 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: + n = len(wertePaare) + xMittel = mittelwert([wert[0] for wert in wertePaare]) + yMittel = mittelwert([wert[1] for wert in wertePaare]) + for wert in wertePaare: 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 korrelationskoeffizentPearson(wertePaare=[]): + xStandardabweichung = standardabweichung([wert[0] for wert in wertePaare]) + yStandardabweichung = standardabweichung([wert[1] for wert in wertePaare]) + return float(kovarianz(wertePaare)) / float(xStandardabweichung * yStandardabweichung) + +def rang(wertePaare=[], xWerte=[], yWerte=[]): + if(len(wertePaare) < 1): + wertePaare = bildeWertePaare(xWerte, yWerte) + wertePaare.sort(key=lambda tup: tup[0]) + wertePaare = [(wertePaare[i][0], wertePaare[i][1], i + 1) for i in range(len(wertePaare))] + wertePaare.sort(key=lambda tup: tup[1]) + wertePaare = [(wertePaare[i][0], wertePaare[i][1], wertePaare[i][2], i + 1) for i in range(len(wertePaare))] + return wertePaare + +def korrelationskoeffizentPearsonRang(wertePaare=[]): + wertePaare = rang(wertePaare=wertePaare) + n = len(wertePaare) + rangMittelwert = float((len(wertePaare) + 1)) / 2.0 + summeZahler = 0 + summeNennerX = 0 + summeNennerY = 0 + for wertePaar in wertePaare: + summeZahler = summeZahler + (wertePaar[2] - rangMittelwert) * (wertePaar[3] - rangMittelwert) + summeNennerX = summeNennerX + math.pow(wertePaar[2] - rangMittelwert, 2) + summeNennerY = summeNennerY + math.pow(wertePaar[3] - rangMittelwert, 2) + return summeZahler / (math.sqrt(summeNennerX) * math.sqrt(summeNennerY)) + + + + + + def bildeWertePaare(x=[], y=[]): wertePaare = [] @@ -119,11 +148,12 @@ def bildeWertePaare(x=[], y=[]): 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] + werteX = [59, 35, 43, 23, 42, 27] + werteY = [14.6, 11.8, 14.3, 13.0, 14.2, 11.0] werte = bildeWertePaare(werteX, werteY) print(kovarianz(werte)) print(korrelationskoeffizentPearson(werte)) + print(korrelationskoeffizentPearsonRang(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))