question about splitting data set by attributes and labels
You could indeed use an X to have it all. However your downstream models expect the features and labels (I.e. Xs and ys) to be referenced via different object pointers in order to train and evaluate the model.
E.g
model.fit(X,y)