如何在哈希哈希中执行数字除法



我有这个数据,与学生每小时参加体育课有关。

我需要以 0 和 1 的比例规范化这些数据。所以我试图将distribution_by_place除以total_distribution

有没有执行此操作的好方法?

distribution_by_place样本

{["cardio", "00"]=>0,
 ["cardio", "01"]=>0,
 ["cardio", "02"]=>0,
 ["cardio", "03"]=>0,
 ["cardio", "04"]=>0,
 ["cardio", "05"]=>0,
 ["cardio", "06"]=>0,
 ["cardio", "07"]=>0,
 ["cardio", "08"]=>0,
 ["cardio", "09"]=>0,
 ["cardio", "10"]=>0,
 ["cardio", "11"]=>0.35e2,
 ["cardio", "12"]=>0,
 ["cardio", "13"]=>0,
 ["cardio", "14"]=>0,
 ["cardio", "15"]=>0,
 ["cardio", "16"]=>0,
 ["cardio", "17"]=>0,
 ["cardio", "18"]=>0,
 ["cardio", "19"]=>0,
 ["cardio", "20"]=>0,
 ["cardio", "21"]=>0,
 ["cardio", "22"]=>0,
 ["cardio", "23"]=>0,
 ["swimming", "00"]=>0,
 ["swimming", "01"]=>0,
 ["swimming", "02"]=>0,
 ["swimming", "03"]=>0,
 ["swimming", "04"]=>0,
 ["swimming", "05"]=>0,
 ["swimming", "06"]=>0,
 ["swimming", "07"]=>0,
 ["swimming", "08"]=>0,
 ["swimming", "09"]=>0,
 ["swimming", "10"]=>0,
 ["swimming", "11"]=>0.35e2,
 ["swimming", "12"]=>0,
 ["swimming", "13"]=>0.3e2,
 ["swimming", "14"]=>0,
 ["swimming", "15"]=>0,
 ["swimming", "16"]=>0,
 ["swimming", "17"]=>0,
 ["swimming", "18"]=>0,
 ["swimming", "19"]=>0,
 ["swimming", "20"]=>0,
 ["swimming", "21"]=>0,
 ["swimming", "22"]=>0,
 ["swimming", "23"]=>0}

total_distribution样本

{"00"=>0,
 "01"=>0,
 "02"=>0,
 "03"=>0,
 "04"=>0,
 "05"=>0,
 "06"=>0,
 "07"=>0,
 "08"=>0,
 "09"=>0,
 "10"=>0,
 "11"=>0.7e2,
 "12"=>0,
 "13"=>0.3e2,
 "14"=>0,
 "15"=>0,
 "16"=>0,
 "17"=>0,
 "18"=>0,
 "19"=>0,
 "20"=>0,
 "21"=>0,
 "22"=>0,
 "23"=>0}

预期成果

{["cardio", "00"]=>0,
 ["cardio", "01"]=>0,
 ["cardio", "02"]=>0,
 ["cardio", "03"]=>0,
 ["cardio", "04"]=>0,
 ["cardio", "05"]=>0,
 ["cardio", "06"]=>0,
 ["cardio", "07"]=>0,
 ["cardio", "08"]=>0,
 ["cardio", "09"]=>0,
 ["cardio", "10"]=>0,
 ["cardio", "11"]=>0.5,
 ["cardio", "12"]=>0,
 ["cardio", "13"]=>0,
 ["cardio", "14"]=>0,
 ["cardio", "15"]=>0,
 ["cardio", "16"]=>0,
 ["cardio", "17"]=>0,
 ["cardio", "18"]=>0,
 ["cardio", "19"]=>0,
 ["cardio", "20"]=>0,
 ["cardio", "21"]=>0,
 ["cardio", "22"]=>0,
 ["cardio", "23"]=>0,
 ["swimming", "00"]=>0,
 ["swimming", "01"]=>0,
 ["swimming", "02"]=>0,
 ["swimming", "03"]=>0,
 ["swimming", "04"]=>0,
 ["swimming", "05"]=>0,
 ["swimming", "06"]=>0,
 ["swimming", "07"]=>0,
 ["swimming", "08"]=>0,
 ["swimming", "09"]=>0,
 ["swimming", "10"]=>0,
 ["swimming", "11"]=>0,
 ["swimming", "12"]=>0,
 ["swimming", "13"]=>1,
 ["swimming", "14"]=>0,
 ["swimming", "15"]=>0,
 ["swimming", "16"]=>0,
 ["swimming", "17"]=>0,
 ["swimming", "18"]=>0,
 ["swimming", "19"]=>0,
 ["swimming", "20"]=>0,
 ["swimming", "21"]=>0,
 ["swimming", "22"]=>0,
 ["swimming", "23"]=>0}

这些是功能

def hourly_periods
  HourlyPeriod
    .where(location_id: location.id)
    .where("start_at >= ? and end_at <= ?", start_date, end_date)
    .where.not(corrupted: true)
end
def distribution_by_place
  hourly_periods.includes(:place_type)
    .where.not(place_type_id: gym_entrance.id)
    .group("place_types.name")
    .group_by_hour_of_day(:start_at, format: "%H")
    .average(:attendance)
end
def total_distribution
  hourly_periods.includes(:place_type)
    .where.not(place_type_id: gym_entrance.id)
    .group_by_hour_of_day(:start_at, format: "%H")
    .average(:attendance)
end

忽略你的函数,只看你展示的示例哈希,你可以这样做:

distribution_by_place.each do |key, value|
  index = key.second
  distribution_by_place[key] = value / total_distribution[index] unless total_distribution[index] == 0
end

最新更新