import numpy as np 
import pandas as pd 
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor
from boruta import BorutaPy
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import MinMaxScaler 


df = pd.read_csv(".....csv", delimiter=',')

X_train, X_test, y_train, y_test = train_test_split(df, dlr_mov, test_size=0.30, random_state=42)

scaler = MinMaxScaler([0,1])
X_train = scaler.fit_transform(X_train)
X_test = scaler.fit_transform(X_test)

rf_all_features = RandomForestClassifier(n_estimators=50, n_jobs=4, max_depth=None, random_state=42, verbose = 1)
X_train, y_train = np.array(X_train), np.array(y_train).ravel()
X_test, y_test = np.array(X_test), np.array(y_test).ravel()
rf_all_features.fit(X_train, y_train.ravel()) 

acc_tr = accuracy_score(y_train, rf_all_features.predict(X_train))
print("Train accuracy: ", acc_tr)

acc_ts = accuracy_score(y_test, rf_all_features.predict(X_test))
print("Test accuracy: ", acc_ts)

rfc = RandomForestClassifier(n_jobs=4, random_state=1, n_estimators=50, max_depth= None)
X_train, y_train = np.array(X_train), np.array(y_train).ravel()
X_test, y_test = np.array(X_test), np.array(y_test).ravel()
boruta_selector = BorutaPy(rfc, n_estimators=10, max_iter = 300, verbose=2, perc = 0.1, random_state=1)
boruta_selector.fit(np.array(X_train), np.array(y_train).ravel())  

print("Ranking: ",boruta_selector.ranking_)          
print("No. of significant features: ", boruta_selector.n_features_) 

X_filtered_tr = boruta_selector.transform(X_train)
X_filtered_ts= boruta_selector.transform(X_test)