import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
grades = pd.read_csv("grades.csv")
grades.columns
Index(['Quarter', 'Course_Level', 'Course', 'Instructor', 'Grade_Given',
'Sum_of_Student_Count'],
dtype='object')
Finding unique values in a column
instructor_list = grades["Instructor"].unique()
quarter_list = grades["Quarter"].unique()
course_level_list = grades["Course_Level"].unique()
course_list = grades["Course"].unique()
rate = {}
for instructor in instructor_list:
df = grades.loc[grades['Instructor'] == instructor]
total_students = sum(df["Sum_of_Student_Count"])
if total_students == 0:
rate[instructor] = 0
continue
df_A = df.loc[(df['Grade_Given'] == "A") | (df['Grade_Given'] == "A-") | (df['Grade_Given'] == "A+")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
rate[instructor] = number_of_A_students / total_students
sorted_rate = dict(sorted(rate.items(), key=lambda x: x[1], reverse=True))
plt.bar(range(len(sorted_rate)), list(sorted_rate.values()), align='center')
plt.xticks(range(len(sorted_rate)), list(sorted_rate.keys()))
plt.title("A rate for all instructors")
plt.show()
popular_instructor_rate = {}
for instructor in instructor_list:
df = grades.loc[grades['Instructor'] == instructor]
total_students = sum(df["Sum_of_Student_Count"])
if total_students <5000:
continue
df_A = df.loc[(df['Grade_Given'] == "A") | (df['Grade_Given'] == "A-") | (df['Grade_Given'] == "A+")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
popular_instructor_rate[instructor] = number_of_A_students / total_students
sorted_popular_instructor_rate = dict(sorted(popular_instructor_rate.items(), key=lambda x: x[1], reverse=True))
fig = plt.figure(figsize=(40, 10))
plt.bar(range(len(sorted_popular_instructor_rate)), list(sorted_popular_instructor_rate.values()), align='center')
plt.xticks(range(len(sorted_popular_instructor_rate)), list(sorted_popular_instructor_rate.keys()))
plt.title("A rate for instructors with more than 5000 students")
plt.show()
sorted_popular_instructor_rate
{'LUBACH D W': 0.7390631049167634,
'GALLUCCI R': 0.7224686351539729,
'ABRA G J': 0.6994577846630519,
'MCCARTY P C': 0.6935483870967742,
'POPESCU P F': 0.6519462384360273,
'BERENSTEIN D': 0.5990920040767164,
'GORDON A F': 0.5774783445620789,
'GARFIELD P M': 0.5702372393961179,
'TYLER C M': 0.5652014652014652,
'HILTNER K C': 0.5489379001931091,
'ROBINSON W I': 0.5428822495606327,
'MORALES H L': 0.5427335016227912,
'HANSON J L': 0.5299777942264989,
'JUERGENSMEYER': 0.5259834871296746,
'FOLTZ K R': 0.5202544358888517,
'GERMAN T C M': 0.5202312138728323,
'HILLIS G A': 0.5069637883008357,
'MARTIN J A': 0.4842589842589843,
'PRESS C M': 0.4785293613128252,
'KENNEDY R A': 0.4766418415707515,
'KALMAN L': 0.47453864298598586,
'FREUND E G': 0.466396096052568,
'MATNI Z A': 0.45368171021377673,
'LATTO J G': 0.4516902223324242,
'PANDYA S P': 0.4403242955874535,
'BALDWIN J I': 0.4365305185865076,
'GELLER R M': 0.43585428627994455,
'DEVRIES M S': 0.4357720519089712,
'BALDWIN J D': 0.42935935511243106,
'GABLE S': 0.4260634706279541,
'WOODS V E': 0.4139667846447046,
'HECHT R': 0.4046797084771768,
'LIPMAN E A': 0.40345339769773486,
'GURUSWAMY S': 0.3911996145816605,
'BENELLI C A': 0.3856829073482428,
'ERICKSON B L': 0.3844959051115504,
'FREEDMAN R A': 0.37113022113022115,
'THROWER D A': 0.3690246516613076,
'WALSH C': 0.3595145408747424,
'FINKELSTEIN R': 0.35831139526137645,
'DUNN F M': 0.3577677624602333,
'AKEMANN C A': 0.34942820838627703,
'BIBILASHVILI': 0.3481563319983428,
'NGUYEN A T': 0.3414283778289741,
'HOLMES D E': 0.33624708624708627,
'GARDNER H K': 0.33588516746411484,
'COOPER D': 0.33018082772187335,
'GRAVES G R': 0.3282522603302697,
'CHRISTOFFERSE': 0.3272939442328952,
'LEWIS R B': 0.326370010015739,
'BERNT C M': 0.32325581395348835,
'MARQUES-PASCU': 0.30365790061834164,
'BEDARD K L': 0.3034268753372909,
'VAN KOPPEN P': 0.2994324458157163,
'AUE D H': 0.2892974205500926,
'SWENSON J S': 0.28729792147806005,
'BRUSUTTI A': 0.28493674610179465,
'LUNA D A': 0.2815318440405162,
'HODGES S A': 0.27694406548431105,
'MULLIN C R': 0.2719084255957966,
'WILTON M B': 0.27090770015298316,
'EVEN T J': 0.2701123222945248,
'SCHOOLER J W': 0.26670015067805125,
'HARTMAN J L': 0.2652075957515288,
'KLEIN S B': 0.25713640979352365,
'OPREA R D': 0.25682954982685646,
'CLEGG D O': 0.24753289473684212,
'GAINER M J': 0.24658260040267033,
'BIRCHENALL J': 0.2456751561749159,
'GONZALEZ NINO': 0.24285894048068454,
'HARMON C J': 0.2359537299338999,
'HOFMANN G E': 0.22958854636914744,
'RUSSAK J A': 0.2289405684754522,
'GAULIN S J': 0.2288111354752598,
'KULPER D E': 0.2254014598540146,
'FEINSTEIN S C': 0.22524043755965054,
'JAMIESON A E': 0.22144788453482617,
'CARLSON C A': 0.21617369414726242,
'PRICE S P': 0.20901477832512316,
'BRUICE P Y': 0.20873958517993263,
'MULLIN D I': 0.2019921955226946,
'KUNKEL B M': 0.18803172314347513,
'FELDWINN D L': 0.18796701880958516,
'JOSEPH C A': 0.18418467583497053,
'LOW S H': 0.18177480916030533,
'GREATHOUSE J': 0.17570113017999162,
'RICE W R': 0.17548489246602453,
'ANDERSON R W': 0.1727824822513044,
'GILBERT A R': 0.17205651491365778,
'FRIDLUND A J': 0.17062807064134908,
'RUPERT P': 0.16613965744400527,
'BUSH D S': 0.16057972982146493,
'SONSTELIE J': 0.1437996334758705}
popular_instructor_rate_fail = {}
for instructor in instructor_list:
df = grades.loc[grades['Instructor'] == instructor]
total_students = sum(df["Sum_of_Student_Count"])
if total_students <5000:
continue
df_A = df.loc[(df['Grade_Given'] == "D") | (df['Grade_Given'] == "C-") | (df['Grade_Given'] == "D+")| (df['Grade_Given'] == "D")| (df['Grade_Given'] == "D-")| (df['Grade_Given'] == "F")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
popular_instructor_rate_fail[instructor] = number_of_A_students / total_students
sorted_popular_instructor_rate_fail = dict(sorted(popular_instructor_rate_fail.items(), key=lambda x: x[1], reverse=True))
fig = plt.figure(figsize=(40, 10))
plt.bar(range(len(sorted_popular_instructor_rate_fail)), list(sorted_popular_instructor_rate_fail.values()), align='center')
plt.xticks(range(len(sorted_popular_instructor_rate_fail)), list(sorted_popular_instructor_rate_fail.keys()))
plt.title("Fail rate for instructors with more than 5000 students")
plt.show()
sorted_popular_instructor_rate_fail
{'BRUICE P Y': 0.26617620989186314,
'RICE W R': 0.24026916479746668,
'AUE D H': 0.23557075673364686,
'GAULIN S J': 0.23052721899132425,
'FELDWINN D L': 0.22416902860087606,
'AKEMANN C A': 0.21696315120711562,
'KUNKEL B M': 0.20886806056236482,
'JOSEPH C A': 0.20647102161100198,
'LOW S H': 0.19937446988973706,
'FRIDLUND A J': 0.18147213738768644,
'RUPERT P': 0.17364953886693016,
'CLEGG D O': 0.1723684210526316,
'FEINSTEIN S C': 0.1660671022685559,
'MULLIN D I': 0.15906757034298624,
'SWENSON J S': 0.1564665127020785,
'EVEN T J': 0.1556347660297592,
'ANDERSON R W': 0.15499101873235824,
'PRICE S P': 0.15049261083743842,
'BUSH D S': 0.14927703482451973,
'HARTMAN J L': 0.1466044415835211,
'BERNT C M': 0.14505813953488372,
'FINKELSTEIN R': 0.1447912749153817,
'COOPER D': 0.14239237345842476,
'CHRISTOFFERSE': 0.13947917946198254,
'BIRCHENALL J': 0.13190773666506486,
'FREEDMAN R A': 0.13108108108108107,
'HOFMANN G E': 0.1294982587385528,
'MULLIN C R': 0.1266654156502158,
'HARMON C J': 0.12346553352219075,
'HODGES S A': 0.12246825480113338,
'NGUYEN A T': 0.11855264941048922,
'CARLSON C A': 0.118313404657017,
'LUNA D A': 0.11794089080061051,
'RUSSAK J A': 0.11782945736434108,
'SCHOOLER J W': 0.11367821865059434,
'THROWER D A': 0.11103965702036442,
'KENNEDY R A': 0.10968178740690589,
'KLEIN S B': 0.10865395464289744,
'LIPMAN E A': 0.10731526178982548,
'BIBILASHVILI': 0.10385305896975555,
'DUNN F M': 0.10312831389183456,
'LEWIS R B': 0.10258978394620118,
'ERICKSON B L': 0.10096018073990398,
'GONZALEZ NINO': 0.09789857807977853,
'MATNI Z A': 0.09519459163164626,
'HOLMES D E': 0.09047202797202797,
'MARQUES-PASCU': 0.08857930417939358,
'ROBINSON W I': 0.08787346221441125,
'GURUSWAMY S': 0.08302553396499117,
'PRESS C M': 0.08268054205500601,
'OPREA R D': 0.08214697960754136,
'GAINER M J': 0.08185864151743139,
'BRUSUTTI A': 0.07825831126802,
'FREUND E G': 0.07754747064791999,
'WILTON M B': 0.07712901580826109,
'WOODS V E': 0.07704873400490063,
'BENELLI C A': 0.0738817891373802,
'BALDWIN J D': 0.07320553862768542,
'VAN KOPPEN P': 0.07309640802955852,
'MARTIN J A': 0.07306207306207306,
'LATTO J G': 0.07207207207207207,
'GARFIELD P M': 0.07189072609633357,
'SONSTELIE J': 0.06805131337813072,
'MORALES H L': 0.06779661016949153,
'BALDWIN J I': 0.06420376319412574,
'BEDARD K L': 0.06395035078251485,
'GELLER R M': 0.06358476869266812,
'HILTNER K C': 0.0632178066876715,
'GILBERT A R': 0.0609105180533752,
'GERMAN T C M': 0.05624369208184237,
'HILLIS G A': 0.054649157713224567,
'GABLE S': 0.050472653612424034,
'GORDON A F': 0.04988771254411293,
'WALSH C': 0.04762995191206778,
'ABRA G J': 0.046475600309837335,
'HECHT R': 0.04200230149597238,
'KULPER D E': 0.04145985401459854,
'PANDYA S P': 0.03987240829346093,
'GARDNER H K': 0.037894736842105266,
'DEVRIES M S': 0.033853676885461724,
'GRAVES G R': 0.0276470148696107,
'POPESCU P F': 0.026764414964798977,
'KALMAN L': 0.02636325794366588,
'JAMIESON A E': 0.02528656841463879,
'LUBACH D W': 0.022260936895083235,
'BERENSTEIN D': 0.020661539886963773,
'MCCARTY P C': 0.020198974977389206,
'HANSON J L': 0.019800148038490006,
'GALLUCCI R': 0.019769357495881382,
'FOLTZ K R': 0.017241379310344827,
'TYLER C M': 0.016483516483516484,
'GREATHOUSE J': 0.015278359146086228,
'JUERGENSMEYER': 0.011170471102476931}
A list of departments
dept_list = np.unique([course[0:5] for course in course_list])
dept_list
array(['ANTH ', 'ART ', 'ARTHI', 'ARTST', 'AS AM', 'ASTRO', 'BIOL ',
'BL ST', 'BMSE ', 'C LIT', 'CH E ', 'CH ST', 'CHEM ', 'CHIN ',
'CLASS', 'CMPSC', 'CMPTG', 'CNCSP', 'COMM ', 'DANCE', 'DYNS ',
'EACS ', 'EARTH', 'ECE ', 'ECON ', 'ED ', 'EDS ', 'EEMB ',
'ENGL ', 'ENGR ', 'ENV S', 'ES ', 'ESM ', 'ESS ', 'FAMST',
'FEMST', 'FLMST', 'FR ', 'GEOG ', 'GEOL ', 'GER ', 'GLOBL',
'GPS ', 'GRAD ', 'GREEK', 'HEB ', 'HIST ', 'INT ', 'ITAL ',
'JAPAN', 'KOR ', 'LAIS ', 'LATIN', 'LAWSO', 'LING ', 'LIT ',
'MARSC', 'MAT ', 'MATH ', 'MATRL', 'MCDB ', 'ME ', 'ME ST',
'MES ', 'MS ', 'MUS ', 'MUS A', 'PHIL ', 'PHYS ', 'POL S',
'PORT ', 'PSTAT', 'PSY ', 'RG ST', 'RUSS ', 'SHS ', 'SLAV ',
'SOC ', 'SPAN ', 'THTR ', 'TMP ', 'W&L ', 'WRIT '], dtype='<U5')
dept_rate = {}
for d in dept_list:
df = grades[grades['Course'].str.startswith(d)]
total_students = sum(df["Sum_of_Student_Count"])
if total_students == 0:
continue
df_A = df.loc[(df['Grade_Given'] == "A") | (df['Grade_Given'] == "A-") | (df['Grade_Given'] == "A+")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
dept_rate[d] = number_of_A_students / total_students
sorted_dept_rate = dict(sorted(dept_rate.items(), key=lambda x: x[1], reverse=True))
fig = plt.figure(figsize=(40, 10))
plt.bar(range(len(sorted_dept_rate)), list(sorted_dept_rate.values()), align='center')
plt.xticks(range(len(sorted_dept_rate)), list(sorted_dept_rate.keys()))
plt.title("A rate for all departments", fontsize=30)
plt.xticks(fontsize=7)
plt.show()
dept_rate_fail = {}
for d in dept_list:
df = grades[grades['Course'].str.startswith(d)]
total_students = sum(df["Sum_of_Student_Count"])
if total_students == 0:
continue
df_A = df.loc[(df['Grade_Given'] == "D") | (df['Grade_Given'] == "C-") | (df['Grade_Given'] == "D+")| (df['Grade_Given'] == "D")| (df['Grade_Given'] == "D-")| (df['Grade_Given'] == "F")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
dept_rate_fail[d] = number_of_A_students / total_students
sorted_dept_rate_fail = dict(sorted(dept_rate_fail.items(), key=lambda x: x[1], reverse=True))
fig = plt.figure(figsize=(40, 10))
plt.bar(range(len(sorted_dept_rate_fail)), list(sorted_dept_rate_fail.values()), align='center')
plt.xticks(range(len(sorted_dept_rate_fail)), list(sorted_dept_rate_fail.keys()))
plt.title("Fail rate for all departments", fontsize=30)
plt.xticks(fontsize=7)
plt.show()
course_rate = {}
for course in course_list:
df = grades.loc[grades['Course'] == course]
total_students = sum(df["Sum_of_Student_Count"])
if total_students < 5000:
continue
df_A = df.loc[(df['Grade_Given'] == "A") | (df['Grade_Given'] == "A-") | (df['Grade_Given'] == "A+")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
course_rate[course] = number_of_A_students / total_students
sorted_course_rate = dict(sorted(course_rate.items(), key=lambda x: x[1], reverse=True))
fig = plt.figure(figsize=(40, 10))
plt.bar(range(len(sorted_course_rate)), list(sorted_course_rate.values()), align='center')
plt.xticks(range(len(sorted_course_rate)), list(sorted_course_rate.keys()))
plt.title("A rate for courses with more than 30000 students")
plt.show()
sorted_course_rate
{'EEMB 2LL': 0.8896177980604678,
'MCDB 1LL': 0.8676239893809581,
'THTR 5': 0.8203524729960204,
'CNCSP 101': 0.7432912391475928,
'PHYS 3L': 0.7422914638104512,
'PHYS 4L': 0.6962616822429907,
'WRIT 107B': 0.6793073593073593,
'PHYS 6BL': 0.6291397217323144,
'MUS 15': 0.627315439866069,
'FEMST 20': 0.6271247092503132,
'MUS 11': 0.6221465076660988,
'MUS 114': 0.5875184638109305,
'PHYS 6CL': 0.5853407676067774,
'GLOBL 1': 0.5789820923656928,
'PHYS 6AL': 0.5766782911944203,
'WRIT 2': 0.5737835153922543,
'MUS 17': 0.5720140515222483,
'SOC 1': 0.5545512288073484,
'CMPSC 8': 0.5255483870967742,
'CMPSC 16': 0.5244304791830322,
'PSY 105': 0.5213950762016413,
'CH ST 1A': 0.5176138251910933,
'WRIT 1': 0.5133483862398724,
'MATH 4B': 0.5048558084365038,
'ENV S 1': 0.48892238131122834,
'ENGL 10': 0.4831136341768498,
'MATH 4A': 0.48178116517018166,
'EACS 4B': 0.480219414893617,
'DANCE 45': 0.47704918032786886,
'PHIL 3': 0.4748225751943224,
'EACS 4A': 0.4610314075222955,
'CH ST 1B': 0.4551622959838621,
'ENV S 3': 0.4459745762711864,
'MATH 6A': 0.4399690162664601,
'MATH 34B': 0.4371054292929293,
'ENGL 22': 0.4352438252058265,
'CH ST 1C': 0.43007915567282323,
'EARTH 20': 0.4207428720899817,
'CLASS 40': 0.4132430949332358,
'ARTHI 6B': 0.4131491927640537,
'ENV S 2': 0.41107062293944124,
'PHYS 6C': 0.41045902512652044,
'HIST 17C': 0.4102285092491839,
'ARTHI 6C': 0.40615671641791046,
'SOC 152A': 0.4057215573991141,
'GLOBL 2': 0.40382507004507245,
'EARTH 4': 0.4035019956225055,
'MATH 6B': 0.40310600945307223,
'HIST 2C': 0.39733453806189295,
'PHYS 1': 0.39070415400202635,
'MATH 34A': 0.3822617107407602,
'ANTH 2': 0.38179004384833637,
'ESS 3': 0.381408975895592,
'PSTAT 120B': 0.3779181543531997,
'EEMB 120': 0.37630820567268314,
'AS AM 5': 0.3732529056936884,
'MATH 8': 0.3658370733034136,
'MATH 3B': 0.35737954261502525,
'PSY 102': 0.3541812456263121,
'PHYS 2': 0.3531645569620253,
'PSY 108': 0.34181429080965403,
'ECON 101': 0.34074775201135826,
'CHEM 109C': 0.33766233766233766,
'PSTAT 5A': 0.33714247527399094,
'HIST 17B': 0.33456235973068293,
'PSTAT 109': 0.33064716092239027,
'CHEM 1AL': 0.3287422979340341,
'HIST 4B': 0.3282397301051796,
'PHYS 3': 0.3269230769230769,
'POL S 7': 0.32325703302463743,
'ECON 137A': 0.31789737171464333,
'CHEM 1BL': 0.3163948023223666,
'ECON 134A': 0.311575654152446,
'MCDB 101B': 0.31072687594426723,
'HIST 4C': 0.31026081971911723,
'HIST 2A': 0.31004117108874657,
'MATH 3A': 0.30984546603168434,
'MCDB 101A': 0.30933503836317133,
'PHYS 6A': 0.3087206483341414,
'ASTRO 1': 0.3062700964630225,
'CHEM 1CL': 0.3059254970082996,
'PHYS 6B': 0.2962990936555891,
'MCDB 1BL': 0.29381608458827296,
'ECON 140A': 0.2867336152219873,
'EARTH 7': 0.2864393794292281,
'COMM 89': 0.28414442700156983,
'PHIL 4': 0.28386514148103553,
'GEOG 5': 0.2777293663637495,
'CHEM 6BL': 0.2750908890602622,
'PHIL 1': 0.2737214183143709,
'ECON 100B': 0.26748290315464374,
'PSTAT 120A': 0.26484968272131487,
'EARTH 2': 0.2593371909521305,
'CHEM 6AL': 0.25900366616346776,
'EEMB 2L': 0.24909170178753087,
'COMM 88': 0.2477584388185654,
'EEMB 3': 0.24503878042257288,
'MCDB 1AL': 0.24350467663282438,
'ANTH 5': 0.23997995991983967,
'PSY 103': 0.22566371681415928,
'ECON 1': 0.2165782288393179,
'ECON 10A': 0.2123461882175019,
'CHEM 1C': 0.2107393090118386,
'CHEM 109B': 0.20414988219198907,
'CHEM 109A': 0.20325919401012993,
'COMM 1': 0.19908186687069626,
'MCDB 1B': 0.19530284301606923,
'CHEM 1B': 0.19319205609307064,
'MCDB 1A': 0.19055295140730058,
'PSY 1': 0.1883659967544626,
'CHEM 1A': 0.1867704280155642,
'ECON 3A': 0.17859699355762348,
'EEMB 2': 0.17807948515298633,
'POL S 12': 0.17773851590106007,
'ECON 2': 0.17679954115285346,
'EEMB 3L': 0.17658990573917194,
'PSY 3': 0.1729676303434643,
'POL S 1': 0.1543466473883969,
'PSY 7': 0.14988755126339462,
'ENV S 190': 0.0,
'ES 1- 43D': 0.0,
'TMP 111': 0.0}
course_rate_fail = {}
for course in course_list:
df = grades.loc[grades['Course'] == course]
total_students = sum(df["Sum_of_Student_Count"])
if total_students < 5000:
continue
df_A = df.loc[(df['Grade_Given'] == "D") | (df['Grade_Given'] == "C-") | (df['Grade_Given'] == "D+")| (df['Grade_Given'] == "D")| (df['Grade_Given'] == "D-")| (df['Grade_Given'] == "F")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
course_rate_fail[course] = number_of_A_students / total_students
sorted_course_rate_fail = dict(sorted(course_rate_fail.items(), key=lambda x: x[1], reverse=True))
fig = plt.figure(figsize=(40, 10))
plt.bar(range(len(sorted_course_rate_fail)), list(sorted_course_rate_fail.values()), align='center')
plt.xticks(range(len(sorted_course_rate_fail)), list(sorted_course_rate_fail.keys()))
plt.title("A rate for courses with more than 30000 students")
plt.show()
sorted_course_rate_fail
{'PSY 7': 0.23614234687127927,
'CHEM 109B': 0.23128372729345595,
'ANTH 5': 0.2279559118236473,
'CHEM 109A': 0.22740952800411068,
'CHEM 1A': 0.22709860344463548,
'PSY 3': 0.22634049913516185,
'EEMB 2': 0.21435023145534604,
'PSTAT 120A': 0.20669926141683137,
'ECON 10A': 0.20217226919639789,
'MCDB 1A': 0.20024603898445287,
'PSY 1': 0.19905962634710606,
'MCDB 1B': 0.19851000567935054,
'ECON 3A': 0.1893342877594846,
'ECON 2': 0.18325207915113279,
'MATH 3A': 0.1788317620760035,
'PHYS 6A': 0.17843042183279076,
'MATH 8': 0.16496668026655786,
'CHEM 1B': 0.16393121548043402,
'COMM 1': 0.1618974751338944,
'MATH 3B': 0.16106252376554947,
'MATH 34A': 0.16008622049313917,
'PHYS 3': 0.15828402366863906,
'ASTRO 1': 0.1570203644158628,
'CHEM 109C': 0.15373815373815375,
'CHEM 1C': 0.1522710799710075,
'PHYS 1': 0.15210233029381964,
'COMM 88': 0.15123945147679324,
'PSTAT 120B': 0.1472123043120022,
'MCDB 101A': 0.14411764705882352,
'GEOG 5': 0.14104319681314578,
'PSTAT 5A': 0.1334536220261962,
'ECON 100B': 0.13203176704169425,
'ECON 137A': 0.13141426783479349,
'PHYS 6B': 0.12953172205438065,
'MATH 6A': 0.1271107668474051,
'EEMB 3': 0.12591602032629046,
'PSTAT 109': 0.12558889164393752,
'MATH 34B': 0.12381628787878787,
'MATH 6B': 0.12018906144496962,
'EARTH 7': 0.11990040222179658,
'PHYS 2': 0.11687763713080168,
'PSY 103': 0.11624013393924898,
'EARTH 2': 0.11555321760476941,
'MATH 4B': 0.11431536807769294,
'POL S 1': 0.11368154708114947,
'MCDB 101B': 0.11331206983380897,
'MATH 4A': 0.10790352892044268,
'PHIL 3': 0.10566632871465585,
'PSY 102': 0.09972008397480756,
'CHEM 1AL': 0.09927509967379486,
'PSY 108': 0.09761027226251337,
'MUS 11': 0.09676320272572402,
'ECON 140A': 0.09645877378435518,
'CLASS 40': 0.0951527345893543,
'COMM 89': 0.0945839874411303,
'CMPSC 8': 0.09148387096774194,
'HIST 2A': 0.09057639524245197,
'POL S 12': 0.0872791519434629,
'HIST 4C': 0.08555460017196904,
'EEMB 3L': 0.08423815773774013,
'ENGL 22': 0.08328055731475617,
'DANCE 45': 0.08326738270209158,
'HIST 4B': 0.08176225441555865,
'ECON 134A': 0.08120022753128556,
'CMPSC 16': 0.08059701492537313,
'MUS 17': 0.07982045277127245,
'EARTH 4': 0.07866615166731042,
'POL S 7': 0.07391228376725494,
'PHIL 1': 0.07356677344526676,
'MCDB 1AL': 0.07322727636102007,
'GLOBL 2': 0.07321232793275673,
'CHEM 1BL': 0.07254630909593586,
'PHYS 6C': 0.07253840007102903,
'EEMB 120': 0.07189443349006522,
'ECON 101': 0.07181732134406058,
'EARTH 20': 0.06918650274653414,
'SOC 152A': 0.06795878912463597,
'ECON 1': 0.06578744011127712,
'PSY 105': 0.06506447831184056,
'PHIL 4': 0.06421834236403773,
'ESS 3': 0.06259155679850846,
'EACS 4A': 0.06048856145792943,
'ENV S 1': 0.06028636021100226,
'ANTH 2': 0.0597369099819448,
'HIST 2C': 0.058843460582787444,
'EACS 4B': 0.05634973404255319,
'ARTHI 6C': 0.05559701492537313,
'MUS 15': 0.05335637522276827,
'MUS 114': 0.053175775480059084,
'CHEM 6AL': 0.05262022859607505,
'CH ST 1C': 0.05199441254074189,
'CHEM 6BL': 0.05177922220998127,
'ARTHI 6B': 0.049601244893989496,
'AS AM 5': 0.04913932617331176,
'SOC 1': 0.04910343479747887,
'EEMB 2L': 0.04461560819648307,
'CHEM 1CL': 0.04355658495785884,
'MCDB 1BL': 0.04341557193207305,
'CH ST 1B': 0.04309554373739226,
'ENV S 2': 0.041644976574700676,
'GLOBL 1': 0.0413760603204524,
'ENV S 3': 0.04004237288135593,
'FEMST 20': 0.0381105743424584,
'HIST 17B': 0.03783263866623918,
'ENGL 10': 0.03454248051573174,
'HIST 17C': 0.03073993471164309,
'CH ST 1A': 0.028747092057161847,
'CNCSP 101': 0.026637726913970008,
'WRIT 2': 0.026301603064264434,
'WRIT 1': 0.02430601673529021,
'THTR 5': 0.015633882888004547,
'PHYS 6AL': 0.015257192676547515,
'MCDB 1LL': 0.012308434898033065,
'PHYS 4L': 0.011143062544931704,
'PHYS 6BL': 0.009945130315500686,
'WRIT 107B': 0.008311688311688312,
'PHYS 3L': 0.007573298712539219,
'PHYS 6CL': 0.007416229091105939,
'EEMB 2LL': 0.00713063320022818,
'ES 1- 43D': 0.002152674283821825,
'ENV S 190': 0.00109717868338558,
'TMP 111': 0.00016661112962345885}
quarter_rate = {}
for quarter in quarter_list:
df = grades.loc[grades['Quarter'] == quarter]
total_students = sum(df["Sum_of_Student_Count"])
df_A = df.loc[(df['Grade_Given'] == "A") | (df['Grade_Given'] == "A-") | (df['Grade_Given'] == "A+")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
quarter_rate[quarter] = number_of_A_students / total_students
sorted_quarter_rate = dict(sorted(quarter_rate.items(), key=lambda x: x[1], reverse=True))
fig = plt.figure(figsize=(40, 10))
plt.bar(range(len(sorted_quarter_rate)), list(sorted_quarter_rate.values()), align='center')
plt.xticks(range(len(sorted_quarter_rate)), list(sorted_quarter_rate.keys()))
plt.title("A rate by quarter")
plt.show()
quarter_rate_fail = {}
for quarter in quarter_list:
df = grades.loc[grades['Quarter'] == quarter]
total_students = sum(df["Sum_of_Student_Count"])
df_A = df.loc[(df['Grade_Given'] == "D") | (df['Grade_Given'] == "C-") | (df['Grade_Given'] == "D+")| (df['Grade_Given'] == "D")| (df['Grade_Given'] == "D-")| (df['Grade_Given'] == "F")]
number_of_A_students = sum(df_A["Sum_of_Student_Count"])
quarter_rate_fail[quarter] = number_of_A_students / total_students
sorted_quarter_rate_fail = dict(sorted(quarter_rate_fail.items(), key=lambda x: x[1], reverse=True))
fig = plt.figure(figsize=(40, 10))
plt.bar(range(len(sorted_quarter_rate_fail)), list(sorted_quarter_rate_fail.values()), align='center')
plt.xticks(range(len(sorted_quarter_rate_fail)), list(sorted_quarter_rate_fail.keys()))
plt.title("A rate by quarter")
plt.show()