| 93 | |
| 94 | |
| 95 | class FraudDataset(InMemoryDataset): |
| 96 | ''' |
| 97 | |
| 98 | ''' |
| 99 | url = 'https://data.dgl.ai/' |
| 100 | file_urls = { |
| 101 | "yelp": "dataset/FraudYelp.zip", |
| 102 | "amazon": "dataset/FraudAmazon.zip", |
| 103 | } |
| 104 | relations = { |
| 105 | "yelp": ["net_rsr", "net_rtr", "net_rur"], |
| 106 | "amazon": ["net_upu", "net_usu", "net_uvu"], |
| 107 | } |
| 108 | file_names = {"yelp": "YelpChi.mat", "amazon": "Amazon.mat"} |
| 109 | node_name = {"yelp": "review", "amazon": "user"} |
| 110 | |
| 111 | def __init__(self, root, name, transform=None, pre_transform=None, random_seed=717, |
| 112 | train_size=0.7, val_size=0.1, force_reload=False): |
| 113 | |
| 114 | self.name = name |
| 115 | assert self.name in ['yelp', 'amazon'] |
| 116 | |
| 117 | self.url = osp.join(self.url, self.file_urls[self.name]) |
| 118 | self.seed = random_seed |
| 119 | self.train_size = train_size |
| 120 | self.val_size = val_size |
| 121 | |
| 122 | super().__init__(root, transform, pre_transform) |
| 123 | self.load(self.processed_paths[0]) |
| 124 | |
| 125 | @property |
| 126 | def raw_dir(self): |
| 127 | return osp.join(self.root, self.name, 'raw') |
| 128 | |
| 129 | @property |
| 130 | def processed_dir(self): |
| 131 | return osp.join(self.root, self.name, 'processed') |
| 132 | |
| 133 | @property |
| 134 | def raw_file_names(self): |
| 135 | names = [self.file_names[self.name]] |
| 136 | return names |
| 137 | |
| 138 | @property |
| 139 | def processed_file_names(self): |
| 140 | return 'data.pt' |
| 141 | |
| 142 | def download(self): |
| 143 | path = download_url(self.url, self.raw_dir) |
| 144 | extract_zip(path, self.raw_dir) |
| 145 | os.unlink(path) |
| 146 | |
| 147 | def process(self): |
| 148 | file_path = os.path.join(self.raw_dir, self.raw_file_names[0]) |
| 149 | |
| 150 | data = io.loadmat(file_path) |
| 151 | node_features = torch.FloatTensor(data["features"].todense()) |
| 152 | # remove additional dimension of length 1 in raw .mat file |