Load correct column for 2021-22 year

pull/1/head
rebuilt 3 years ago
parent bc63dfab7e
commit 30eae881f3

@ -32,7 +32,6 @@ class RaceScoreLoader
end end
RaceScore.import(loadable_race_scores.flatten.compact, batch_size: 1_000, on_duplicate_key_update: :all) RaceScore.import(loadable_race_scores.flatten.compact, batch_size: 1_000, on_duplicate_key_update: :all)
@grouped_responses = nil @grouped_responses = nil
@total_responses = nil
@response_rate = nil @response_rate = nil
@sufficient_responses = nil @sufficient_responses = nil
end end
@ -50,33 +49,22 @@ class RaceScoreLoader
survey_items = measure.student_survey_items survey_items = measure.student_survey_items
students = StudentRace.where(race:).pluck(:student_id).uniq # students = StudentRace.where(race:).pluck(:student_id).uniq
averages = grouped_responses(school:, academic_year:, survey_items:, students:) averages = grouped_responses(school:, academic_year:, survey_items:, race:)
meets_student_threshold = sufficient_responses(school:, academic_year:, students:) meets_student_threshold = sufficient_responses(school:, academic_year:, race:)
scorify(responses: averages, meets_student_threshold:, measure:) scorify(responses: averages, meets_student_threshold:, measure:)
# binding.break
end end
def self.grouped_responses(school:, academic_year:, survey_items:, students:) def self.grouped_responses(school:, academic_year:, survey_items:, race:)
@grouped_responses ||= Hash.new do |memo, (school, academic_year, survey_items, students)| @grouped_responses ||= Hash.new do |memo, (school, academic_year, survey_items, race)|
memo[[school, academic_year, survey_items, students]] = SurveyItemResponse.where(school:, memo[[school, academic_year, survey_items, race]] =
academic_year:, SurveyItemResponse.joins('JOIN student_races on survey_item_responses.student_id = student_races.student_id JOIN students on students.id = student_races.student_id').where(
student: students, school:, academic_year:
survey_item: survey_items) ).where('student_races.race_id': race.id).group(:survey_item_id).average(:likert_score)
.group(:survey_item_id)
.average(:likert_score)
end end
@grouped_responses[[school, academic_year, survey_items, students]] @grouped_responses[[school, academic_year, survey_items, race]]
end
def self.total_responses(school:, academic_year:, students:, survey_items:)
@total_responses ||= Hash.new do
memo[[school, academic_year, students, survey_items]] = SurveyItemResponse.where(school:,
academic_year:,
student: students,
survey_item: survey_items).count
end
@total_responses[[school, academic_year, students, survey_items]]
end end
def self.response_rate(school:, academic_year:, measure:) def self.response_rate(school:, academic_year:, measure:)
@ -98,13 +86,16 @@ class RaceScoreLoader
Score.new(average, false, meets_student_threshold, false) Score.new(average, false, meets_student_threshold, false)
end end
def self.sufficient_responses(school:, academic_year:, students:) def self.sufficient_responses(school:, academic_year:, race:)
@sufficient_responses ||= Hash.new do |memo, (school, academic_year, students)| @sufficient_responses ||= Hash.new do |memo, (school, academic_year, race)|
number_of_students_for_a_racial_group = SurveyItemResponse.where(school:, academic_year:, # number_of_students_for_a_racial_group = SurveyItemResponse.where(school:, academic_year:,
student: students).map(&:student).uniq.count # student: students).map(&:student).uniq.count
memo[[school, academic_year, students]] = number_of_students_for_a_racial_group >= 10 number_of_students_for_a_racial_group = SurveyItemResponse.joins('JOIN student_races on survey_item_responses.student_id = student_races.student_id JOIN students on students.id = student_races.student_id').where(
school:, academic_year:
).where("student_races.race_id": race.id).pluck(:student_id).uniq.count
memo[[school, academic_year, race]] = number_of_students_for_a_racial_group >= 10
end end
@sufficient_responses[[school, academic_year, students]] @sufficient_responses[[school, academic_year, race]]
end end
def self.bubble_up_averages(responses:, measure:) def self.bubble_up_averages(responses:, measure:)
@ -118,7 +109,6 @@ class RaceScoreLoader
private_class_method :process_score private_class_method :process_score
private_class_method :race_score private_class_method :race_score
private_class_method :grouped_responses private_class_method :grouped_responses
private_class_method :total_responses
private_class_method :response_rate private_class_method :response_rate
private_class_method :scorify private_class_method :scorify
private_class_method :sufficient_responses private_class_method :sufficient_responses

@ -28,7 +28,7 @@ class StudentLoader
end end
def self.race_codes(row:) def self.race_codes(row:)
race_codes = row['RACE'] || row['Race'] || row['race'] || row['What is your race/ethnicity?(Please select all that apply) - Selected Choice'] || '99' race_codes = row['What is your race/ethnicity?(Please select all that apply) - Selected Choice'] || row['RACE'] || row['Race'] || row['race'] || '99'
race_codes.split(',').map(&:to_i) || [] race_codes.split(',').map(&:to_i) || []
end end
@ -43,10 +43,8 @@ class StudentLoader
end end
def self.find_or_create_student(response_id:, lasid:, races:) def self.find_or_create_student(response_id:, lasid:, races:)
student = Student.find_by(response_id:, lasid:) student = Student.find_or_create_by(response_id:, lasid:)
return unless student.nil? student.races.delete_all
student = Student.create(response_id:, lasid:)
races.map do |race| races.map do |race|
student.races << race student.races << race
end end

@ -117,10 +117,10 @@ namespace :one_off do
end end
desc 'reset race score calculations' desc 'reset race score calculations'
task reset_race_scores: :environment do task reset_race_scores_2021: :environment do
puts 'Resetting race scores' puts 'Resetting race scores'
academic_years = [AcademicYear.find_by_range('2021-22')] academic_years = [AcademicYear.find_by_range('2021-22')]
RaceScoreLoader.reset(academic_years:, fast_processing: false) RaceScoreLoader.reset(academic_years:, fast_processing: true)
Rails.cache.clear Rails.cache.clear
puts "=====================> Completed loading #{RaceScore.count} race scores" puts "=====================> Completed loading #{RaceScore.count} race scores"
end end

Loading…
Cancel
Save