Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1.  
  2. import pandas as pd
  3. import random
  4. import names
  5. from matplotlib import pyplot as plt
  6.  
  7. def roundGrade(grades):
  8. grade_list = [12, 10, 7, 4, 2, 0, -3]
  9. gradesRounded = []
  10.  
  11. for grade in grades:
  12. gradesRounded.append(min(grade_list, key=lambda x:abs(x-grade)))
  13.  
  14. return gradesRounded
  15.  
  16.  
  17. def computeFinalGrades(grades):
  18. data = pd.read_csv(grades)
  19. min_cols = 3 # Minimum number of columns for value data
  20.  
  21. if data.shape[1] == min_cols: # Data only has one assignment
  22. data['Final'] = data.ix[:,2]
  23. else: # Data has two or more assignments
  24. data['Final'] = roundGrade((data.sum(axis=1) - data.min(axis=1)) /
  25. (data.shape[1] - min_cols))
  26.  
  27. for name in data.ix[:,2:]: # Student is given final grade -3, if -3 is present
  28. data.loc[(data[name] == -3), 'Final'] = -3
  29.  
  30. gradesFinal = data['Final']
  31.  
  32. return gradesFinal
  33.  
  34.  
  35. def generate_test_data(assignments, entries, grade_errors):
  36. grade_list = [12, 10, 7, 4, 2, 0, -3]
  37.  
  38. for _ in range(grade_errors):
  39. grade_list.append(round(random.uniform(-3, 12), 1))
  40.  
  41. header = ["StudentID","Name"]
  42.  
  43. for n in range(1, assignments + 1):
  44. header.append(f"Assignment{n}")
  45.  
  46. with open('data.csv', 'w') as file:
  47. file.write(",".join(header))
  48. file.write("\n")
  49. for _ in range(entries):
  50. grades = []
  51. name = names.get_full_name()
  52. number = f"s{int(random.uniform(103456, 154321))}"
  53. file.write(f"{number},{name},")
  54. for i in range(1, assignments + 1):
  55. grades.append(str(random.choice(grade_list)))
  56. file.write(",".join(grades))
  57. file.write("\n")
  58.  
  59. generate_test_data(3, 50, 10)
  60.  
  61. def check_data(filename):
  62. grade_list = [12, 10, 7, 4, 2, 0, -3]
  63. df = pd.read_csv(filename)
  64. assignment_names = df.columns.values[2:]
  65. grouped_data = df.groupby('StudentID')['StudentID'].agg('count')
  66.  
  67. if len(df.index) == len(grouped_data.index):
  68. for assignment in assignment_names:
  69. grades = df[assignment_names][df[assignment_names].isin(grade_list)]
  70.  
  71. result = pd.concat([df.ix[:,:2], grades], axis=1)
  72. n_columns = len(result.columns.values)
  73. result['NaNs'] = n_columns - result.apply(lambda x: x.count(), axis=1)
  74.  
  75. if result.isnull().values.any() == True:
  76. return False, result
  77. else:
  78. good_entries = result[result.NaNs <= 0]
  79. return True, good_entries
  80. else:
  81. invalid_ids = []
  82. for number in grouped_data.index:
  83. if grouped_data[number] > 1:
  84. invalid_ids.append(number)
  85.  
  86. return False, invalid_ids
  87.  
  88.  
  89. data_check, mydata = check_data('data.csv')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement