Visualizing Grades Analysis¶

Teo Zeng¶

In [ ]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
In [ ]:
grades = pd.read_csv("grades.csv")
grades.columns
Out[ ]:
Index(['Quarter', 'Course_Level', 'Course', 'Instructor', 'Grade_Given',
       'Sum_of_Student_Count'],
      dtype='object')

Finding unique values in a column

In [ ]:
instructor_list = grades["Instructor"].unique()
quarter_list = grades["Quarter"].unique()
course_level_list = grades["Course_Level"].unique()
course_list = grades["Course"].unique()

Which professor likes giving A's? We consider A,A-,A+ are all A's.¶

In [ ]:
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))
In [ ]:
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()
In [ ]:
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))
In [ ]:
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()
In [ ]:
sorted_popular_instructor_rate
Out[ ]:
{'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}

Which professor likes giving F's? We consider C-, D+,D,D-,F are "fails".¶

In [ ]:
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))
In [ ]:
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()
In [ ]:
sorted_popular_instructor_rate_fail
Out[ ]:
{'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}

Which majors are harder to get A's?¶

A list of departments

In [ ]:
dept_list = np.unique([course[0:5] for course in course_list])
dept_list
Out[ ]:
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')
In [ ]:
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))
In [ ]:
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()

Failing Rate for All Departments¶

In [ ]:
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))
In [ ]:
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()

What are the hardest courses and easiest courses at UCSB?¶

In [ ]:
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))
In [ ]:
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()
In [ ]:
sorted_course_rate
Out[ ]:
{'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}
In [ ]:
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))
In [ ]:
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()
In [ ]:
sorted_course_rate_fail
Out[ ]:
{'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}

Is there GPA inflation in UCSB?¶

In [ ]:
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))
In [ ]:
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()

Fail Rate by Quarter¶

In [ ]:
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))
In [ ]:
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()
In [ ]: