Created
November 26, 2017 16:01
-
-
Save spedy/1686210b129602453d98d31f864da306 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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