code: def build_multi_class_dataset(
      self, categories: List[str], max_count: int, save_path: Path
  ):
      entries = {
          category: self.get_category_entries(
              category=category, max_count=max_count, account="personal"
          )
          for category in categories
      }
      [shuffle(entries[category]) for category in entries]
      entries = {
          category: build_dataframe(entries[category])
          for category in entries
      }
      for category in entries:
          entries[category]["class"] = category
      df = pd.concat([entries[category] for category in entries])
      np.random.shuffle(df.values)
      limits = [int(0.8 * len(df)), int(0.1 * len(df))]
      split = ["train"] * limits[0] + ["val"] * limits[1]
      split.extend(["test"] * (len(df) - len(split)))
      df["split"] = split
      self.df = df
      self.df.to_csv(path_or_buf=save_path)
  
file_path: transfer-nlp/data/feedly_data.py
imports: import os
  from pathlib import Path
  from random import shuffle
  from typing import List
  import numpy
  import pandas
  import urllib3
  from bs4 import BeautifulSoup
  from feedly.api_client.stream import StreamOptions
  from feedly.api_client.data import Entry
  from feedly.api_client.session import FeedlySession
label_desc: Use image node_id 5 for calling the FeedlyDownloader obj's underlying member method code with example usage: obj.build_multi_class_dataset(categories, max_count, save_path) without return types