Ich hänge seit geraumer Zeit an folgendem:
Gegeben : Gegebene spalten sind erstmal Börsenpreisdaten (als Timeseries) (öffnungs, höchst, tief und schlusskurse der jeweiligen Stunde)
UND Zeitdaten im Format "YYYY-mm-dd" und "HH:MM:SS" (Datum und uhrzeiten als getrennte spalten).
Ziel :Ich möchte zum Zweck des Maschinellen Lernens eine Klasse schreiben mit der ich bestimmte "Features" (Spalten) aus anderen Features (andere Spalten) extrahieren kann, aber auch bestimmte Spalten nicht extrahiere, sondern weglasse. Eine Art Optimierungstool. Nur der True/False flag müsse verändert werden.
Ich will aber NumPy dabei möglichst vermeiden, da es sich nicht mit Pandas verträgt. ( der dataframe ist im Pandas format)
Nun möchte ich aber jeweils den MonatsTag (1ster, 2ter,... 31ster etc) und den WochenTag (1-7) als Extrahierungsmöglichkeiten haben. (klappt mit .day & .weekday), aber auch spalten wie den Eröffnungskurs vom Schlusskurs subtrahiert als "Stundenbewegung" haben ( keine Ahnung wie ich das machen kann ohne Numpy) und eine Prozentveränderung der Werte von Std zu stunde( mitpandas.DataFrame.pct_change).
Ich kenne folgendes Beispiel (jedoch leider mit NumPy) welches mir die Möglichkeit bietet aus einem Immobielen DataFrame die Anzahl der Betten aus der Anzahl der Zimmer und der Schlafzimmer (abhängig vom flag true/false) zu extrahieren oder nicht zu extrahieren:
Code: Alles auswählen
#X = Dataframe wobei die NAN Werte durch den Medianwert ersetzt wurden (Data Clearning)
#df = dataframe = "Tabelle" mit Zeit & Preisen ( im pandas format ), wird am ende in die Methode eingesetzt.
''' sieht so aus:
longitude latitude housing_median_age total_rooms total_bedrooms \
0 -121.89 37.29 38.0 1568.0 351.0
1 -121.93 37.05 14.0 679.0 108.0
2 -117.20 32.77 31.0 1952.0 471.0
3 -119.61 36.31 25.0 1847.0 371.0
4 -118.59 34.23 17.0 6592.0 1525.0
5 -120.97 37.66 24.0 2930.0 588.0
population households median_income
0 710.0 339.0 2.7042
1 306.0 113.0 6.4214
2 936.0 462.0 2.8621
3 1460.0 353.0 1.8839
4 4459.0 1463.0 3.0347
5 1448.0 570.0 3.5395
'''
from sklearn.base import BaseEstimator, TransformerMixin
rooms_ix, bedrooms_ix, population_ix, households_ix = 3,4,5,6 # einfach nur die Position der Spalten
class CombinedAttributesAdder(BaseEstimator, TransformerMixin):
def __init__ (self, add_bedrooms_per_room = True): # no *args or **kargs
self.add_bedrooms_per_room = add_bedrooms_per_room
def fit(self,X,y=None):
return self # nothing else to do
def transform (self, X, y =None):
rooms_per_household = X[:,rooms_ix] / X[:,households_ix]
population_per_household = X[:,population_ix] / X[:,households_ix]
if self.add_bedrooms_per_room:
bedrooms_per_room = X[:,bedrooms_ix] / X[:,rooms_ix]
return np.c_[X, rooms_per_household, population_per_household, bedrooms_per_room]
else:
return np.c_[X, rooms_per_household, population_per_household]
attr_adder = CombinedAttributesAdder(add_bedrooms_per_room=False)
housing_extra_attribs = attr_adder.transform(df.values)
Der konkrete Fall: In meinem falle handelt es sich jedoch wie gesagt um Börsenpreise und deren Zeiten und die klasse soll die möglichkeit bieten (Monatstag, Wochentag, Prozentveränderung pro spalte und Differenz zwischen open & Close zu liefern)
Code: Alles auswählen
<OPEN> <HIGH> <LOW> <CLOSE> <TICKVOL>
<DATE>_<TIME>
2014-01-01 23:00:00 1.37550 1.37648 1.37372 1.37580 2671
2014-01-02 00:00:00 1.37581 1.37730 1.37578 1.37645 2914
2014-01-02 01:00:00 1.37645 1.37684 1.37581 1.37586 2182
2014-01-02 02:00:00 1.37585 1.37662 1.37504 1.37626 2535
2014-01-02 03:00:00 1.37624 1.37676 1.37596 1.37660 2250
2014-01-02 04:00:00 1.37659 1.37749 1.37633 1.37655 1925
2014-01-02 05:00:00 1.37656 1.37656 1.37441 1.37457 2400
2014-01-02 06:00:00 1.37457 1.37583 1.37442 1.37577 3185
2014-01-02 07:00:00 1.37574 1.37580 1.37468 1.37502 2168