class_docstr: Class gets data dictionary from DatasetReader instance, merge fields if necessary, split a field if necessary
  
  Args:
      data: dictionary of data with fields "train", "valid" and "test" (or some of them)
      fields_to_merge: list of fields (out of ``"train", "valid", "test"``) to merge
      merged_field: name of field (out of ``"train", "valid", "test"``) to which save merged fields
      field_to_split: name of field (out of ``"train", "valid", "test"``) to split
      split_fields: list of fields (out of ``"train", "valid", "test"``) to which save splitted field
      split_proportions: list of corresponding proportions for splitting
      seed: random seed for iterating
      shuffle: whether to shuffle examples in batches
      split_seed: random seed for splitting dataset, if ``split_seed`` is None, division is based on `seed`.
      stratify: whether to use stratified split
      shot: number of examples to sample for each class in training data. If None, all examples will remain in data.
      *args: arguments
      **kwargs: arguments
  
  Attributes:
      data: dictionary of data with fields "train", "valid" and "test" (or some of them)
class_docstr_tok: ["Class","gets","data","dictionary","from","DatasetReader","instance",",","merge","fields","if","necessary",",","split","a","field","if","necessary","Args",":","data",":","dictionary","of","data","with","fields","``","train","''",",","``","valid","''","and","``","test","''","(","or","some","of","them",")","fields_to_merge",":","list","of","fields","(","out","of","``","``","train","''",",","``","valid","''",",","``","test","''","``",")","to","merge","merged_field",":","name","of","field","(","out","of","``","``","train","''",",","``","valid","''",",","``","test","''","``",")","to","which","save","merged","fields","field_to_split",":","name","of","field","(","out","of","``","``","train","''",",","``","valid","''",",","``","test","''","``",")","to","split","split_fields",":","list","of","fields","(","out","of","``","``","train","''",",","``","valid","''",",","``","test","''","``",")","to","which","save","splitted","field","split_proportions",":","list","of","corresponding","proportions","for","splitting","seed",":","random","seed","for","iterating","shuffle",":","whether","to","shuffle","examples","in","batches","split_seed",":","random","seed","for","splitting","dataset",",","if","``","split_seed","``","is","None",",","division","is","based","on","`","seed","`",".","stratify",":","whether","to","use","stratified","split","shot",":","number","of","examples","to","sample","for","each","class","in","training","data",".","If","None",",","all","examples","will","remain","in","data",".","*","args",":","arguments","*","*","kwargs",":","arguments","Attributes",":","data",":","dictionary","of","data","with","fields","``","train","''",",","``","valid","''","and","``","test","''","(","or","some","of","them",")"]
docstr: Split given field of dataset to the given list of fields with corresponding proportions
  
  Args:
      field_to_split: field name (out of ``"train", "valid", "test"``) which to split
      split_fields: list of names (out of ``"train", "valid", "test"``) of fields to which split
      split_proportions: corresponding proportions
      split_seed: random seed for splitting dataset
      stratify: whether to use stratified split
  
  Returns:
      None
docstr_tok: ["Split","given","field","of","dataset","to","the","given","list","of","fields","with","corresponding","proportions","Args",":","field_to_split",":","field","name","(","out","of","``","``","train","''",",","``","valid","''",",","``","test","''","``",")","which","to","split","split_fields",":","list","of","names","(","out","of","``","``","train","''",",","``","valid","''",",","``","test","''","``",")","of","fields","to","which","split","split_proportions",":","corresponding","proportions","split_seed",":","random","seed","for","splitting","dataset","stratify",":","whether","to","use","stratified","split","Returns",":","None"]
code: def _split_data(
      self,
      field_to_split: str = None,
      split_fields: List[str] = None,
      split_proportions: List[float] = None,
      split_seed: int = None,
      stratify: bool = None,
  ) -> bool:
      """
      Split given field of dataset to the given list of fields with corresponding proportions
  
      Args:
          field_to_split: field name (out of ``"train", "valid", "test"``) which to split
          split_fields: list of names (out of ``"train", "valid", "test"``) of fields to which split
          split_proportions: corresponding proportions
          split_seed: random seed for splitting dataset
          stratify: whether to use stratified split
  
      Returns:
          None
      """
      if split_seed is None:
          split_seed = self.random.randint(0, 10000)
      data_to_div = self.data[field_to_split].copy()
      data_size = len(self.data[field_to_split])
  
      for i in range(len(split_fields) - 1):
          if stratify:
              stratify = [sample[1] for sample in data_to_div]
          self.data[split_fields[i]], data_to_div = train_test_split(
              data_to_div,
              test_size=len(data_to_div)
              - int(data_size * split_proportions[i]),
              random_state=split_seed,
              stratify=stratify,
          )
          self.data[split_fields[-1]] = data_to_div
      return True
  
file_path: DeepPavlov/deeppavlov/dataset_iterators/basic_classification_iterator.py
imports: from collections import defaultdict
  from logging import getLogger
  from typing import List
  from sklearn.model_selection import train_test_split
  from deeppavlov.core.common.registry import register
  from deeppavlov.core.data.data_learning_iterator import DataLearningIterator
label_desc: Use image node_id 2 for calling the BasicClassificationDatasetIterator obj's underlying member method code with example usage: obj._split_data(field_to_split, split_fields, split_proportions, split_seed, stratify) and returns: True