Seite 1 von 1

Wann würdet ihr das Modul decimal verwenden!?

Verfasst: Dienstag 13. Januar 2015, 22:01
von pixewakb
Ich will gerade eine Regressionsgerade berechnen und arbeite mit Gleitkommazahlen (noch), so dass ich für ganz simple Aufgaben keine so simplen Ergebnisse erhalte:

Code: Alles auswählen

>>> liste_x = [1,2,3,4,5]
>>> liste_y = [1,2,3,4,5]
>>> regressionsgerade(liste_x, liste_y)
(0.9999999999999998, 8.881784197001252e-16)
Ich arbeite mit statistischen Hilfsmitteln und will für eine Reihe von Messwerten jetzt gern Standardsachen - mit Python - berechnen lassen.

Ich frage mal ganz blöd:
1.) Würdet ihr mit Gleitkommazahlen rechnen und vielleicht runden oder zum Modul Decimal wechseln?
2.) Würdet ihr alle Berechnungen in Decimal durchführen lassen - ich schreibe ein Modul, um statistische Berechnungen vornehmen zu können.
3.) Welche Präzision würdet ihr - falls ihr das Modul nutzt - setzen!?

Ich habe aktuell keine Python-Programmierer um mich herum, mit denen ich mich austauschen könnte. Ich hoffe, dass ich mit den Fragen nicht zur Last falle.

Die Einarbeitung in R (usw.) ist momentan zeitlich nicht zu schaffen und nicht zu vertreten, weil ich im Kern kaum etwas in dem Bereich machen möchte. Ich muss gerade mal Median, Mittelwert und Regressionsgerade kalkulieren...

Quellcode der Funktion, die wiederum weitere Funktionen aus dem Modul lädt:

Code: Alles auswählen

def regressionsgerade(liste_x, liste_y):
    # Ermittelt m, Steigung der Geraden
    # und       b, Schnittpunkt mit der y-Achse
    mw_x = mittelwert(liste_x)
    mw_y = mittelwert(liste_y)
    s_x  = standardabweichung(liste_x)
    s_y  = standardabweichung(liste_y)
    r    = korrelationskoeffizient(liste_x, liste_y)

    # Berechne Steigung m 
    m = r * (s_y / s_x)

    # Berechne Schnittpunkt y 
    b = mw_y - m * mw_x
    
    return m, b

Re: Wann würdet ihr das Modul decimal verwenden!?

Verfasst: Dienstag 13. Januar 2015, 22:16
von BlackJack
@pixewakb: Decimal würde ich nur für Finanzrechnungen verwenden und wenn ich mehr Stellen brauche als `float` zur Verfügung stellt. Regressionsgeraden würde ich mit `float` berechnen. Tun doch alle anderen auch. Und welche Präzision das hängt vom konkreten Problem ab. Oft ist es ja auch nur ”gefühlte” Präzision, denn man muss erst einmal in Bereiche kommen wo `float` ungenauer wird als die Messfehler in den Eingangsdaten, denn nur dann macht es Sinn die Anzahl der Dezimalstellen zu erhöhen.

Runden im Sinne von die `round()`-Funktion benutzen würde ich bei `float` auch nicht, denn das ist ja ebenfalls nicht genau. Wenn Du in der Anzeige auf eine bestimmte Anzahl von Nachkommastellen beschränken möchtest, dann macht man das über die Formatierung als Zeichenkette:

Code: Alles auswählen

In [12]: '{0:.3f} {1:.3f}'.format(0.9999999999999998, 8.881784197001252e-16)
Out[12]: '1.000 0.000'
Edit: Wobei es das doch auch schon fertig gibt. Grundlegende Sachen im `statistics`-Modul in der Standardbibliothek von Python 3 und als Backport für Python 2. Und natürlich Numpy & Co.

Re: Wann würdet ihr das Modul decimal verwenden!?

Verfasst: Dienstag 13. Januar 2015, 22:36
von pixewakb
Ich darf da mal nachfragen:
Decimal würde ich nur für Finanzrechnungen verwenden
Warum da? (Es könnte sein, dass ich meine Werte mal rechtfertigen muss. Manche Leute können ihren Bereich und ihre Messwerte sehr hochhängen...)

statistics hatte ich schon mal gesehen, bietet aber nicht viel. Bei Numpy habe ich Sorge was die Einarbeitungszeit betrifft; Statistik hatte ich schon längere Zeit nicht mehr gemacht. Da lese ich mich immer noch ein.

Re: Wann würdet ihr das Modul decimal verwenden!?

Verfasst: Dienstag 13. Januar 2015, 22:57
von BlackJack
@pixewakb: Weil man bei Finanzrechnung tatsächlich manchmal vorgegeben ist auf wieviele Stellen genau gerechnet werden muss und runden muss man auch *und* weil das nicht immer das runden ist was `round()` macht. Desweiteren kann Decimal so Sachen wie 0.1 halt auch tatsächlich darstellen und nicht nur ungefähr.

Wenn Du Deine Ergebnisse rechtfertigen musst, dann müsstest Du Dich mit den verschiedenen Fehler beschäftigen die grundsätzlich beim Rechnen mit endlicher Genauigkeit auftreten können, was auch Decimal betrifft, und wie sich diese Fehler in Deinen Formeln fortsetzen. Dann kannst Du bestimmen in welchem Bereich die Rechenfehler in Deinen Formeln maximal sein können. Da berücksichtigst Du dann noch die Toleranzen bei den Messungen und wenn der Bereich der Fehler am Ende zu gross ist, dann musst Du Dir etwas überlegen. Und kannst so dann auch bei Decimal die Anzahl der signifikanten Stellen ausrechnen die man braucht um in einen akzeptablen Fehlerwertebereich zu kommen.

Die Einarbeitungszeit in Numpy oder vielleicht auch Pandas steht hier der Zeit zum selber schreiben und damit eventuellen Fehlern im Programm entgegen.

Re: Wann würdet ihr das Modul decimal verwenden!?

Verfasst: Mittwoch 14. Januar 2015, 08:09
von Sirius3
@pixewakbe: Statistik hat doch immer inhärent einen Fehler, der bei ungefähr 1/n liegt, weil z.B. ein Zahlenwert mehr oder weniger den Mittelwert um diese Größenordung ändern kann. Float hat eine Genauigkeit von ungefähr 15 Stellen, bevor Du also nicht eine Billion Werte hast, brauchst Du Dir über die Genauigkeit von Deiner Statistik keine Gedanken machen.

Re: Wann würdet ihr das Modul decimal verwenden!?

Verfasst: Mittwoch 14. Januar 2015, 09:09
von MagBen
pixewakb hat geschrieben:Es könnte sein, dass ich meine Werte mal rechtfertigen muss. Manche Leute können ihren Bereich und ihre Messwerte sehr hochhängen...
An der Uni habe ich von einem Fall gehört, wo ein Student in einer Seminar- oder Diplomarbeit das "Durchhängen" von Hochspannungsleitungen berechnet hat. Das Ergebnis hat er mit einer Genauigkeit von 1/1000 mm angegeben und hat dafür Punktabzug bekommen, da er das Problem offensichtlich nicht voll verstanden hatte.

Re: Wann würdet ihr das Modul decimal verwenden!?

Verfasst: Samstag 17. Januar 2015, 11:44
von pixewakb
Ich bin kein Statistiker und hatte das nur am Rande (Umfragen, dann Standardabweichung, Glockenkurve, rechts- und linksschief). Im Moment arbeite ich mich vorsichtshalber auch in Statistik etwas ein, um die Grundlagen zu verstehen. Solange ich mich da nicht total blamiere...

Danke für die Rückmeldungen. Auch hier wird es etwas dauern, bis ich das verdaut habe.

Re: Wann würdet ihr das Modul decimal verwenden!?

Verfasst: Samstag 17. Januar 2015, 17:05
von kbr
MagBen hat geschrieben:An der Uni habe ich von einem Fall gehört, wo ein Student in einer Seminar- oder Diplomarbeit das "Durchhängen" von Hochspannungsleitungen berechnet hat. Das Ergebnis hat er mit einer Genauigkeit von 1/1000 mm angegeben und hat dafür Punktabzug bekommen, da er das Problem offensichtlich nicht voll verstanden hatte.
Oder frei nach Gauß: "Der Mangel an mathematischer Bildung gibt sich durch nichts so auffallend zu erkennen wie durch maßlose Schärfe im Zahlenrechnen."