Note
Click here to download the full example code
03. Dummy Data Wrapper
Dummy data wrapper
Warning
Non sense!
Out:
Features:
0 1 2 3 4 5 6
0 NaN NaN NaN NaN NaN NaN 0.015180
1 0.580734 NaN NaN 1.564946 NaN NaN 0.779736
2 NaN NaN 0.396652 NaN 0.776439 NaN NaN
3 NaN NaN NaN -0.585224 -0.640082 NaN NaN
4 NaN NaN NaN NaN NaN -0.506054 NaN
... ... .. ... ... ... ... ...
1995 NaN NaN NaN NaN NaN NaN -0.135976
1996 1.094169 NaN -0.267562 -0.422022 0.369266 -0.326363 NaN
1997 0.092511 NaN NaN NaN NaN 0.516817 NaN
1998 NaN NaN -1.935702 NaN NaN NaN NaN
1999 NaN NaN NaN NaN -0.419821 -1.231021 NaN
[2000 rows x 7 columns]
SimpleImputer()
0 1 2 3 4 5 6
0 0.108353 0.041668 -0.073210 0.008829 0.031561 0.004044 0.015180
1 0.580734 0.041668 -0.073210 1.564946 0.031561 0.004044 0.779736
2 0.108353 0.041668 0.396652 0.008829 0.776439 0.004044 0.022744
3 0.108353 0.041668 -0.073210 -0.585224 -0.640082 0.004044 0.022744
4 0.108353 0.041668 -0.073210 0.008829 0.031561 -0.506054 0.022744
... ... ... ... ... ... ... ...
1995 0.108353 0.041668 -0.073210 0.008829 0.031561 0.004044 -0.135976
1996 1.094169 0.041668 -0.267562 -0.422022 0.369266 -0.326363 0.022744
1997 0.092511 0.041668 -0.073210 0.008829 0.031561 0.516817 0.022744
1998 0.108353 0.041668 -1.935702 0.008829 0.031561 0.004044 0.022744
1999 0.108353 0.041668 -0.073210 0.008829 -0.419821 -1.231021 0.022744
[2000 rows x 7 columns]
SimpleImputer(strategy='median')
0 1 2 3 4 5 6
0 0.082040 0.001391 -0.048016 0.028946 0.034275 0.030538 0.015180
1 0.580734 0.001391 -0.048016 1.564946 0.034275 0.030538 0.779736
2 0.082040 0.001391 0.396652 0.028946 0.776439 0.030538 0.070572
3 0.082040 0.001391 -0.048016 -0.585224 -0.640082 0.030538 0.070572
4 0.082040 0.001391 -0.048016 0.028946 0.034275 -0.506054 0.070572
... ... ... ... ... ... ... ...
1995 0.082040 0.001391 -0.048016 0.028946 0.034275 0.030538 -0.135976
1996 1.094169 0.001391 -0.267562 -0.422022 0.369266 -0.326363 0.070572
1997 0.092511 0.001391 -0.048016 0.028946 0.034275 0.516817 0.070572
1998 0.082040 0.001391 -1.935702 0.028946 0.034275 0.030538 0.070572
1999 0.082040 0.001391 -0.048016 0.028946 -0.419821 -1.231021 0.070572
[2000 rows x 7 columns]
StandardScaler()
0 1 2 3 4 5 6
0 NaN NaN NaN NaN NaN NaN -0.007728
1 0.484713 NaN NaN 1.541448 NaN NaN 0.773445
2 NaN NaN 0.467491 NaN 0.761388 NaN NaN
3 NaN NaN NaN -0.588452 -0.686530 NaN NaN
4 NaN NaN NaN NaN NaN -0.535019 NaN
... ... .. ... ... ... ... ...
1995 NaN NaN NaN NaN NaN NaN -0.162170
1996 1.011552 NaN -0.193371 -0.426789 0.345191 -0.346549 NaN
1997 -0.016255 NaN NaN NaN NaN 0.537824 NaN
1998 NaN NaN -1.853094 NaN NaN NaN NaN
1999 NaN NaN NaN NaN -0.461387 -1.295403 NaN
[2000 rows x 7 columns]
MinMaxScaler()
0 1 2 3 4 5 6
0 NaN NaN NaN NaN NaN NaN 0.506827
1 0.487361 NaN NaN 0.774370 NaN NaN 0.637657
2 NaN NaN 0.654644 NaN 0.597190 NaN NaN
3 NaN NaN NaN 0.418625 0.346324 NaN NaN
4 NaN NaN NaN NaN NaN 0.355317 NaN
... ... .. ... ... ... ... ...
1995 NaN NaN NaN NaN NaN NaN 0.480962
1996 0.564685 NaN 0.562043 0.445627 0.525080 0.380377 NaN
1997 0.413834 NaN NaN NaN NaN 0.497968 NaN
1998 NaN NaN 0.329481 NaN NaN NaN NaN
1999 NaN NaN NaN NaN 0.385333 0.254212 NaN
[2000 rows x 7 columns]
RobustScaler()
0 1 2 3 4 5 6
0 NaN NaN NaN NaN NaN NaN -0.041746
1 0.399006 NaN NaN 1.160497 NaN NaN 0.534462
2 NaN NaN 0.329547 NaN 0.566090 NaN NaN
3 NaN NaN NaN -0.464025 -0.514371 NaN NaN
4 NaN NaN NaN NaN NaN -0.430930 NaN
... ... .. ... ... ... ... ...
1995 NaN NaN NaN NaN NaN NaN -0.155665
1996 0.809806 NaN -0.162707 -0.340721 0.255517 -0.286623 NaN
1997 0.008378 NaN NaN NaN NaN 0.390524 NaN
1998 NaN NaN -1.398980 NaN NaN NaN NaN
1999 NaN NaN NaN NaN -0.346365 -1.013141 NaN
[2000 rows x 7 columns]
11 # Libraries
12 import pandas as pd
13
14 # Libraries specific
15 from sklearn.preprocessing import StandardScaler
16 from sklearn.preprocessing import MinMaxScaler
17 from sklearn.preprocessing import RobustScaler
18 from sklearn.preprocessing import Normalizer
19 from sklearn.impute import SimpleImputer
20
21
22 class DataframeXYWrapper():
23
24 def __init__(self, dataframe, X_columns, y_columns):
25 """
26 """
27 self.dataframe = dataframe
28 self.X_cols = X_columns
29 self.y_cols = y_columns
30
31 def get_X(self):
32 """Return..."""
33 return self.dataframe[self.X_cols]
34
35 def get_y(self):
36 """Return..."""
37 return self.dataframe[self.y_cols]
38
39 def get_X_y(self):
40 """Return...
41 """
42 return self.dataframe[self.X_cols + self.y_cols]
43
44 def apply(self, obj, func, requires_X=False,
45 requires_y=False,
46 argname_X='X',
47 argname_y='y',
48 inplace=True,
49 return_obj=True,
50 **kwargs):
51 """
52 """
53 if requires_X:
54 kwargs[argname_X] = self.get_X()
55 if requires_y:
56 kwargs[argname_y] = self.get_y()
57
58 # Output
59 out = getattr(obj, func)(**kwargs)
60
61 # Inplace
62 if inplace:
63 self.dataframe[self.X_cols] = out
64
65 # Return
66 if return_obj:
67 return obj, out
68 return out
69
70
71
72 # --------------------------------------------------
73 # Main
74 # --------------------------------------------------
75 # Libraries
76 import numpy as np
77
78 N = 2000 # number of observations
79 F = 7 # number of features
80 P = 70 # percent of cells with nan
81
82 # Create dataset
83 X = np.random.randn(N, F)
84 y = (np.random.rand(N) > 0.1).astype(int)
85
86 # Include NaN
87 idxs = np.random.choice(X.size, int(N*F*P/100), replace=False)
88 X.ravel()[idxs] = np.nan
89
90 # Create dataframe
91 dataframe = pd.DataFrame(X)
92 dataframe['y'] = y
93
94 # Create wrapper
95 wrapper = DataframeXYWrapper(dataframe=dataframe,
96 X_columns=list(range(F)),
97 y_columns=['y'])
98 # Show
99 print("Features:")
100 print(wrapper.get_X())
101
102 # ------------------------------
103 # Imputers
104 # ------------------------------
105 # Loop
106 for name, imputer in [
107 ('mean', SimpleImputer(strategy='mean')),
108 ('median', SimpleImputer(strategy='median'))]:
109 # Apply imputer
110 obj, out = wrapper.apply(imputer, 'fit_transform',
111 requires_X=True, inplace=False)
112 # Display
113 print("\n%s" % imputer)
114 print(pd.DataFrame(out))
115
116
117 # ------------------------------
118 # Scalers
119 # ------------------------------
120 # Loop
121 for name, scaler in [('std', StandardScaler()),
122 ('mmx', MinMaxScaler()),
123 ('rbs', RobustScaler())]:
124 # Apply scaler
125 obj, out = wrapper.apply(scaler, 'fit_transform',
126 requires_X=True, inplace=False)
127 # Display
128 print("\n%s" % scaler)
129 print(pd.DataFrame(out))
Total running time of the script: ( 0 minutes 0.063 seconds)