-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmetametrik2sql
executable file
·92 lines (65 loc) · 2.36 KB
/
metametrik2sql
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python
import json
import psycopg2
import sys
def tuple_from_frag(frag, keys):
deref = lambda i: frag[i]
return tuple(map(deref, keys))
def get_var(frag):
return tuple_from_frag(
frag,
["variable_name", "variable_description"]
)
def get_model(frag):
return tuple_from_frag(
frag,
["model_type", "sample_size", "model_name", "goodness_of_fit"]
)
def get_effect(frag):
return tuple_from_frag(
frag,
["independent_variable", "model_name", "standard_error", "significance"]
)
def check_effect(e, models, ivs):
iv_names = [iv[0] for iv in ivs]
model_names = [m[2] for m in models]
assert e[0] in iv_names
assert e[1] in model_names
def save(dv, ivs, models, effects):
db = psycopg2.connect(database="metametrik")
c = db.cursor()
def save_var(var):
sql = 'insert into var (name, description) values (%s, %s) returning var_id'
c.execute(sql, var)
return (var[0], c.fetchone()[0])
def save_result_set(dv_id):
sql = 'insert into result_set (dependent_var) values (%s) returning rs_id'
c.execute(sql, (dv_id,))
return c.fetchone()[0]
def save_model(model):
# fixme
x = (model[2], model[1], model[2], model[3])
sql = 'insert into model (name, sample_size, description, r_squared) values (%s, %s, %s, %s) returning model_id'
c.execute(sql, x)
return (model[2], c.fetchone()[0])
def save_effect(e):
sql = 'insert into effect (model_id, var_id, coefficient, standard_error) values (%s, %s, %s, %s)'
c.execute(sql, e)
_, dv_id = save_var(dv)
save_result_set(dv_id)
variables = dict([ save_var(var) for var in ivs ])
model_data = dict([ save_model(m) for m in models ])
for effect in effects:
e = (model_data[effect[1]], variables[effect[0]], effect[2], effect[3])
save_effect(e)
db.commit()
def run():
data = json.load(sys.stdin)["regression_result_set"]
dv = get_var(data["dependent_variable"])
models = [ get_model(m) for m in data["models"] ]
ivs = [ get_var(iv) for iv in data["independent_variables"] ]
effects = [ get_effect(e) for e in data["effects"] ]
[ check_effect(e, models, ivs) for e in effects ]
save(dv, ivs, models, effects)
if __name__ == '__main__':
run()