docstr: Split the data into train, validation, and test sets.
code: def create_splits(self) -> None:
      """Split the data into train, validation, and test sets."""
      self.logger.info("Creating data splits.")
      if self.split_required:
          if self.split_type == "random":
              remainder_df = self.data.copy()
              original_size = remainder_df.shape[0]
              for key, value in self.splits.items():
                  adjusted_frac = (
                      original_size / remainder_df.shape[0]
                  ) * value
                  sample = remainder_df.sample(
                      frac=adjusted_frac, random_state=self.seed
                  )
                  setattr(self, key, sample)
                  sample_indexes = sample.index
                  remainder_df = remainder_df.drop(sample_indexes)
          elif self.split_type == "feature":
              for key, value in self.splits.items():
                  setattr(
                      self,
                      key,
                      self.data[
                          self.data[self.split_feature].isin(value)
                      ],
                  )
      else:
          self.train = self.data.loc[self._indexes[0]]
          self.validation = self.data.loc[self._indexes[1]]
          self.test = self.data.loc[self._indexes[2]]
      self.logger.info("Data splits created successfully.")
  
file_path: aequitas/src/aequitas/fairflow/datasets/generic.py
imports: from pathlib import Path
  from typing import Any, Literal, Optional, Union
  import pandas
  from validators import url
  from ..utils import create_logger
  from .dataset import Dataset
label_desc: Use image node_id 4 for calling the GenericDataset obj's underlying member method code with example usage: obj.create_splits() without return types