class_docstr: BitcoinOTC dataset for fraud detection
  
  This is who-trusts-whom network of people who trade using Bitcoin on
  a platform called Bitcoin OTC. Since Bitcoin users are anonymous,
  there is a need to maintain a record of users' reputation to prevent
  transactions with fraudulent and risky users.
  
  Offical website: `<https://snap.stanford.edu/data/soc-sign-bitcoin-otc.html>`_
  
  Bitcoin OTC dataset statistics:
  
  - Nodes: 5,881
  - Edges: 35,592
  - Range of edge weight: -10 to +10
  - Percentage of positive edges: 89%
  
  Parameters
  ----------
  raw_dir : str
      Raw file directory to download/contains the input data directory.
      Default: ~/.dgl/
  force_reload : bool
      Whether to reload the dataset.
      Default: False
  verbose: bool
      Whether to print out progress information.
      Default: True.
  transform : callable, optional
      A transform that takes in a :class:`~dgl.DGLGraph` object and returns
      a transformed version. The :class:`~dgl.DGLGraph` object will be
      transformed before every access.
  
  Attributes
  ----------
  graphs : list
      A list of DGLGraph objects
  is_temporal : bool
      Indicate whether the graphs are temporal graphs
  
  Raises
  ------
  UserWarning
      If the raw data is changed in the remote server by the author.
  
  Examples
  --------
  >>> dataset = BitcoinOTCDataset()
  >>> len(dataset)
  136
  >>> for g in dataset:
  ....    # get edge feature
  ....    edge_weights = g.edata['h']
  ....    # your code here
  >>>
code: def process(self):
      filename = os.path.join(self.save_path, self.name + ".csv")
      data = np.loadtxt(filename, delimiter=",").astype(np.int64)
      data[:, 0:2] = data[:, 0:2] - data[:, 0:2].min()
      delta = datetime.timedelta(days=14).total_seconds()
      # The source code is not released, but the paper indicates there're
      # totally 137 samples. The cutoff below has exactly 137 samples.
      time_index = np.around(
          (data[:, 3] - data[:, 3].min()) / delta
      ).astype(np.int64)
  
      self._graphs = []
      for i in range(time_index.max()):
          row_mask = time_index <= i
          edges = data[row_mask][:, 0:2]
          rate = data[row_mask][:, 2]
          g = dgl_graph((edges[:, 0], edges[:, 1]))
          g.edata["h"] = F.tensor(
              rate.reshape(-1, 1), dtype=F.data_type_dict["int64"]
          )
          self._graphs.append(g)
  
imports: import datetime
  import gzip
  import os
  import shutil
  import numpy
  from ..None import backend
  from ..convert import graph
  from .dgl_dataset import DGLBuiltinDataset
  from .utils import check_sha1, download, load_graphs, makedirs, save_graphs
label_desc: Use image node_id 3 for calling the BitcoinOTCDataset obj's underlying member method code with example usage: obj.process() without return types