def calculate_total_grade(): import numpy as np csv_file = open('combined.csv') headers_list = csv_file.next().strip().split(',') headers_list.append('total_grade') data_lines = [] scores = [] for line in csv_file: splits = [f.strip() for f in line.split(',')] splits = [int(s) if get_type(s) is int else s for s in splits] ph_score = numeric_or_zero( splits[6]) #int(splits[6]) if get_type(splits[6]) is int else 0 q_score = numeric_or_zero( splits[7] ) #float(splits[7]) if get_type(splits[7]) is float else 0 a_score = numeric_or_zero( splits[11] ) #float(splits[11]) if get_type(splits[11]) is float else 0 total_score = ph_score + q_score + a_score scores.append(total_score) data_lines.append(splits) final_lines = [headers_list] for key, split_line in enumerate(data_lines): split_line.append(round(scores[key], 2)) final_lines.append(split_line) csv_file.close() with open('ccc2.csv', 'w') as fp: a = csv.writer(fp, delimiter=',') a.writerows(final_lines)
def read_multiple_csv(files, key_header): """ takes a list of filesnames and a key_header string to merge the files. Can merge if there are different columns in the files, different records in the files. Assumption - all the files should have the column named key_header example : files = ['grades.csv', 'previous_grades.csv'] key_header = 'email' merged_data = read_multiple_csv(files, key_header) """ data = {} # files = ['assignments.csv', 'discuss.csv', 'questions.csv'] # key_header = 'email' for filename in files: file_generator = open(filename) headers = file_generator.next().split(',') headers = [h.strip() for h in headers] for line in file_generator: splits = line.split(',') inner_dict = {} for k,header in enumerate(headers): #assumes header is a string. probably it is if header is not '': inner_dict[header] = int(splits[k]) if get_type(splits[k]) is int else splits[k] data_key = inner_dict.pop(key_header) try: z = data[data_key].copy() except KeyError: z = {} z.update(inner_dict) data[data_key] = z return data
def calculate_total_grade(): import numpy as np csv_file = open('combined.csv') headers_list = csv_file.next().strip().split(',') headers_list.append('total_grade') data_lines = [] scores = [] for line in csv_file: splits = [f.strip() for f in line.split(',')] splits = [int(s) if get_type(s) is int else s for s in splits] ph_score = numeric_or_zero(splits[6]) #int(splits[6]) if get_type(splits[6]) is int else 0 q_score = numeric_or_zero(splits[7])#float(splits[7]) if get_type(splits[7]) is float else 0 a_score = numeric_or_zero(splits[11]) #float(splits[11]) if get_type(splits[11]) is float else 0 total_score = ph_score + q_score + a_score scores.append(total_score) data_lines.append(splits) final_lines = [headers_list] for key, split_line in enumerate(data_lines): split_line.append(round(scores[key], 2)) final_lines.append(split_line) csv_file.close() with open('ccc2.csv', 'w') as fp: a = csv.writer(fp, delimiter=',') a.writerows(final_lines)
def calculate_assignment_grade(): import numpy as np with open('aaa.csv') as fo: headers_list = fo.readline().strip().split(',') headers_list.append('assignment_grade') data_lines = [] scores = [] for line in fo: splits = [f.strip() for f in line.split(',')] splits = [0 if s == "" else s for s in splits] splits = [ get_type(s)(s) if get_type(s) in (int, float) else s for s in splits ] scores.append(sum(splits[2:])) data_lines.append(splits) import pdb pdb.set_trace() non_zero_scores = [s for s in scores if s > 0] std_dev = np.std(non_zero_scores) grades = [s * 1.0 / std_dev for s in scores] max_grade = max(grades) grades = [g * 10 / max_grade for g in grades] averaging_factor = 7 / np.mean(grades) # converts the average to 7 graded_lines = [headers_list] for key, split_line in enumerate(data_lines): try: split_line.append(round(grades[key], 2)) except: import pdb pdb.set_trace() graded_lines.append(split_line) with open('aaa2.csv', 'w') as fp: a = csv.writer(fp, delimiter=',') a.writerows(graded_lines)
def calculate_assignment_grade(): import numpy as np with open('aaa.csv') as fo: headers_list = fo.readline().strip().split(',') headers_list.append('assignment_grade') data_lines = [] scores = [] for line in fo: splits = [f.strip() for f in line.split(',')] splits = [0 if s == "" else s for s in splits] splits = [get_type(s)(s) if get_type(s) in (int, float) else s for s in splits] scores.append(sum(splits[2:])) data_lines.append(splits) import pdb pdb.set_trace() non_zero_scores = [s for s in scores if s > 0] std_dev = np.std(non_zero_scores) grades = [s*1.0/std_dev for s in scores] max_grade = max(grades) grades = [g*10/max_grade for g in grades] averaging_factor = 7 / np.mean(grades) # converts the average to 7 graded_lines = [headers_list] for key,split_line in enumerate(data_lines): try: split_line.append(round(grades[key], 2)) except: import pdb pdb.set_trace() graded_lines.append(split_line) with open('aaa2.csv', 'w') as fp: a = csv.writer(fp, delimiter=',') a.writerows(graded_lines)
def read_multiple_csv(files, key_header, acceptable_keys=None): """ takes a list of filesnames and a key_header string to merge the files. Can merge if there are different columns in the files, different records in the files. Assumption - all the files should have the column named key_header example : files = ['grades.csv', 'previous_grades.csv'] key_header = 'email' merged_data = read_multiple_csv(files, key_header) """ data = {} # files = ['assignments.csv', 'discuss.csv', 'questions.csv'] # key_header = 'email' # acceprable keys are list of keys allowed to go into final data # if not given all will be accepted, this list can come out of # intersection or other set methods header_line = [] for filename in files: with open(filename, 'r+') as fo: headers = fo.readline().split(',') headers = [h.strip() for h in headers] header_line.extend(headers) for line in fo: splits = line.split(',') inner_dict = {} for k, header in enumerate(headers): #assumes header is a string. probably it is if header is not '': inner_dict[header] = int(splits[k]) if get_type( splits[k]) is int else splits[k].strip() data_key = inner_dict.pop(key_header) if data_key in acceptable_keys: try: z = data[data_key].copy() except KeyError: z = {} z.update(inner_dict) data[data_key] = z data['headers'] = list(set(header_line)) return data
def read_multiple_csv(files, key_header, acceptable_keys=None): """ takes a list of filesnames and a key_header string to merge the files. Can merge if there are different columns in the files, different records in the files. Assumption - all the files should have the column named key_header example : files = ['grades.csv', 'previous_grades.csv'] key_header = 'email' merged_data = read_multiple_csv(files, key_header) """ data = {} # files = ['assignments.csv', 'discuss.csv', 'questions.csv'] # key_header = 'email' # acceprable keys are list of keys allowed to go into final data # if not given all will be accepted, this list can come out of # intersection or other set methods header_line = [] for filename in files: with open(filename, 'r+') as fo: headers = fo.readline().split(',') headers = [h.strip() for h in headers] header_line.extend(headers) for line in fo: splits = line.split(',') inner_dict = {} for k,header in enumerate(headers): #assumes header is a string. probably it is if header is not '': inner_dict[header] = int(splits[k]) if get_type(splits[k]) is int else splits[k].strip() data_key = inner_dict.pop(key_header) if data_key in acceptable_keys: try: z = data[data_key].copy() except KeyError: z = {} z.update(inner_dict) data[data_key] = z data['headers'] = list(set(header_line)) return data
def numeric_or_zero(string): if get_type(string) in [int, float]: return get_type(string)(string) return 0