Ich habe mehrere Reden analysiert, die von 1999 bis 2015 gehen (monatlich). Für jede Rede wurde der Ton (in der Datei tone_i und tone_ii genannt) berechnet. Also war die Rede eher negativ oder positiv gestimmt. Nun ist es so, dass
1. es vorkommen kann, dass in einem Monat mehrere Reden gehalten wurden und
2. nicht jeden Monat eine Rede gehalten wurde.
Damit eine ununterbrochene Zeitreihe entsteht und immer nur ein Wert einem Monat zugewiesen wird, habe ich folgendes vor:
Im Falle von 1. : Es wird der Durchschnitt aller Werte in einem Monat berechnet und übernommen.
Im Falle von 2. : Der vorangegangene monatliche Wert wird für den Monat ohne Reden übernommen. Fand also in Februar keine Rede statt, so wird für Februar der Wert von Januar übernommen.
Jede Rede hat ein bestimmtes Thema behandelt. Für jedes Thema habe ich vor die Zeitreihe i.S.v. x: Datum (hier: "Date") und y: Ton (hier: "tone_i") zu erstellen. Sie soll monatlich von 01/1999-02/2017 gehen.
Bisher habe ich folgenden Code geschrieben:
Code: Alles auswählen
import pandas as pd
#csv Datei wird eingelesen
ecb_seperated_analyzed=pd.read_csv(filepath_or_buffer="python_forum.csv",header=0,sep=',')
#Eine neue DataFrame wird erstellt.
#Für Monate mit mehreren Reden (und wiederum allen Themen) wird der Mittelwert errechnet wie vorhin beschrieben (siehe Fall 1)
ecb_seperated_series=pd.DataFrame()
ecb_seperated_series["tone_i"]=ecb_seperated_analyzed.groupby(["date","date_of_speech","dominant_topic_seperated"])["tone_i"].mean()
#Jetzt konzentrieren wir uns auf die Reden, die die Fiskalpolitik behandeln (fiscal policy -> für ein matching reicht "Fiscal")
#ecb_seperated_analyzed[ecb_seperated_analyzed["dominant_topic_seperated"].str.match("Fiscal")] -> Damit nur die Zeilen ausgegeben werden, die sich um "Fiscal Policy" drehen)
#.resample("M",how=None) -> Da die Zeitreihe nicht durchgängig monatlich verläuft, sondern einige Monate überspringt, sollen diese nun ergänzt werden. Hierfür soll nicht nochmal bspw. ein Mittelwert berechnet werden
# sondern mit .fillna(method="ffill", inplace=True) mit den vorangegangenen Wert gefüllt werden (siehe Fall 2)
ecb_fiscal_seperated_series_tone_i = ecb_seperated_analyzed[ecb_seperated_analyzed["dominant_topic_seperated"].str.match("Fiscal")].resample("M",how=None).fillna(method="ffill", inplace=True)
Die Problemzeile scheint diese Zeile zu sein: ecb_fiscal_seperated_series_tone_i = ecb_seperated_analyzed[ecb_seperated_analyzed["dominant_topic_seperated"].str.match("Fiscal")].resample("M",how=None).fillna(method="ffill", inplace=True)
Das obwohl ich bei der Erstellung der Datei die Zeile per pd.todatetime erstellt habe. Selbst wenn ich in den read_csv parameter die Spalte ("date") als datetime Spalte vorgebe, funktioniert es leider nicht.
Weiss jemand, was ich machen kann? Die Spalte "date_of_speech" ist die Ursprungsspalte, die ich zur datetime-Spalte konvertiert habe, damit die Reden auch chronologisch geordnet sind.
Ich habe für euch hier ein Sample hochgeladen (.csv-Datei auf OneDrive hochgeladen): https://1drv.ms/u/s!As0cHBpV4ab_6xQeeP1 ... Z?e=CbnrtZ
Vielen lieben Dank für jeden Tipp und jede Hilfe im Voraus!
Grüße
pytony