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 NaN
1 0.431650 NaN 1.494026 NaN NaN NaN NaN
2 NaN NaN 1.276648 NaN NaN NaN NaN
3 -2.151832 -0.911728 NaN NaN NaN NaN NaN
4 -0.344984 NaN 0.567442 NaN NaN 0.046889 NaN
... ... ... ... ... ... ... ...
1995 0.114631 NaN 0.499642 NaN NaN NaN 0.842285
1996 NaN NaN -1.025954 -0.457557 NaN NaN 0.099235
1997 NaN NaN -0.011799 NaN NaN 1.386205 0.941873
1998 NaN NaN NaN NaN NaN NaN NaN
1999 0.321509 0.865638 0.410198 NaN -0.496402 NaN NaN
[2000 rows x 7 columns]
SimpleImputer()
0 1 2 3 4 5 6
0 0.008945 -0.075735 0.014617 0.034992 -0.017233 -0.099410 0.053082
1 0.431650 -0.075735 1.494026 0.034992 -0.017233 -0.099410 0.053082
2 0.008945 -0.075735 1.276648 0.034992 -0.017233 -0.099410 0.053082
3 -2.151832 -0.911728 0.014617 0.034992 -0.017233 -0.099410 0.053082
4 -0.344984 -0.075735 0.567442 0.034992 -0.017233 0.046889 0.053082
... ... ... ... ... ... ... ...
1995 0.114631 -0.075735 0.499642 0.034992 -0.017233 -0.099410 0.842285
1996 0.008945 -0.075735 -1.025954 -0.457557 -0.017233 -0.099410 0.099235
1997 0.008945 -0.075735 -0.011799 0.034992 -0.017233 1.386205 0.941873
1998 0.008945 -0.075735 0.014617 0.034992 -0.017233 -0.099410 0.053082
1999 0.321509 0.865638 0.410198 0.034992 -0.496402 -0.099410 0.053082
[2000 rows x 7 columns]
SimpleImputer(strategy='median')
0 1 2 3 4 5 6
0 0.032924 -0.104899 0.022030 -0.017016 -0.057768 -0.083552 0.073601
1 0.431650 -0.104899 1.494026 -0.017016 -0.057768 -0.083552 0.073601
2 0.032924 -0.104899 1.276648 -0.017016 -0.057768 -0.083552 0.073601
3 -2.151832 -0.911728 0.022030 -0.017016 -0.057768 -0.083552 0.073601
4 -0.344984 -0.104899 0.567442 -0.017016 -0.057768 0.046889 0.073601
... ... ... ... ... ... ... ...
1995 0.114631 -0.104899 0.499642 -0.017016 -0.057768 -0.083552 0.842285
1996 0.032924 -0.104899 -1.025954 -0.457557 -0.057768 -0.083552 0.099235
1997 0.032924 -0.104899 -0.011799 -0.017016 -0.057768 1.386205 0.941873
1998 0.032924 -0.104899 0.022030 -0.017016 -0.057768 -0.083552 0.073601
1999 0.321509 0.865638 0.410198 -0.017016 -0.496402 -0.083552 0.073601
[2000 rows x 7 columns]
StandardScaler()
0 1 2 3 4 5 6
0 NaN NaN NaN NaN NaN NaN NaN
1 0.438394 NaN 1.486817 NaN NaN NaN NaN
2 NaN NaN 1.268350 NaN NaN NaN NaN
3 -2.240981 -0.890658 NaN NaN NaN NaN NaN
4 -0.367067 NaN 0.555593 NaN NaN 0.156534 NaN
... ... ... ... ... ... ... ...
1995 0.109608 NaN 0.487454 NaN NaN NaN 0.805312
1996 NaN NaN -1.045781 -0.485475 NaN NaN 0.047095
1997 NaN NaN -0.026548 NaN NaN 1.589554 0.906933
1998 NaN NaN NaN NaN NaN NaN NaN
1999 0.324165 1.002927 0.397562 NaN -0.461021 NaN NaN
[2000 rows x 7 columns]
MinMaxScaler()
0 1 2 3 4 5 6
0 NaN NaN NaN NaN NaN NaN NaN
1 0.618881 NaN 0.672468 NaN NaN NaN NaN
2 NaN NaN 0.639448 NaN NaN NaN NaN
3 0.158435 0.342128 NaN NaN NaN NaN NaN
4 0.480464 NaN 0.531720 NaN NaN 0.555894 NaN
... ... ... ... ... ... ... ...
1995 0.562380 NaN 0.521421 NaN NaN NaN 0.614038
1996 NaN NaN 0.289683 0.431244 NaN NaN 0.477975
1997 NaN NaN 0.443733 NaN NaN 0.772594 0.632273
1998 NaN NaN NaN NaN NaN NaN NaN
1999 0.599251 0.673000 0.507834 NaN 0.497717 NaN NaN
[2000 rows x 7 columns]
RobustScaler()
0 1 2 3 4 5 6
0 NaN NaN NaN NaN NaN NaN NaN
1 0.309086 NaN 1.204426 NaN NaN NaN NaN
2 NaN NaN 1.026561 NaN NaN NaN NaN
3 -1.693589 -0.611088 NaN NaN NaN NaN NaN
4 -0.292949 NaN 0.446270 NaN NaN 0.101739 NaN
... ... ... ... ... ... ... ...
1995 0.063337 NaN 0.390795 NaN NaN NaN 0.568552
1996 NaN NaN -0.857488 -0.327481 NaN NaN 0.018960
1997 NaN NaN -0.027680 NaN NaN 1.146353 0.642211
1998 NaN NaN NaN NaN NaN NaN NaN
1999 0.223706 0.735080 0.317609 NaN -0.287626 NaN 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.075 seconds)