Built composite overall district rating.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
58
main/district_score.py
Normal file
58
main/district_score.py
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#! /usr/bin/env
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
import math
|
||||||
|
|
||||||
|
# helper to calculate an overall district rating
|
||||||
|
def get_overall_rating(df: pd.DataFrame):
|
||||||
|
'''
|
||||||
|
Returns a DataFrame that contains the overall district scores.
|
||||||
|
Parameters:
|
||||||
|
df (DataFrame):
|
||||||
|
Returns:
|
||||||
|
overall (DataFrame):
|
||||||
|
'''
|
||||||
|
weights = {
|
||||||
|
'e': 0.3,
|
||||||
|
'm': 0.2,
|
||||||
|
'h': 0.5
|
||||||
|
}
|
||||||
|
levels = weights.keys()
|
||||||
|
empty_stats = {
|
||||||
|
'e_ave': 0,
|
||||||
|
'm_ave': 0,
|
||||||
|
'h_ave': 0,
|
||||||
|
'weighted_ave': 0
|
||||||
|
}
|
||||||
|
overall = pd.DataFrame()
|
||||||
|
|
||||||
|
districts = list(df.index.unique(level=0))
|
||||||
|
for district in districts:
|
||||||
|
scores = {}
|
||||||
|
stats = empty_stats
|
||||||
|
weighted_ave = 0
|
||||||
|
schools = list(df.loc[district].index.unique(level=0))
|
||||||
|
if len(schools) <= 1:
|
||||||
|
continue
|
||||||
|
for level in levels:
|
||||||
|
scores[level] = []
|
||||||
|
for school in schools:
|
||||||
|
this_school = df.loc[[(district,school)]]
|
||||||
|
codes = this_school['level-codes'].iloc[0]
|
||||||
|
if level in codes:
|
||||||
|
rating = float(this_school['rating'].iloc[0])
|
||||||
|
if not math.isnan(rating):
|
||||||
|
scores[level].append(this_school['rating'].iloc[0])
|
||||||
|
#print(district, scores)
|
||||||
|
try:
|
||||||
|
stats[level+'_ave'] = round(sum(scores[level])/len(scores[level]),2)
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
for weight in weights.keys():
|
||||||
|
weighted_ave += weights[weight]*stats[weight+'_ave']
|
||||||
|
stats['weighted_ave'] = round(weighted_ave,2)
|
||||||
|
district_dict = {'district-name': district}
|
||||||
|
district_dict = {**district_dict, **stats}
|
||||||
|
overall = pd.DataFrame(district_dict)
|
||||||
|
print(overall)
|
||||||
|
return
|
||||||
Reference in New Issue
Block a user