Seite 1 von 1

Neue Spalte extrahieren aus 2 Spalten mit Numpy & Pandas gleichzeitig (Feature Extraktion für Maschinelles Lernen)

Verfasst: Freitag 31. Mai 2019, 17:23
von Bayne
Hey liebe Nutzer

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
Ich bin dankbar für alles was mir weiterhelfen kann

Re: Neue Spalte extrahieren aus 2 Spalten mit Numpy & Pandas gleichzeitig (Feature Extraktion für Maschinelles Lernen)

Verfasst: Samstag 1. Juni 2019, 08:04
von ThomasL
Eventuell hilfreich könnte diese Playlist hier von sentdex sein
https://www.youtube.com/watch?v=2BrpKpW ... QksErCEBYZ