In [2]:
import sqlexperiment as sqle
from sqlexperiment import experimentlog
from sqlexperiment.experimentlog import ExperimentLog
from sqlexperiment import extract
from sqlexperiment import pseudo
import pandas as pd
# log some JSON data
e = ExperimentLog(":memory:", ntp_sync=False)
# now register the user with the database
user = pseudo.get_pseudo()
e.create("USER", name=user, data={"age":30, "leftright":"right"})
e.cd("/Experiment/Condition1")
e.bind("USER",user)
e.log("mouse", data={"x":0, "y":0})
e.log("mouse", data={"x":0, "y":1})
e.log("mouse", data={"x":0, "y":2})
e.cd("/Experiment/Condition2")
e.bind("USER",user)
e.log("mouse", data={"x":0, "y":0})
e.log("mouse", data={"x":0, "y":1})
e.log("mouse", data={"x":0})
e.leave(valid=False)
e.enter('Condition2')
e.log("mouse", data={"x":0, "y":0})
e.log("mouse", data={"x":0, "y":1})
e.log("mouse", data={"x":0}, valid=0)
e.enter('SubconditionA')
e.cd("/Experiment/Condition1")
e.bind("USER",user)
e.log("mouse", data={"x":0, "y":0})
e.log("mouse", data={"x":0, "y":1})
e.log("mouse", data={"x":0, "y":2})
e.cd("/Experiment/Condition2")
e.bind("USER",user)
e.log("mouse", data={"x":0, "y":0})
e.log("mouse", data={"x":0, "y":1})
e.log("mouse", data={"x":0})
e.leave()
e.enter('Condition2')
e.log("mouse", data={"x":0, "y":0})
e.log("mouse", data={"x":0, "y":1})
e.log("mouse", data={"x":0}, valid=0)
e.enter('SubconditionA')
e.end()


07-27 17:30 [WARNI]  No stream mouse registered; creating a new blank entry

In [3]:
meta, bound_ix = extract.meta(e.cursor)
print(extract.meta_dataframe(e.cursor))


{u'PATH':   bound  data description                                   name  type
0    []  None        None                           /Experiment/  None
1    []  None        None                /Experiment/Condition1/  None
2    []  None        None                /Experiment/Condition2/  None
3    []  None        None  /Experiment/Condition2/SubconditionA/  None, u'USER':           bound                                  data description  \
0  [3, 4, 7, 8]  {u'age': 30, u'leftright': u'right'}               

          name type  
0  POSUD-OMARU       , u'STREAM':   bound  data description   name  type
0    []  None              mouse  AUTO, u'DATASET':   bound                 data description  name  type
0    []  {u'stage': u'init'}        None  None  None}

In [4]:
df = extract.dump_flat_dataframe(e.cursor)
print(df)


{u'mouse':     session_valid  session             t  x    y                     path  \
0             1.0        3  1.501173e+09  0  0.0  /Experiment/Condition1/   
1             1.0        3  1.501173e+09  0  1.0  /Experiment/Condition1/   
2             1.0        3  1.501173e+09  0  2.0  /Experiment/Condition1/   
3             0.0        4  1.501173e+09  0  0.0  /Experiment/Condition2/   
4             0.0        4  1.501173e+09  0  1.0  /Experiment/Condition2/   
5             0.0        4  1.501173e+09  0  NaN  /Experiment/Condition2/   
6             1.0        5  1.501173e+09  0  0.0  /Experiment/Condition2/   
7             1.0        5  1.501173e+09  0  1.0  /Experiment/Condition2/   
8             1.0        5  1.501173e+09  0  NaN  /Experiment/Condition2/   
9             1.0        7  1.501173e+09  0  0.0  /Experiment/Condition1/   
10            1.0        7  1.501173e+09  0  1.0  /Experiment/Condition1/   
11            1.0        7  1.501173e+09  0  2.0  /Experiment/Condition1/   
12            1.0        8  1.501173e+09  0  0.0  /Experiment/Condition2/   
13            1.0        8  1.501173e+09  0  1.0  /Experiment/Condition2/   
14            1.0        8  1.501173e+09  0  NaN  /Experiment/Condition2/   
15            NaN        9  1.501173e+09  0  0.0  /Experiment/Condition2/   
16            NaN        9  1.501173e+09  0  1.0  /Experiment/Condition2/   
17            NaN        9  1.501173e+09  0  NaN  /Experiment/Condition2/   

    valid  
0       1  
1       1  
2       1  
3       1  
4       1  
5       1  
6       1  
7       1  
8       0  
9       1  
10      1  
11      1  
12      1  
13      1  
14      1  
15      1  
16      1  
17      0  }

In [5]:
df = extract.dump_dataframe(e.cursor)

In [6]:
import six

In [7]:
session_tree, path_tree = extract.map_children_sessions(e.cursor)
print("\n".join(["%-50s\tTotal logs:%d" % (k,len(v)) for k,v in six.iteritems(path_tree)]))


/Experiment/                                      	Total logs:9
/Experiment/Condition1/                           	Total logs:2
/Experiment/Condition2/                           	Total logs:6
/Experiment/Condition2/SubconditionA/             	Total logs:2

In [8]:
print(extract.dump_sessions_dataframe(e.cursor))


    complete description      end_time  json     last_time  log_count  \
id                                                                      
1        NaN        None           NaN  None           NaN          0   
2        0.0                       NaN  None           NaN          0   
3        1.0              1.501173e+09  None  1.501173e+09          3   
4        1.0              1.501173e+09  None  1.501173e+09          3   
5        1.0              1.501173e+09  None  1.501173e+09          3   
6        1.0              1.501173e+09  None           NaN          0   
7        1.0              1.501173e+09  None  1.501173e+09          3   
8        1.0              1.501173e+09  None  1.501173e+09          3   
9        0.0                       NaN  None  1.501173e+09          3   
10       0.0                       NaN  None           NaN          0   

             name  parent                                   path  \
id                                                                 
1          [ROOT]     NaN                                      /   
2      Experiment     1.0                           /Experiment/   
3      Condition1     2.0                /Experiment/Condition1/   
4      Condition2     2.0                /Experiment/Condition2/   
5      Condition2     2.0                /Experiment/Condition2/   
6   SubconditionA     5.0  /Experiment/Condition2/SubconditionA/   
7      Condition1     2.0                /Experiment/Condition1/   
8      Condition2     2.0                /Experiment/Condition2/   
9      Condition2     2.0                /Experiment/Condition2/   
10  SubconditionA     9.0  /Experiment/Condition2/SubconditionA/   

     random_seed    start_time  subcount  test_run  valid  
id                                                         
1            NaN  1.501173e+09         0       NaN    NaN  
2   1.501173e+12  1.501173e+09         0       0.0    NaN  
3   3.002346e+12  1.501173e+09         0       0.0    1.0  
4   3.002346e+12  1.501173e+09         0       0.0    0.0  
5   3.002346e+12  1.501173e+09         0       0.0    1.0  
6   7.505865e+12  1.501173e+09         0       0.0    1.0  
7   3.002346e+12  1.501173e+09         0       0.0    1.0  
8   3.002346e+12  1.501173e+09         0       0.0    1.0  
9   3.002346e+12  1.501173e+09         0       0.0    NaN  
10  1.351056e+13  1.501173e+09         0       0.0    NaN  

In [ ]:


In [ ]: