def get_photos(id): response = [] connect('high_school') if not HighSchool.objects(id=id): response = "invalid id in request" return jsonify(response), 400 else: for school in HighSchool.objects(id=id): name = school.name.replace(' ', '%20') url_textsearch = 'https://maps.googleapis.com/maps/api/place/textsearch/json?query=' + \ name + '&key=AIzaSyBqleXsttoPMyDVWDMQgcYwutB7ENx4icQ' with urllib.request.urlopen(url_textsearch) as textsearch_json: textsearch_data = json.load(textsearch_json) if textsearch_data["status"] != "OK": response = [] return jsonify(response), 200 place_id = textsearch_data["results"][0]["place_id"] url_details = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=' + \ place_id + '&key=AIzaSyBqleXsttoPMyDVWDMQgcYwutB7ENx4icQ' with urllib.request.urlopen(url_details) as details_json: details_data = json.load(details_json) if 'photos' in details_data["result"]: for photo in details_data["result"]["photos"]: photo_reference = photo["photo_reference"] url_photo = 'https://maps.googleapis.com/maps/api/place/photo?photoreference=' + \ photo_reference + '&sensor=false&maxheight=1600&maxwidth=1600' \ '&key=AIzaSyBqleXsttoPMyDVWDMQgcYwutB7ENx4icQ' response.append(url_photo) return jsonify(response), 200
def avg_min_selective_score(sid): response = {} connect('high_school') avg = -1 if not HighSchool.objects(id=sid): response['error'] = "invalid id in request" return jsonify(response), 400 else: for school in HighSchool.objects(id=sid): if school.selective == "Not Selective": return jsonify({}), 200 scores = list(map(float, school.selective_entry_scores.values())) avg = st.mean(scores) return jsonify({'avg_min_selective_scores': int(avg)}), 200
def get_average_enrollments(sid): response = {} connect('high_school') avg = 0 if not HighSchool.objects(id=sid): response['error'] = "invalid id in request" return jsonify(response), 400 else: for school in HighSchool.objects(id=sid): enrollments = list(map(float, school.enrollments.values())) if len(enrollments) == 0: return jsonify({}), 200 avg = st.mean(enrollments) return jsonify({'avg_enrollments': int(avg)}), 200
def get_average_attendance(sid): response = {} connect('high_school') avg = 0 if not HighSchool.objects(id=sid): response['error'] = "invalid id in request" return jsonify(response), 400 else: for school in HighSchool.objects(id=sid): attendance = list(map(float, school.attendance_rates.values())) if len(attendance) == 0: return jsonify({}), 200 avg = st.harmonic_mean(attendance) return jsonify({'avg_attendance': avg}), 200
def compare_students(): schools = request.args.getlist('school_id') connect('high_school') num_students = {} for sid in schools: for school in HighSchool.objects(id=int(sid)): # get current num. of students num_students[school.name] = int(school.students) return jsonify(num_students), 200
def compare_enrollments(): schools = request.args.getlist('school_id') connect('high_school') average_enrollments = {} for sid in schools: for school in HighSchool.objects(id=int(sid)): # get the avg enrolments enrollments = list(map(float, school.enrollments.values())) average_enrollments[school.name] = st.mean(enrollments) return jsonify(average_enrollments), 200
def compare_attendances(): schools = request.args.getlist('school_id') connect('high_school') average_attendances = {} for sid in schools: for school in HighSchool.objects(id=int(sid)): # get the avg attendance_rates attendance = list(map(float, school.attendance_rates.values())) average_attendances[school.name] = st.harmonic_mean(attendance) return jsonify(average_attendances), 200
def compare_selective_entry(): schools = request.args.getlist('school_id') connect('high_school') average_selective_entry = {} for sid in schools: for school in HighSchool.objects(id=int(sid)): if school.selective != 'Not Selective': scores = list(map(float, school.selective_entry_scores.values())) average_selective_entry[school.name] = st.mean(scores) return jsonify(average_selective_entry), 200
def parse_attendance_rates(): with open('static/2011-2017-attendance-rates-by-nsw-government-schools.csv') as csvfile: rows = csv.reader(csvfile, delimiter=",") connect('high_school') for row in rows: if row[0] != "school_code" and row[0] != '': for school in HighSchool.objects(id=int(row[0])): attendance_rates = {} for i in range(0, 7): attendance_rates[str(2011 + i)] = row[i + 2] school.update(attendance_rates=attendance_rates)
def parse_government_schools(): with open('static/NSW-Public-Schools-Master-Dataset-07032017.csv') as csvfile: rows = csv.reader(csvfile, delimiter=",") connect('high_school') for row in rows: if "Secondary" in row[10] or "Central" in row[10]: print(row) if row[6] == '': row[6] = 0 if row[34] == '' or row[35] == '': row[34] = "0.0" row[35] = "0.0" school = HighSchool(id=row[0], name=row[2], street=row[3], suburb=row[4], postcode=row[5], students=int(float(row[6])), selective=row[11], gender=row[19], loc={'long': float(row[35]), 'lat': float(row[34])}) school.save()
def parse_enrolments(): with open('static/secondary-enrolments-by-school-2014-2018.csv') as csvfile: connect('high_school') rows = csv.reader(csvfile, delimiter=",") enrollments = {} for row in rows: if row[0] != '' and row[0] != "School Code" and "Student Enrolments" not in row[0] \ and "Opened" not in row[0]: school = HighSchool.objects(id=row[0]) if school is not None: for i in range(0, 4): enrollments[str(2014 + i)] = row[i + 3] school.update(enrollments=enrollments)
def parse_selective_entry_scores(): with open('static/2015-2018-selective-high-schools-minimum-entry-scores.csv') as csvfile: rows = csv.reader(csvfile, delimiter=",") connect('high_school') for row in rows: name = row[0].replace(" (Virtual)", "") name = name.replace(" (Day)", "") name = name.replace("(", "") name = name.replace(")", "") for school in HighSchool.objects(name=name): entry_scores = {} for i in range(0, 4): entry_scores[str(2015 + i)] = row[i + 1] school.update(selective_entry_scores=entry_scores)