class_docstr: Creates a heterogeneous graph from multiple pandas dataframes.
  
  Examples
  --------
  Let's say we have the following three pandas dataframes:
  
  User table ``users``:
  
  ===========  ===========  =======
  ``user_id``  ``country``  ``age``
  ===========  ===========  =======
  XYZZY        U.S.         25
  FOO          China        24
  BAR          China        23
  ===========  ===========  =======
  
  Game table ``games``:
  
  ===========  =========  ==============  ==================
  ``game_id``  ``title``  ``is_sandbox``  ``is_multiplayer``
  ===========  =========  ==============  ==================
  1            Minecraft  True            True
  2            Tetris 99  False           True
  ===========  =========  ==============  ==================
  
  Play relationship table ``plays``:
  
  ===========  ===========  =========
  ``user_id``  ``game_id``  ``hours``
  ===========  ===========  =========
  XYZZY        1            24
  FOO          1            20
  FOO          2            16
  BAR          2            28
  ===========  ===========  =========
  
  One could then create a bidirectional bipartite graph as follows:
  >>> builder = PandasGraphBuilder()
  >>> builder.add_entities(users, 'user_id', 'user')
  >>> builder.add_entities(games, 'game_id', 'game')
  >>> builder.add_binary_relations(plays, 'user_id', 'game_id', 'plays')
  >>> builder.add_binary_relations(plays, 'game_id', 'user_id', 'played-by')
  >>> g = builder.build()
  >>> g.num_nodes('user')
  3
  >>> g.num_edges('plays')
  4
code: def build(self):
      # Create heterograph
      graph = dgl.heterograph(
          self.edges_per_relation, self.num_nodes_per_type
      )
      return graph
  
file_path: dgl/examples/pytorch/pinsage/builder.py
imports: from collections import namedtuple
  import dgl
  from pandas.api.types import is_categorical, is_categorical_dtype, is_numeric_dtype
label_desc: Use image node_id 4 for calling the PandasGraphBuilder obj's underlying member method code with example usage: obj.build() and returns: graph