cdf() values in python

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
asahdkhaled
User
Beiträge: 29
Registriert: Samstag 28. Oktober 2017, 22:07

Montag 13. November 2017, 12:22

Hallo,

ich habe mal wieder eine Frage.
Ich habe auch schon in Stackoverflow gepostet, hier der Link https://stackoverflow.com/questions/472 ... from-array

Und zwar möchte ich die cdf-Funktion anwenden und die dazugehörigen Werte speichern.
Ich habe bspw. eine Spalte "AGE" und die hat sagen wir mal 5 Einträge. Diese werden in ein Array gespeichert und dann mit Hilfe von plt.plot geplottet. Soweit so gut. Ich möchte aber die Werte, die zu der Kurve im Plot führen Speichern.

Code: Alles auswählen

cur.execute("Select AGE From ****  ")
output = []
for row in cur:
  output.append(float(row[0]))
data_sorted = np.sort(output)
length=len(data_sorted)
yvals = np.arange(len(data_sorted))/float(len(data_sorted))
print yvals
plt.plot(data_sorted, yvals)
plt.show()

Beispiel:

[ 1 2 2 9 58]
ergibt mit meiner bisherigen Vorgehensweise
-->[ 0.2 0.4 0.6 0.8 1]

Soweit so gut. Allerdings gibt es zweimal die 2. Bedeutet das das Array eher so aussehen müsste:

[0.2 0.6 0.6 0.8 1 ]


Meine Frage daher: Was ist der beste Weg die cdf()-Funktion anzuwenden und (ohne zu plotten) die Werte zu speichern?
Am besten noch doppelte Werte mit beachten, um eine möglichst korrekte Form zu bilden.
Ich könnte natürlich die Ergebnisse in SQL speichern und dann anschließend gruppieren auf "AGE" und dann an die Original-Tabelle zurück-joinen.
Aber ich würde das gerne Python-seitig lösen....
Sirius3
User
Beiträge: 7586
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 13. November 2017, 12:56

@asahdkhaled: weißt Du was »cdf« ist? Was willst Du eigentlich machen? Was sind das für Daten und was willst Du daraus ausrechnen?
asahdkhaled
User
Beiträge: 29
Registriert: Samstag 28. Oktober 2017, 22:07

Montag 13. November 2017, 13:35

Ja, cdf= Cumulative distribution function
Bedeutet, dass man quasi ausrechnen, wieviel Prozent kleiner/gleich ein bestimmer Wert sind.
In meinem Beispiel, wären 0,6 (60%) der Zahlen kleiner/gleich 0,2.....

Ich möchte eine Spalte (bspw. Age) untersuchen und zu jeden Wert dieser Spalte, den CDF Wert in eine neue Spalte hinzufügen.
Bspw:
Spalte CDF
1 0.2
2 0.6
2 0.6
9 0.8
58 1

Die Daten sind numerische Spalten, also wie gesagt, bspw. das Alter
Sirius3
User
Beiträge: 7586
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 13. November 2017, 14:00

@asahdkhaled: Du willst also nur die Anzahl der Zahlen und nicht deren Wert in die Berechnung einbeziehen. Das ist also anders, wie man sonst cdf berechnet. Dann wäre ein erster Schritt, die Zuordnung Wert -> Anzahl auszurechnen, z.B. mit »Counter«.
asahdkhaled
User
Beiträge: 29
Registriert: Samstag 28. Oktober 2017, 22:07

Montag 13. November 2017, 14:08

Nein, ich möchte einfach den cdf() -Wert der Zahl zuweisen. Wie oft eine Zahl in meiner Spalte vorkommt, ist dabei für mich unerheblich.
Es geht mir darum zu erfahren, wieviel Prozent kleiner/gleich als eine bestimmte Zahl aus meiner Spalte sind. Das ist ja meines wissens CDF?!
Antworten