Servus,
habe gerade SciPy und NumPy installiert - schwere Geburt! Dazu finde ich nun viele Anleitungen, die alt sind und ganz ehrlich, als Neuling kann ich bei einer Lösung kaum einschätzen, ob das geschickt umgesetzt oder zusammen geklöppelt ist.
Ich habe eine Folge von Zahlen und will die Kennwerte aus der Überschrift ermitteln - wie macht ihr das?
Danke vorab.
Arithmetsiches Mittel, Perzentile und Standardabweichung
Hi,
schau am besten in die offizielle Dokumentation, insbesondere das Statistik Module:
- http://docs.scipy.org/doc/scipy/referen ... stats.html
- http://docs.scipy.org/doc/scipy/referen ... cipy.stats
Grüße
Gerrit
schau am besten in die offizielle Dokumentation, insbesondere das Statistik Module:
- http://docs.scipy.org/doc/scipy/referen ... stats.html
- http://docs.scipy.org/doc/scipy/referen ... cipy.stats
Grüße
Gerrit
-
- User
- Beiträge: 40
- Registriert: Montag 15. August 2011, 18:44
Sodala eine Lösug für das arithmetische Mittel habe ich, ich habe es aber so verstanden. Was ich noch nicht genau weiss ist aber, wie ich herausfinde, welche Module ich genau brauche und wie ich herausfinde, ob es sowohl eine Möglichkeit in numpy und scipy gibt - ich habe es so verstanden, dass scipy dann genommen werden sollte ... ?
Code: Alles auswählen
def compute_mean_of_list( list_of_uvals ):
print("compute_mean_of_list()")
# numpy-Weg
print( "Liste:", list_of_uvals)
l = list_of_uvals
a = numpy.asarray( l )
print( "Array:", a)
mean = a.mean()
print( "Mean:", mean)
return mean
- noisefloor
- User
- Beiträge: 4160
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
ich habe mal (wie auch immer) das Modul pystat gefunden. Das ist - wie der Name schon sagt - auf Statistik spezialisiert und hat auch eine recht simple API. Ein gute Doku kennt ich nicht, Quelltext lesen hilft aber hier weiter.
Gruß, noisefloor
ich habe mal (wie auch immer) das Modul pystat gefunden. Das ist - wie der Name schon sagt - auf Statistik spezialisiert und hat auch eine recht simple API. Ein gute Doku kennt ich nicht, Quelltext lesen hilft aber hier weiter.
Gruß, noisefloor
-
- User
- Beiträge: 40
- Registriert: Montag 15. August 2011, 18:44
Danke für den Tipp, aber nun ist alles installiert und das Potential von Scipy und Numpy ist groß - ich denke es macht Sinn wenn ich mcih da nun durchbeiße.
Gut, wie kann es zu so einer Abweichung kommen zwischen R und Python bei der Standardabweichung:
Python:
compute_sd_of_list()
Liste als Eingang: [5, 6, 7, 12]
Array als Eingang: [ 5 6 7 12]
Std: 2.69258240357
R:
*************************************************************
Script calculator
[1] "Liste:"
[1] 5 6 7 12
[1] "Standardabweichung:"
[1] 3.109126
Python-Code:
Gut, wie kann es zu so einer Abweichung kommen zwischen R und Python bei der Standardabweichung:
Python:
compute_sd_of_list()
Liste als Eingang: [5, 6, 7, 12]
Array als Eingang: [ 5 6 7 12]
Std: 2.69258240357
R:
*************************************************************
Script calculator
[1] "Liste:"
[1] 5 6 7 12
[1] "Standardabweichung:"
[1] 3.109126
Python-Code:
Code: Alles auswählen
def compute_sd_of_list( list_of_uvals ):
print("compute_sd_of_list()")
#l_sd = copy.deepcopy(list_of_uvals)
print( "Liste als Eingang:", list_of_uvals)
array_for_sd = numpy.asarray( list_of_uvals )
print( "Array als Eingang:", array_for_sd)
std = array_for_sd.std()
print( "Std:", std)
return std
Lies die Doku zu std. Du musst den Parameter ddof auf 1 setzen. Zugegebener Maßen ist 0 eine ungünstige Vorauswahl. Bin ich auch schonmal drauf reingefallen, Lehre daraus: Immer vorher gucken wie die Funktion definiert ist.Jochen1980 hat geschrieben:Gut, wie kann es zu so einer Abweichung kommen zwischen R und Python bei der Standardabweichung:
Ich verstehe jetzt auch dein Problem nicht Du nimmst einfach die Funktion die dir das Ergebnis liefert was du willst. In welchem modul das jetzt ist kann dir völlig egal sein. Zum Finden der Funktion gibts dann google.
suche nach numpy quantile landet bei: http://docs.scipy.org/doc/scipy-0.7.x/r ... tiles.html
Zuletzt geändert von Darii am Montag 29. August 2011, 21:21, insgesamt 1-mal geändert.
Keine Ahnung was R da macht, aber wenn ich mich nicht vertan habe (was bei statistik gut vorkommen kann...), dann hat Python recht:
Die Standardabweichung ist die Wurzel der Varianz, und die Varianz ist der Erwartungswert (=Durchschnitt im diskreten) des Quadrates der Abweichung vom Erwartungswert (auch wieder Durchschnitt).
Und da kommt dann 2.69... raus.
Hat R vielleicht irgendwelchen impliziten Startwerte 0 oder 1?
Code: Alles auswählen
>>> l = [5, 6, 7, 12]
>>> m = sum(l) / len(l)
>>> m = sum(l) / float(len(l))
>>> m
7.5
>>> from math import *
>>> d2 = sum([(m - v)**2 for v in l]) / len(l)
>>> d2
7.25
>>> sqrt(d2)
2.692582403567252
Und da kommt dann 2.69... raus.
Hat R vielleicht irgendwelchen impliziten Startwerte 0 oder 1?
Es ist üblich Die Quadratsumme am Ende durch len(l) - 1 zu teilen wodurch die Abweichung überschätzt wird wohingegen sie bei len(l) unterschätzt wird, da man zur Berechnung des Mittelwertes, die Werte deren Abweichung von eben diesem man berechnen will, schon benutzt hat. Dafür gibts dann den Parameter ddof in numpy.std.deets hat geschrieben:Die Standardabweichung ist die Wurzel der Varianz, und die Varianz ist der Erwartungswert (=Durchschnitt im diskreten) des Quadrates der Abweichung vom Erwartungswert (auch wieder Durchschnitt).
Wenn man das Rad neu erfinden will .... Alle anderen können es so machen:
Es ist früh und ich habe wenig Lust, ansonsten kann ich mich meinen Vorschreibern nur anschließen ...
HTH
Christian
edit: Ich finde es nicht schlecht, ddof = 0 als default zu haben: Die Erklärung in der Dokumentation ist ausreichend und ich finde sie ziemlich gut.
Code: Alles auswählen
In [1]: import numpy as np
In [2]: import scipy
In [3]: data = np.random.random(10)
In [4]: data
Out[4]:
array([ 0.3064362 , 0.02360753, 0.85207557, 0.19037716, 0.05744483,
0.49137056, 0.99852297, 0.74728801, 0.65816816, 0.57863276])
In [5]: data.mean()
Out[5]: 0.49039237570387695
In [6]: data.std()
Out[6]: 0.31939372380427977
In [7]: scipy.percentile(data, 10)
Out[7]: 0.0540611023443755
HTH
Christian
edit: Ich finde es nicht schlecht, ddof = 0 als default zu haben: Die Erklärung in der Dokumentation ist ausreichend und ich finde sie ziemlich gut.
Vereinfacht gesagt: Die (empirische) Standardweichung der Stichprobe erhält man, indem man durch len(l) teilt. Zum Schätzen der Standardabweichung S der Grundgesamtheit nimmt man len(l) - 1; dann ist S^2 wenigstens ein erwartungstreuer Schätzer für die Varianz. [Wenn man aber gar nicht schätzen will, dann braucht man len(l).]Darii hat geschrieben:Es ist üblich Die Quadratsumme am Ende durch len(l) - 1 zu teilen wodurch die Abweichung überschätzt wird wohingegen sie bei len(l) unterschätzt wird, da man zur Berechnung des Mittelwertes, die Werte deren Abweichung von eben diesem man berechnen will, schon benutzt hat. Dafür gibts dann den Parameter ddof in numpy.std.deets hat geschrieben:Die Standardabweichung ist die Wurzel der Varianz, und die Varianz ist der Erwartungswert (=Durchschnitt im diskreten) des Quadrates der Abweichung vom Erwartungswert (auch wieder Durchschnitt).