Prozentberechnung

Code-Stücke können hier veröffentlicht werden.
Antworten
foxi76
User
Beiträge: 3
Registriert: Donnerstag 27. Februar 2020, 13:35

Donnerstag 27. Februar 2020, 14:29

Hallo

Ich bin ein Python - Anfänger und suche schon eine zeitlang nach einer Lösung für mein Code - Probem. Leider komme ich nicht so recht weiter....

Folgendes: Aus 28 verschiedenen csv-Listen benötige ich jeweils die letzten paar Listenwerte für die Berechnung der Prozentveränderung. Ich möchte vom immer gleichen Startwert aus die Prozentveränderung zum nächsten akutellen Wert berechnen:

Startwert: 25

Erster aktueller Wert 50 -- Prozentveränderung: 50% (zum Startwert 25)
Zweiter aktueller Wert 75 - Prozentveränderung: 66.66% (zum Startwert 25)
Dritter aktueller Wert 100 - Prozentveränderung: 75% (zum Startwert 25)
..... usw.....

Bisher bin ich soweit gekommen:

def prozentBerechnung(startWert, aktuellerWert):
return((float(startWert)-aktuellerWert)/abs(aktuellerWert))*100

Da ich aus 28 verschiedenen Listen jeweils die letzen x-Werte der einzelnen Listen berechnen möchte, wäre es
sinnvoll, wenn ich nur eine Funktion dafür benötigen würde. Mein Idee:

def meine_28_listen(jeweilige_liste):
for jedenWert in jeweilige_liste:
pb = prozentBerechnung(jeweilige_liste[startWert], jedenWert)
return pb

Das Problem besteht bei der Aussgabe.

Zusätzlich wäre ich dankbar, wenn ich noch Tipps erhalten würde, wie ich z.B. aus 7 meiner 28 Listen jeweils
die Prozentveränderungen addieren und diese durch 7 dividieren könnte:

Liste 1 (Prozentveränderung vom dritten aktuellen Wert) + Liste 2 (Prozentveränderung vom dritten aktuellen Wert) ..... / 7

Bin gespannt auf eure Vorschläge.
Benutzeravatar
sparrow
User
Beiträge: 1831
Registriert: Freitag 17. April 2009, 10:28

Donnerstag 27. Februar 2020, 14:44

Ich werde aus deiner Beschreibung nicht ganz schlau. Das fängt schon bei der Berechnung an: Wie ist denn das Verhältnis von den Zahlen, wenn zwischen dem Startwert 25 und dem Wert 50 50% Veränderung liegen? Und dann zu 75 66%? Das passt auch nicht zu der Formel, die du zeigst.

Welches Problem bei der Ausgabe hast du denn?

Parallel geführte Listen scheinen hier die falsche Datenstruktur zu sein. Darauf deutet es zumindest hin, wenn du über bestimmte, gleiche Indexe der Listen einen Durchschnitt bilden willst.
foxi76
User
Beiträge: 3
Registriert: Donnerstag 27. Februar 2020, 13:35

Donnerstag 27. Februar 2020, 18:57

vielen Dank für die Antwort... ja stimmt , da hat sich ein Fehler eingeschlichen... der code müsste:

def prozentBerechnung(aktuellerWert, startWert):
return((float(aktuellerWert)-startWert)/abs(startWert))*100

oder vereinfacht

% = (a-s)/s)*100
a = akuteller Wert
s = Startwert

lauten... somit wäre

Erster aktueller Wert 50 -- Prozentveränderung: 100% (zum Startwert 25)
Zweiter aktueller Wert 75 -- Prozentveränderung: 200% (zum Startwert 25)
Dritter aktueller Wert 100 -- Prozentveränderung: 300% (zum Startwert 25)

Ich habe 28 verschiedene Listen und ich möchte eine Funktion, die alle Listen bearbeiten kann:

Liste 1: Wert 1a, Wert 2a, Wert 3a, Wert 4a......
Liste 2: Wert 1b, Wert 2b, Wert 3b, Wert 4b......
Liste 3: Wert 1c, Wert 2c, Wert 3c, Wert 4c......
Liste 4: Wert 1d, Wert 2d, Wert 3d, Wert 4d......
......
Liste 28:

D.h. auf der einen Seite sollte die Prozentveränderung aus der Liste 1 vom jeweiligen Startwert (Wert 1a) zum Wert 2a, 3a, 4a, 5a...
berechnet werden. Daselbe aus der Liste 2, vom jeweiligen Startwert (Wert 1b) zum Wert 2b, 3b, 4b...und all die andern Listen nach dem gleichen Muster.

Das Problem mit der Ausgabe liegt in der zweiten Funktion:

def meine_28_listen(jeweilige_liste):
for jedenWert in jeweilige_liste:
pb = prozentBerechnung(jeweilige_liste[startWert], jedenWert)
return pb

Ich weiss nicht, ob ich mit der zweiten Funktion auf dem richtigen Weg bin und habe noch keinen
Weg gefunden. Das Endresulat sollte so sein:

Wert 2a hat sich zum Startwert (1a) um x-Prozent verändert
Wert 3a hat sich zum Startwert (1a) um x-Prozent verändert
Wert 4a hat sich zum Startwert (1a) um x-Prozent verändert
.....

Mit der gleichen Funktion möchte ich dann über die Liste 2 iterieren:

Wert 2b hat sich zum Startwert (1b) um x-Prozent verändert
Wert 3b hat sich zum Startwert (1b) um x-Prozent verändert
Wert 4b hat sich zum Startwert (1b) um x-Prozent verändert
....

dann all die anderen Listen. Ich hoffe, ich konnte es ein bisschen verständlicher beschreiben...
Benutzeravatar
snafu
User
Beiträge: 6073
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 28. Februar 2020, 03:48

Anscheinend suchst du etwas in dieser Art:

Code: Alles auswählen

def gib_abweichungen(werte):
    start = werte[0]
    return [(wert - start) / start * 100 for wert in werte]
Oder etwas anfängerfreundlicher:

Code: Alles auswählen

def gib_abweichungen(werte):
    start = werte[0]
    abweichungen = []
    for wert in werte:
        abweichung = (wert - start) / start * 100
        abweichungen.append(abweichung)
    return abweichungen
foxi76
User
Beiträge: 3
Registriert: Donnerstag 27. Februar 2020, 13:35

Freitag 28. Februar 2020, 20:38

vielen Dank... das ist sehr hilfreich...
Antworten