Exemple #1
0
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)
Exemple #2
0
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)
Exemple #4
0
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)
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
def numeric_or_zero(string):
    if get_type(string) in [int, float]:
        return get_type(string)(string)
    return 0
def numeric_or_zero(string):
    if get_type(string) in [int, float]:
        return get_type(string)(string)
    return 0