Matplotlib

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Schlummerman
User
Beiträge: 11
Registriert: Freitag 2. Juli 2021, 15:01

Hallo an Alle! :D

Ich bin gerade etwas mit historischen Aktiendaten am experimentieren und da habe ich mich gefragt, wie man die in Python mittels Matplotlib darstellen kann :roll:

Ich habe es ausprobiert, doch irgendwie ist das Diagramm "Überladen". Ich denke mal es sind zu viele Datensätze(9750 pro Achse).

Wie kann ich nun einen Aktien Chart darstellen? Geht es überhaupt mit Matplotlib?

Danke für eure Vorschläge und Lösungen! :D
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ohne zu sehen, was du da machst, kann man das nicht beurteilen. Das es irgendeine Mindestanzahl an Daten darzustellen gäbe, ist jedenfalls eine recht gewagte Schlussfolgerung.
Schlummerman
User
Beiträge: 11
Registriert: Freitag 2. Juli 2021, 15:01

Um Grunde hat die csv zwei Werte: Uhrzeit und Briefwert als Komma Zahl.

Diese packe ich in jeweils in eine Liste und lasse es dann einfach per Plt.plot(x,y) ausgeben. Allerdings zeigt er wirklich alle Daten an. Daraus wird dann nur ein "schwarzer Balken" vor lauter Text.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann hast Du wohl die Uhrzeit nicht als Datumsobjekt sondern als String und/oder die Kommazahl nicht als Zahl sondern als String.
Du mußt beides in die passenden Typen umwandeln.
Am einfachsten geht das, wenn Du pandas benutzt.
Schlummerman
User
Beiträge: 11
Registriert: Freitag 2. Juli 2021, 15:01

Wie wandelt man den 08:00:01 und 2,940 in den passenden Datumstyp mit pandas um?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Indem man es benutzt wie *ausführlich* dokumentiert. Wo ist dein Code, wo deine Beispieldaten, was verstehst du nicht?
Schlummerman
User
Beiträge: 11
Registriert: Freitag 2. Juli 2021, 15:01

Akutell läuft das so:

import matplotlib.pyplot as plt
import csv
import numpy as np
import math
from datetime import datetime

y = []
x = []

with open('Test.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=",")
for row in readCSV:
splitter = row[1].split(",")
setter = splitter[0] + "." + splitter[1]
y.append(float(setter))
x.append(datetime.strptime(row[0], "%H:%M:%S"))
x.reverse()
y.reverse()

plt.plot(x,y)
plt.title(f"Kurs daten von heute")
plt.show()
#plt.savefig(f"{sym}.png")

Die Daten ziehe ich mir aus der Börse Frankfurt.
und kommen als CSV Datei an.
beispiel: Uhr 08:00:01 und Wert 2,990

wie Wandel ich das ganze jetzt mit pandas um? :D
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Schlummerman: Da ist tatsächlich der CSV-Trenner das Komma *und* die Zahlen enthalten ein Dezimal*komma*? Also klar ist das möglich, aber nicht so wirklich wahrscheinlich.

Wenn da nur die Uhrzeit ohne Datum ist, dann will man sehr wahrscheinlich die Tick-Beschriftungen explizit beeinflussen, damit da nicht irgendwo doch mal das Datum 01.01.1900 in der Beschriftung auftaucht.

"," durch "." ersetzen geht einfacher in dem man genau das macht: das "," durch "." ersetzen. Zeichenketten haben dafür eine Methode.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Plan war schon, dass *du* versuchst das mit pandas zu lösen. Und bei Problemen den dazugehörigen Code zeigst.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__: doch, das Format ist so, dank "":

Code: Alles auswählen

"TIME";"ISIN";"PRODUCT TYPE";"ISSUER";"UNDERLYING";"PRICE";"VOLUME"
"22.11.2021 21:59:55";"DE000PF7KWW7";"Optionsschein Call";"BNP Paribas Emissions- und Handelsges.";"NASDAQ 100";"7,37";"200"
"22.11.2021 21:59:38";"DE000VX22VN6";"Optionsschein Put";"Vontobel Financial Products GmbH";"Nvidia Corporation";"0,25";"2000"
"22.11.2021 21:59:38";"DE000VP2ABQ5";"Knock-Out & Open-End Knock-Out Call";"Vontobel Financial Products GmbH";"Newmont Corp.";"1";"100"
"22.11.2021 21:59:33";"DE000DV4KUE0";"Knock-Out & Open-End Knock-Out Put";"DZ BANK AG";"DAX Performance";"3,62";"93"
Schlummerman
User
Beiträge: 11
Registriert: Freitag 2. Juli 2021, 15:01

Also es funktioniert er ruft die Grafik lesbar auf. Auch ohne Pandas :D
Wenn ihr Tipps und Verbesserungen habt wäre ich damit sehr glücklich! :)
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Ich weiss dass das geht, aber das was Du da jetzt zeigst ist ja was anderes, denn da sind Semikolons als Trenner auf CSV-Ebene. Der Code vom OP behauptet Komma für CSV-Trenner *und* Dezimaltrenner. Wie gesagt, das geht, aber es ist unwahrscheinlich.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ah, ich habe nur auf die Formatierung der Zahlwerte geachtet. Vor allem denke ich wird es schon beim TE sein wie angegeben, denn sonst würde er ja nicht das Problem haben, das er hat, sondern schon vorher scheitern.
Antworten