-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdata_generator.py
57 lines (40 loc) · 1.53 KB
/
data_generator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import os
import numpy as np
import pandas as pd
class BrownianDataGenerator:
def __init__(self, size, scale):
self.size = size
self.scale = scale
def generate(self):
sequence = np.random.normal(loc=0.0, scale=self.scale, size=self.size)
return np.cumsum(sequence)
class SequenceWriter:
def __init__(self, index_col_name, value_col_name):
self.index_col_name = index_col_name
self.value_col_name = value_col_name
def write(self, sequence, output_fn):
data_record = []
for i in range(len(sequence)):
data_record.append(
f"{{\"{self.index_col_name}\":{i}," +
f"\"{self.value_col_name}\":{sequence[i]}}}")
json_string = "[" + ",".join(data_record) + "]"
with open(output_fn, 'w') as f:
f.write(json_string)
class DataWriter:
def __init__(
self,
data_size,
scale,
index_col_name,
value_col_name):
self.data_generator = BrownianDataGenerator(data_size, scale)
self.sequence_writer = SequenceWriter(index_col_name, value_col_name)
def generate_and_write(self, output_fn):
sequence = self.data_generator.generate()
self.sequence_writer.write(sequence, output_fn)
class DataReader:
def data_frame(self, path):
if not os.path.exists(path):
raise FileNotFoundError(f"File {path} does not exist!")
return pd.read_json(path, orient='records')