Skip to content

Instantly share code, notes, and snippets.

@spedy
Created November 26, 2017 16:01
Show Gist options
  • Save spedy/1686210b129602453d98d31f864da306 to your computer and use it in GitHub Desktop.
Save spedy/1686210b129602453d98d31f864da306 to your computer and use it in GitHub Desktop.
"""
koda: b2
skupina: b
calibration_num_letters: =calibration8 level, max_num_letters?
time_calibration_num_letters: average time of elapsed time
choice: int(bool(["results"]["choice"] == "hard"))
correct: ["results"]["expsolved"]
time: ["results"]["elapsedTime"]
"""
import glob
import json
import re
from decimal import Decimal
from datetime import datetime
def parse_data(data):
elapsed_time = Decimal(0)
for result in data["calibration8"]["results"]:
elapsed_time = elapsed_time + Decimal(result["elapsedTime"])
output_data = {}
output_data["time_cal_num_let"] = Decimal(elapsed_time)/len(data["calibration8"]["results"])
for level in data.keys():
if "letters" in level:
output_data["{}{}".format(level, "choice")] = int(bool(data[level]["choice"] == "hard"))
output_data["{}{}".format(level, "correct")] = int(bool(data[level]["results"][0]["expsolved"] == True))
output_data["{}{}".format(level, "time")] = data[level]["results"][0]["elapsedTime"]
return output_data
experiment_data = []
user_data = {}
for filename in glob.glob("*.json"):
re_txt = re.search("(.*?)\.json", filename)
if re_txt:
user_id = re_txt.group(1)
user_data[user_id] = json.loads(open(filename).read())
print "parsing user id {}".format(user_id)
try:
choices = {}
choices = parse_data(user_data[user_id][0]["levels"])
choices["uid"] = user_id
choices["cal_num_let"] = user_data[user_id][0]["max_num_letters"]
if not choices.get("date_of_experiment"):
choices["date_of_experiment"] = datetime.fromtimestamp(user_data[user_id][0].get("levels", {}).get("time"))
experiment_data.append(choices)
print choices
except Exception as e:
print e.message
print "!!!---- Could not parse user id {}----!!!".format(user_id)
pass
import csv
{
'letters12choice': 1,
'letters12time': 3311,
'letters19time': 2704,
'letters12correct': 0,
'letters14correct': 1,
'letters21choice': 0,
'uid': 'b97',
'letters23choice': 0,
'letters21correct': 1,
'letters23correct': 1,
'letters19choice': 1,
'letters16correct': 1,
'time_cal_num_let': Decimal('2158.388888888888888888888889'),
'letters23time': 2246,
'letters16time': 1561,
'letters14choice': 0,
'cal_num_let': 7,
'letters16choice': 0,
'letters14time': 3654,
'letters21time': 1523,
'letters19correct': 1
}
number_mappings = {
"12": "1_1",
"14": "1_2",
"16": "2_1",
"19": "2_2",
"21": "3_1",
"23": "3_2"
}
with open("rezultati.csv", 'wb') as myfile:
wr = csv.writer(myfile, delimiter='\t')
headers_str = "Koda,skupina,cal_num_let,time_cal_num_let,choice1_2,correct1_2,time1_2,choice2_2,Correct2_2,time2_2,choice3_2,Correct3_2,time3_2,Choice1_1,Correct1_1,time1_1,Choice2_1,Correct2_1,time2_1,Choice3_1,Correct3_1,time3_1,date_of_experiment".lower()
headers = headers_str.split(",")
empty = range(len(headers))
empty = map(lambda a: "XXXX", empty)
for record in experiment_data:
for key in record.keys():
if "choice" in key:
number = key[7] + key[8]
h = "choice" + number_mappings[number]
empty[headers.index(h)] = record[key]
if "correct" in key:
number = key[7] + key[8]
h = "correct" + number_mappings[number]
empty[headers.index(h)] = record[key]
if "time" in key and "time_cal_num_let" not in key:
number = key[7] + key[8]
h = "time" + number_mappings[number]
empty[headers.index(h)] = record[key]
if "uid" in key:
empty[headers.index("koda")] = record[key][0]
empty[headers.index("skupina")] = record[key]
if "cal_num_let" in key:
empty[headers.index("cal_num_let")] = record[key]
if "time_cal_num_let" in key:
empty[headers.index("time_cal_num_let")] = int(float(record[key]))
if "date_of_experiment" in key:
empty[headers.index("date_of_experiment")] = record[key]
if "XXXX" in empty:
print empty
raise Exception
wr.writerow(empty)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment