code: def make_tutorial_data(n: int) -> pd.DataFrame:
      """
      Generates fake data for a tutorial. There are 3 numerical features ("num1", "num3" and "num3")
      and tow categorical features ("cat1" and "cat2")
      sex, age and severity, the treatment is a binary variable, medication and the response
      days until recovery.
  
      Parameters
      ----------
      n : int
          The number of samples to generate
  
      Returns
      ----------
      df : pd.DataFrame
          A tutorial dataset
      """
      np.random.seed(1111)
  
      dataset = pd.DataFrame(
          {
              "id": list(
                  map(
                      lambda x: "id%d" % x, np.random.randint(0, 100, n)
                  )
              ),
              "date": np.random.choice(
                  pd.date_range("2015-01-01", periods=100), n
              ),
              "feature1": np.random.gamma(20, size=n),
              "feature2": np.random.normal(40, size=n),
              "feature3": np.random.choice(["a", "b", "c"], size=n),
          }
      )
  
      dataset["target"] = (
          dataset["feature1"]
          + dataset["feature2"]
          + dataset["feature3"].apply(
              lambda x: 0 if x == "a" else 30 if x == "b" else 10
          )
          + np.random.normal(0, 5, size=n)
      )
  
      # insert some NANs
      dataset.loc[np.random.randint(0, n, 100), "feature1"] = nan
      dataset.loc[np.random.randint(0, n, 100), "feature3"] = nan
  
      return dataset
  
imports: from typing import Tuple
  import numpy
  from numpy import nan
  import pandas
label_desc: Use image node_id 1 for calling a global function with example usage: make_tutorial_data(n) and returns: dataset