Load pickled features for train and test sets, assuming they are saved
        in the `features` folder along with their column names.

        Args:
            feature_lists: A list containing the names of the feature lists to load.

        Returns:
            A tuple containing 3 items: train dataframe, test dataframe,
            and a list describing the index ranges for the feature lists.

def load_feature_lists(self, feature_lists):
        """
        Load pickled features for train and test sets, assuming they are saved
        in the `features` folder along with their column names.

        Args:
            feature_lists: A list containing the names of the feature lists to load.

        Returns:
            A tuple containing 3 items: train dataframe, test dataframe,
            and a list describing the index ranges for the feature lists.
        """

        column_names = []
        feature_ranges = []
        running_feature_count = 0

        for list_id in feature_lists:
            feature_list_names = load_lines(self.features_dir + 'X_train_{}.names'.format(list_id))
            column_names.extend(feature_list_names)
            start_index = running_feature_count
            end_index = running_feature_count + len(feature_list_names) - 1
            running_feature_count += len(feature_list_names)
            feature_ranges.append([list_id, start_index, end_index])

        X_train = np.hstack([
            load(self.features_dir + 'X_train_{}.pickle'.format(list_id))
            for list_id in feature_lists
        ])
        X_test = np.hstack([
            load(self.features_dir + 'X_test_{}.pickle'.format(list_id))
            for list_id in feature_lists
        ])

        df_train = pd.DataFrame(X_train, columns=column_names)
        df_test = pd.DataFrame(X_test, columns=column_names)

        return df_train, df_test, feature_ranges