Problem mit Korrelationsberechnung

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.
yannik0802
User
Beiträge: 5
Registriert: Freitag 23. Dezember 2016, 13:46

Problem mit Korrelationsberechnung

Beitragvon yannik0802 » Sonntag 12. Februar 2017, 11:28

Hallo Ihr Lieben,

ich habe aktuell ein Problem und komme leider nicht weiter, bin im Umgang mit python noch sehr grün hinter den Ohren. :mrgreen:

Ich versuche aktuell die Korrelation der Schlusskurse vom DAX & SP500 seit 2000 zu berechnen. Diese habe ich in zwei unterschiedlichen csv-Dateien gespeichert. Im Folgenden mal mein Code:

  1. import pandas as pd
  2. import numpy as np
  3. from scipy.stats.stats import pearsonr
  4.  
  5. data_file1 = 'DAX30.csv'
  6. data_file2 = 'SP500.csv'
  7.  
  8. # read data from csv
  9. df1 = pd.read_csv(data_file1, parse_dates=True, index_col=0)
  10. df2 = pd.read_csv(data_file2, parse_dates=True, index_col=0)
  11.  
  12. cor1 = np.corrcoef(df1['Adj Close'], df2['Adj Close'])[0,1]
  13.  
  14. cor2 = pearsonr(df1['Adj Close'], df2['Adj Close'])


Versucht habe ich es bisher mit corrcoef() und pearsonr() (wie Ihr im Code sehen könnt)

Bei corrcoef() erhalte ich folgende Fehlermeldung:
ValueError: all the input array dimensions except for the concatenation axis must match exactly

und bei pearsonr() diese:
ValueError: operands could not be broadcast together with shapes (4361,) (4305,)

Ich verstehe, dass meine Daten offensichtlich nicht genau zusammen passen. Ich habe bereits versucht über .shape() oder .reshape() meine Daten zu shapen, aber leider gelingt mir das nicht. Wie genau schaffe ich es nun die Daten für meine Korrelationsberechnung verfügbar zu machen?

Ich freue mich über jeglichen Input.

Lg Yannik
Zuletzt geändert von BlackJack am Sonntag 12. Februar 2017, 12:09, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
BlackJack
Moderator
Beiträge: 33025
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Problem mit Korrelationsberechnung

Beitragvon BlackJack » Sonntag 12. Februar 2017, 12:34

@yannik0802: Die Anzahl der Daten unterscheidet sich offenbar geringfügig wenn man die Zahlen in der zweiten Fehlermeldung vergleicht. Das bekommst sich nicht mit einem `reshape()` weg, Du musst halt überlegen warum sich die Daten unterscheiden und wie Du das lösen willst. Fehlen Daten die man auffüllen kann/muss, falls ja wie? Oder kann man die Daten die zu viel sind einfach raus filtern?
“Programs must be written for people to read, and only incidentally for machines to execute.” — Abelson & Sussman, SICP (preface to the first edition)
yannik0802
User
Beiträge: 5
Registriert: Freitag 23. Dezember 2016, 13:46

Re: Problem mit Korrelationsberechnung

Beitragvon yannik0802 » Sonntag 12. Februar 2017, 18:01

@BlackJack: Erstmal danke für deine Antwort und den Input.

Ich glaube die Anzahl der Datensätze unterscheidet sich aufgrund der unterschiedlichen Feiertagen ind DE und USA. Schließlich handelt es sich ja um Schlusskurse und an Feiertagen wird nicht gehandelt. Wie ich damit nun umgehe, ist tatsächlich eine gute Frage.

Ich hätte eine Idee, aber weiss leider nicht wie ich diese umsetzen kann.
Prinzipiell habe ich in meinen dataframes außer den Adj Close Daten auch noch Zeitangaben im Format 09-01-2016 (zb) gespeichert. Gibt es eine Möglichkeit wie ich die Zeitangaben quasi als "Index" für die Korrelationsberechnung nutzen kann?

Ich würde zum Beispiel gerne für jeden Tag X die Korrelation der beiden Kurse über eine festgelegte Periode (z.B. 30 Handelstage) berechnen lassen.

Am 30.01 sollte dann z.B. die Korrelation von DAX und SP500 vom 01.-30.01 berechnet werden. Am 31. dann vom 02.-31.01 etc.

Vielleicht ginge das mit so etwas in der Richtung:

Code: Alles auswählen

for line in df1['Date']:
   if df1['Date'] == df2['Date']:
      cor1 = corrcoef(df1['Adj Close'], df2['Adj Close'])
      return cor1
   else:
      return False


Könnte man die False-Werte dann einfach irgendwie ignorieren? Oder bekomme ich dann ein Problem, weil ich wieder nicht genau gleich viele Werte für die Korrelationsberechnung habe?

Kann ich irgendwie definieren, dass anstatt von False z.B. der letzte ermittelte Wert ausgegeben wird?

Ich bin mir sicher, dass das alles funktioniert, aber leider hab ich viel zu wenig Ahnung :?
Benutzeravatar
BlackJack
Moderator
Beiträge: 33025
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Problem mit Korrelationsberechnung

Beitragvon BlackJack » Sonntag 12. Februar 2017, 18:45

@yannik0802: Arbeite am besten mal ein Tutorial zu `pandas` durch und schau Dich in der Dokumentation um. Man kann Datumsangaben als Index verwenden. Was bei Zeitreihen auch Sinn macht. Und man kann Dataframes beispielsweise mit `join()` über den Index ”joinen” ähnlich wie bei Datenbanken.
“Programs must be written for people to read, and only incidentally for machines to execute.” — Abelson & Sussman, SICP (preface to the first edition)
yannik0802
User
Beiträge: 5
Registriert: Freitag 23. Dezember 2016, 13:46

Re: Problem mit Korrelationsberechnung

Beitragvon yannik0802 » Sonntag 12. Februar 2017, 18:50

Okay, werde ich machen. Danke dir.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder