Wo finde ich wahnsinnig (mittlere absolute Abweichung) in scipy?

Es scheint scipy einmal eine Funktion mad , um die mittlere absolute Abweichung für eine Reihe von Zahlen zu berechnen:

Http://projects.scipy.org/scipy/browser/trunk/scipy/stats/models/utils.py?rev=3473

  • Bildtransformation in OpenCV
  • Iterativ (oder rekursiv?) Filterverzeichnis und Kopierergebnisse in neues Verzeichnis
  • Selen-Webdriver mit switch_to_windows () und das Drucken des Titels druckt den Titel nicht.
  • Wie füge ich Python 3.3 zu Powershell hinzu?
  • Wie man eine c ++ - Funktion wickelt, die einen Funktionszeiger in python mit SWIG einnimmt
  • Wie konvertiere man Unicode-Escape-Sequenzen zu Unicode-Zeichen in einer Python-String
  • Allerdings kann ich es nirgendwo in aktuellen Versionen von scipy finden. Natürlich ist es möglich, einfach den alten Code aus dem Repository zu kopieren, aber ich ziehe es vor, die Version von scipy zu verwenden. Wo finde ich es, oder wurde es ersetzt oder entfernt?

  • Python ARIMA exogene Variable aus der Probe
  • Wie installiere ich PyGI (Python Gobject Introspection) unter Windows?
  • Ersetzen numpy Array-Werte python
  • Wie konvertiere ich einen String in eine Funktion in Python?
  • Kann nicht python mysql bibliothek auf Mac Mavericks installieren
  • Der beste Weg, um den maximalen Wert in einer Spark Dataframe Spalte zu bekommen
  • 8 Solutions collect form web for “Wo finde ich wahnsinnig (mittlere absolute Abweichung) in scipy?”

    Die aktuelle Version von statsmodels ist mad in statsmodels.robust :

     >>> import numpy as np >>> from statsmodels import robust >>> a = np.matrix( [ ... [ 80, 76, 77, 78, 79, 81, 76, 77, 79, 84, 75, 79, 76, 78 ], ... [ 66, 69, 76, 72, 79, 77, 74, 77, 71, 79, 74, 66, 67, 73 ] ... ], dtype=float ) >>> robust.mad(a, axis=1) array([ 2.22390333, 5.18910776]) 

    Beachten Sie, dass dies standardmäßig die robuste Schätzung der Standardabweichung unter der Annahme einer Normalverteilung durch Skalierung des Ergebnisses ein Skalierungsfaktor berechnet; Von help :

     Signature: robust.mad(a, c=0.67448975019608171, axis=0, center=<function median at 0x10ba6e5f0>) 

    Die Version in R macht eine ähnliche Normalisierung. Wenn du das nicht willst, dann stelle natürlich nur c=1 .

    (Ein früherer Kommentar erwähnt, dass dies in statsmodels.robust.scale Implementierung ist in statsmodels/robust/scale.py (siehe github ) aber das robust Paket nicht exportieren scale , sondern es exportiert die öffentlichen Funktionen in scale.py explizit. )

    [EDIT] Da das immer weiter stimmt: Ich weiß, dass die mediane absolute Abweichung eine häufigere Statistik ist, aber der Fragesteller fragte nach einer absoluten Abweichung, und hier ist, wie man es macht:

     from numpy import mean, absolute def mad(data, axis=None): return mean(absolute(data - mean(data, axis)), axis) 

    Für das, was es wert ist, benutze ich das für MAD:

     def mad(arr): """ Median Absolute Deviation: a "Robust" version of standard deviation. Indices variabililty of the sample. https://en.wikipedia.org/wiki/Median_absolute_deviation """ arr = np.ma.array(arr).compressed() # should be faster to not use masked arrays. med = np.median(arr) return np.median(np.abs(arr - med)) 

    Es sieht aus wie scipy.stats.models wurde im August 2008 wegen unzureichendem Backen entfernt. Die Entwicklung ist auf statsmodels .

    Es ist nicht die scipy Version, aber hier ist eine Implementierung des MAD mit maskierten Arrays, um schlechte Werte zu ignorieren: http://code.google.com/p/agpy/source/browse/trunk/agpy/mad.py

    Ich lerne nur Python und Numpy, aber hier ist der Code, den ich geschrieben habe, um meine Matthin-Hausaufgaben des 7. Graders zu überprüfen, die das M (ean) AD von 2 Sätzen von Zahlen wünschten:

    Daten in Numpy Matrixzeilen:

     import numpy as np >>> a = np.matrix( [ [ 80, 76, 77, 78, 79, 81, 76, 77, 79, 84, 75, 79, 76, 78 ], \\ ... [ 66, 69, 76, 72, 79, 77, 74, 77, 71, 79, 74, 66, 67, 73 ] ], dtype=float ) >>> matMad = np.mean( np.abs( np.tile( np.mean( a, axis=1 ), ( 1, a.shape[1] ) ) - a ), axis=1 ) >>> matMad matrix([[ 1.81632653], [ 3.73469388]]) 

    Daten in Numpy 1D Arrays:

     >>> a1 = np.array( [ 80, 76, 77, 78, 79, 81, 76, 77, 79, 84, 75, 79, 76, 78 ], dtype=float ) >>> a2 = np.array( [ 66, 69, 76, 72, 79, 77, 74, 77, 71, 79, 74, 66, 67, 73 ], dtype=float ) >>> madA1 = np.mean( np.abs( np.tile( np.mean( a1 ), ( 1, len( a1 ) ) ) - a1 ) ) >>> madA2 = np.mean( np.abs( np.tile( np.mean( a2 ), ( 1, len( a2 ) ) ) - a2 ) ) >>> madA1, madA2 (1.816326530612244, 3.7346938775510199) 

    Ich benutze:

     from math import fabs a = [1, 1, 2, 2, 4, 6, 9] median = sorted(a)[len(a)//2] for b in a: mad = fabs(b - median) print b,mad 

    Wenn Sie gerne in Pandas arbeiten (wie ich), hat es eine nützliche Funktion für die mittlere absolute Abweichung :

     import pandas as pd df = pd.DataFrame() df['a'] = [1, 1, 2, 2, 4, 6, 9] df['a'].mad() 

    Ausgang: 2.3673469387755106

    Python ist die beste Programmiersprache der Welt.