earth 0.7.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- data/certification_changelog.markdown +21 -0
- data/lib/earth/air.rb +0 -2
- data/lib/earth/air/aircraft.rb +77 -27
- data/lib/earth/air/aircraft/data_miner.rb +12 -19
- data/lib/earth/air/aircraft_instance.rb +2 -0
- data/lib/earth/air/aircraft_instance_seat_class.rb +1 -0
- data/lib/earth/air/airport/data_miner.rb +1 -1
- data/lib/earth/air/data_miner.rb +0 -2
- data/lib/earth/air/flight_distance_class.rb +2 -3
- data/lib/earth/air/flight_distance_class/data_miner.rb +0 -13
- data/lib/earth/air/flight_distance_class_seat_class.rb +3 -2
- data/lib/earth/air/flight_seat_class.rb +0 -6
- data/lib/earth/air/flight_seat_class/data_miner.rb +0 -7
- data/lib/earth/air/flight_segment.rb +47 -53
- data/lib/earth/air/flight_segment/data_miner.rb +2 -2
- data/lib/earth/automobile.rb +4 -3
- data/lib/earth/automobile/automobile_fuel.rb +56 -119
- data/lib/earth/automobile/automobile_fuel/data_miner.rb +17 -4
- data/lib/earth/automobile/automobile_make.rb +1 -16
- data/lib/earth/automobile/automobile_make/data_miner.rb +25 -25
- data/lib/earth/automobile/automobile_make_model.rb +0 -26
- data/lib/earth/automobile/automobile_make_model/data_miner.rb +12 -13
- data/lib/earth/automobile/automobile_make_model_year.rb +6 -37
- data/lib/earth/automobile/automobile_make_model_year/data_miner.rb +34 -18
- data/lib/earth/automobile/automobile_make_model_year_variant.rb +27 -49
- data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +111 -140
- data/lib/earth/automobile/automobile_make_year.rb +0 -12
- data/lib/earth/automobile/automobile_make_year/data_miner.rb +22 -23
- data/lib/earth/automobile/automobile_make_year_fleet.rb +11 -0
- data/lib/earth/automobile/{automobile_make_fleet_year → automobile_make_year_fleet}/data_miner.rb +1 -2
- data/lib/earth/automobile/automobile_model.rb +5 -0
- data/lib/earth/automobile/automobile_model/data_miner.rb +19 -0
- data/lib/earth/automobile/automobile_size_class.rb +1 -0
- data/lib/earth/automobile/automobile_size_class/data_miner.rb +30 -4
- data/lib/earth/automobile/automobile_type_fuel_year.rb +1 -1
- data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +30 -19
- data/lib/earth/automobile/automobile_type_fuel_year_age.rb +0 -3
- data/lib/earth/automobile/automobile_type_fuel_year_age/data_miner.rb +13 -15
- data/lib/earth/automobile/automobile_type_fuel_year_control.rb +0 -4
- data/lib/earth/automobile/automobile_type_fuel_year_control/data_miner.rb +0 -8
- data/lib/earth/automobile/automobile_type_year.rb +2 -1
- data/lib/earth/automobile/automobile_type_year/data_miner.rb +12 -10
- data/lib/earth/automobile/automobile_year.rb +5 -0
- data/lib/earth/automobile/automobile_year/data_miner.rb +15 -0
- data/lib/earth/automobile/data_miner.rb +5 -3
- data/lib/earth/automobile/dependencies.txt +45 -0
- data/lib/earth/bus/bus_class.rb +1 -87
- data/lib/earth/bus/bus_class/data_miner.rb +0 -1
- data/lib/earth/bus/bus_fuel/data_miner.rb +12 -19
- data/lib/earth/bus/bus_fuel_control/data_miner.rb +8 -12
- data/lib/earth/conversions_ext.rb +1 -0
- data/lib/earth/fuel/fuel/data_miner.rb +28 -38
- data/lib/earth/fuel/fuel_year/data_miner.rb +36 -47
- data/lib/earth/hospitality/lodging_class/data_miner.rb +12 -6
- data/lib/earth/locality.rb +1 -0
- data/lib/earth/locality/country.rb +1 -1
- data/lib/earth/locality/country/data_miner.rb +36 -28
- data/lib/earth/locality/data_miner.rb +1 -0
- data/lib/earth/locality/egrid_subregion/data_miner.rb +19 -14
- data/lib/earth/locality/urbanity/data_miner.rb +1 -3
- data/lib/earth/locality/zip_code/data_miner.rb +1 -1
- data/lib/earth/rail/national_transit_database_record/data_miner.rb +10 -14
- data/lib/earth/rail/rail_fuel.rb +2 -6
- data/lib/earth/residence/air_conditioner_use/data_miner.rb +1 -3
- data/lib/earth/residence/clothes_machine_use/data_miner.rb +1 -3
- data/lib/earth/residence/dishwasher_use/data_miner.rb +1 -3
- data/lib/earth/residence/residence_class/data_miner.rb +1 -3
- data/lib/earth/residence/residential_energy_consumption_survey_response/data_miner.rb +3 -1
- data/lib/earth/utils.rb +15 -5
- data/lib/earth/version.rb +1 -1
- data/spec/earth_spec.rb +4 -4
- metadata +9 -11
- data/features/automobile_type_fuel_age.feature +0 -55
- data/lib/earth/air/aircraft_class.rb +0 -59
- data/lib/earth/air/aircraft_class/data_miner.rb +0 -14
- data/lib/earth/air/aircraft_fuel_use_equation.rb +0 -33
- data/lib/earth/air/aircraft_fuel_use_equation/data_miner.rb +0 -13
- data/lib/earth/automobile/automobile_make_fleet_year.rb +0 -46
- data/lib/earth/automobile/automobile_type_fuel_age.rb +0 -65
- data/lib/earth/automobile/automobile_type_fuel_age/data_miner.rb +0 -149
@@ -1,22 +1,10 @@
|
|
1
1
|
class AutomobileMakeYear < ActiveRecord::Base
|
2
2
|
set_primary_key :name
|
3
3
|
|
4
|
-
belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
|
5
|
-
has_many :fleet_years, :class_name => 'AutomobileMakeFleetYear', :foreign_key => 'make_year_name'
|
6
|
-
|
7
4
|
col :name
|
8
5
|
col :make_name
|
9
6
|
col :year, :type => :integer
|
10
7
|
col :fuel_efficiency, :type => :float
|
11
8
|
col :fuel_efficiency_units
|
12
9
|
col :volume, :type => :integer # This will sometimes be null because not all make_years have CAFE data
|
13
|
-
|
14
|
-
# FIXME TODO verify make_name and volume?
|
15
|
-
|
16
|
-
# verify "Fuel efficiency should be greater than zero" do
|
17
|
-
# if violator = first(:conditions => ['fuel_efficiency IS NULL OR fuel_efficiency <= 0'])
|
18
|
-
# raise "Invalid fuel efficiency for AutomobileMakeYear #{record.name}: #{record.fuel_efficiency} (should be > 0)"
|
19
|
-
# end
|
20
|
-
# true
|
21
|
-
# end
|
22
10
|
end
|
@@ -4,9 +4,9 @@ AutomobileMakeYear.class_eval do
|
|
4
4
|
delete_all
|
5
5
|
end
|
6
6
|
|
7
|
-
process "Ensure AutomobileMakeModelYearVariant and
|
7
|
+
process "Ensure AutomobileMakeModelYearVariant and AutomobileMakeYearFleet are populated" do
|
8
8
|
AutomobileMakeModelYearVariant.run_data_miner!
|
9
|
-
|
9
|
+
AutomobileMakeYearFleet.run_data_miner!
|
10
10
|
end
|
11
11
|
|
12
12
|
process "Derive manufacturer names and years from automobile make model year variants" do
|
@@ -14,36 +14,35 @@ AutomobileMakeYear.class_eval do
|
|
14
14
|
:src => AutomobileMakeModelYearVariant,
|
15
15
|
:dest => AutomobileMakeYear,
|
16
16
|
:cols => {
|
17
|
-
:
|
17
|
+
[:make_name, :year] => :name,
|
18
18
|
:make_name => :make_name,
|
19
19
|
:year => :year
|
20
20
|
}
|
21
|
-
# :where => 'src.make_name IS NOT NULL AND LENGTH(src.make_name) > 0 AND src.year IS NOT NULL AND LENGTH(src.year) > 0'
|
22
21
|
)
|
23
22
|
end
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
update_all
|
24
|
+
process "Calculate fuel efficiency and sales volume from make year fleets for makes with CAFE data" do
|
25
|
+
make_years = arel_table
|
26
|
+
year_fleets = AutomobileMakeYearFleet.arel_table
|
27
|
+
conditional_relation = make_years[:make_name].eq(year_fleets[:make_name]).and(make_years[:year].eq(year_fleets[:year]))
|
28
|
+
fuel_efficiency_relation = AutomobileMakeYearFleet.weighted_average_relation(:fuel_efficiency, :weighted_by => :volume).where(conditional_relation)
|
29
|
+
volume_relation = year_fleets.project(year_fleets[:volume].sum).where(conditional_relation)
|
30
|
+
update_all(%{
|
31
|
+
fuel_efficiency = (#{fuel_efficiency_relation.to_sql}),
|
32
|
+
fuel_efficiency_units = 'kilometres_per_litre',
|
33
|
+
volume = (#{volume_relation.to_sql})
|
34
|
+
})
|
32
35
|
end
|
33
36
|
|
34
37
|
process "Calculate fuel effeciency from automobile make model year variants for makes without CAFE data" do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
process 'Set units' do
|
46
|
-
update_all "fuel_efficiency_units = 'kilometres_per_litre'"
|
38
|
+
make_years = arel_table
|
39
|
+
variants = AutomobileMakeModelYearVariant.arel_table
|
40
|
+
conditional_relation = make_years[:make_name].eq(variants[:make_name]).and(make_years[:year].eq(variants[:year]))
|
41
|
+
relation = variants.project(variants[:fuel_efficiency].average).where(conditional_relation)
|
42
|
+
where(:fuel_efficiency => nil).update_all(%{
|
43
|
+
fuel_efficiency = (#{relation.to_sql}),
|
44
|
+
fuel_efficiency_units = 'kilometres_per_litre'
|
45
|
+
})
|
47
46
|
end
|
48
47
|
end
|
49
48
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class AutomobileMakeYearFleet < ActiveRecord::Base
|
2
|
+
set_primary_key :name
|
3
|
+
|
4
|
+
col :name
|
5
|
+
col :make_name
|
6
|
+
col :year, :type => :integer
|
7
|
+
col :fleet
|
8
|
+
col :fuel_efficiency, :type => :float
|
9
|
+
col :fuel_efficiency_units
|
10
|
+
col :volume, :type => :integer
|
11
|
+
end
|
data/lib/earth/automobile/{automobile_make_fleet_year → automobile_make_year_fleet}/data_miner.rb
RENAMED
@@ -1,11 +1,10 @@
|
|
1
|
-
|
1
|
+
AutomobileMakeYearFleet.class_eval do
|
2
2
|
data_miner do
|
3
3
|
import "annual corporate average fuel economy data for domestic and imported vehicle fleets from the NHTSA",
|
4
4
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdEdXWXB6dkVLWkowLXhYSFVUT01sS2c&hl=en&gid=0&output=csv',
|
5
5
|
:errata => { 'url' => 'http://static.brighterplanet.com/science/data/transport/automobiles/make_fleet_years/errata.csv' },
|
6
6
|
:select => lambda { |row| row['volume'].to_i > 0 } do
|
7
7
|
key 'name', :synthesize => lambda { |row| [ row['manufacturer_name'], row['year_content'], row['fleet'][2,2] ].join ' ' }
|
8
|
-
store 'make_year_name', :synthesize => lambda { |row| [ row['manufacturer_name'], row['year_content'] ].join ' ' }
|
9
8
|
store 'make_name', :field_name => 'manufacturer_name'
|
10
9
|
store 'year', :field_name => 'year_content'
|
11
10
|
store 'fleet', :chars => 2..3 # zero-based
|
@@ -0,0 +1,19 @@
|
|
1
|
+
AutomobileModel.class_eval do
|
2
|
+
data_miner do
|
3
|
+
process "Start from scratch" do
|
4
|
+
delete_all
|
5
|
+
end
|
6
|
+
|
7
|
+
process "Ensure AutomobileMakeModelYearVariant is populated" do
|
8
|
+
AutomobileMakeModelYearVariant.run_data_miner!
|
9
|
+
end
|
10
|
+
|
11
|
+
process "Derive model names from automobile make model year variants" do
|
12
|
+
::Earth::Utils.insert_ignore(
|
13
|
+
:src => AutomobileMakeModelYearVariant,
|
14
|
+
:dest => AutomobileModel,
|
15
|
+
:cols => { :model_name => :name }
|
16
|
+
)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class AutomobileSizeClass < ActiveRecord::Base
|
2
2
|
set_primary_key :name
|
3
3
|
|
4
|
+
# FIXME TODO clean up size class in MakeModelYearVariant, derive size class for MakeModelYear, and calculate this from MakeModelYear
|
4
5
|
falls_back_on :hybrid_fuel_efficiency_city_multiplier => 1.651, # https://brighterplanet.sifterapp.com/issue/667
|
5
6
|
:hybrid_fuel_efficiency_highway_multiplier => 1.213,
|
6
7
|
:conventional_fuel_efficiency_city_multiplier => 0.987,
|
@@ -1,6 +1,5 @@
|
|
1
1
|
AutomobileSizeClass.class_eval do
|
2
2
|
data_miner do
|
3
|
-
# FIXME TODO pull this from AutomobileSizeClassYear
|
4
3
|
import "a list of size classes and pre-calculated fuel efficiencies",
|
5
4
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdHlRUE5IcWlrRENhN0EtUldPTy1rX1E&gid=0&output=csv' do
|
6
5
|
key 'name'
|
@@ -9,17 +8,44 @@ AutomobileSizeClass.class_eval do
|
|
9
8
|
store 'fuel_efficiency_highway', :units_field_name => 'fuel_efficiency_highway_units'
|
10
9
|
end
|
11
10
|
|
11
|
+
# FIXME TODO derive everything from AutomobileSizeClassYear and AutomobileTypeFuelYearAge
|
12
|
+
# process "Start from scratch" do
|
13
|
+
# delete_all
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# process "Ensure AutomobileSizeClassYear is populated" do
|
17
|
+
# AutomobileSizeClassYear.run_data_miner!
|
18
|
+
# AutomobileTypeFuelYearAge.run_data_miner!
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# process "Derive size classes from AutomobileSizeClassYear" do
|
22
|
+
# ::Earth::Utils.insert_ignore(
|
23
|
+
# :src => AutomobileSizeClassYear,
|
24
|
+
# :dest => AutomobileSizeClass,
|
25
|
+
# :cols => {
|
26
|
+
# :size_class_name => :name,
|
27
|
+
# :type_name => :type_name,
|
28
|
+
# }
|
29
|
+
# )
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# process "somehow calculate fuel efficiency from size class year and type fuel year age" do
|
33
|
+
#
|
34
|
+
# end
|
35
|
+
|
12
36
|
process "Ensure AutomobileTypeFuelYearAge is populated" do
|
13
37
|
AutomobileTypeFuelYearAge.run_data_miner!
|
14
38
|
end
|
15
39
|
|
16
40
|
# FIXME TODO make this a method on AutomobileSizeClass?
|
17
41
|
process "Calculate annual distance from AutomobileTypeFuelYearAge" do
|
42
|
+
classes = arel_table
|
18
43
|
ages = AutomobileTypeFuelYearAge.arel_table
|
19
|
-
classes = AutomobileSizeClass.arel_table
|
20
44
|
conditional_relation = ages[:type_name].eq(classes[:type_name])
|
21
|
-
update_all
|
22
|
-
|
45
|
+
update_all(%{
|
46
|
+
annual_distance = (#{AutomobileTypeFuelYearAge.weighted_average_relation(:annual_distance, :weighted_by => :vehicles).where(conditional_relation).to_sql}),
|
47
|
+
annual_distance_units = 'kilometres'
|
48
|
+
})
|
23
49
|
end
|
24
50
|
|
25
51
|
import "pre-calculated fuel efficiency multipliers",
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class AutomobileTypeFuelYear < ActiveRecord::Base
|
2
2
|
set_primary_key :name
|
3
3
|
|
4
|
-
|
4
|
+
# FIXME TODO keep this until fix AutomobileFuel import so that it doesn't call type_fuel_year.type_year
|
5
5
|
belongs_to :type_year, :class_name => 'AutomobileTypeYear', :foreign_key => 'type_year_name'
|
6
6
|
|
7
7
|
col :name
|
@@ -50,12 +50,10 @@ AutomobileTypeFuelYear.class_eval do
|
|
50
50
|
|
51
51
|
process "Convert total travel from billion miles to kilometres" do
|
52
52
|
conversion_factor = 1_000_000_000.miles.to(:kilometres)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
WHERE total_travel_units = 'billion_miles'
|
58
|
-
}
|
53
|
+
where(:total_travel_units => 'billion_miles').update_all(%{
|
54
|
+
total_travel = 1.0 * total_travel * #{conversion_factor},
|
55
|
+
total_travel_units = 'kilometres'
|
56
|
+
})
|
59
57
|
end
|
60
58
|
|
61
59
|
import "fuel consumption derived from the 2010 EPA GHG Inventory",
|
@@ -74,19 +72,32 @@ AutomobileTypeFuelYear.class_eval do
|
|
74
72
|
end
|
75
73
|
|
76
74
|
process "Calculate CH4 and N2O emision factors from AutomobileTypeFuelYearControl and AutomobileTypeFuelControl" do
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
75
|
+
# FIXME TODO tried to do this with arel but '*' method is not defined
|
76
|
+
# fuel_years = arel_table
|
77
|
+
# year_controls = AutomobileTypeFuelYearControl.arel_table
|
78
|
+
# controls = AutomobileTypeFuelControl.arel_table
|
79
|
+
# year_controls.project((year_controls[:total_travel_percent] * controls[:ch4_emission_factor]).sum)
|
80
|
+
# .join(controls)
|
81
|
+
# .on(year_controls[:type_name].eq(controls[:type_name])
|
82
|
+
# .and(year_controls[:fuel_common_name].eq(controls[:fuel_common_name]))
|
83
|
+
# .and(year_controls[:control_name].eq(controls[:control_name])))
|
84
|
+
%w{ ch4 n2o }.each do |gas|
|
85
|
+
emission_factor = %{
|
86
|
+
( SELECT SUM(1.0 * t1.total_travel_percent * t2.#{gas}_emission_factor)
|
87
|
+
FROM #{AutomobileTypeFuelYearControl.quoted_table_name} AS t1
|
88
|
+
INNER JOIN #{AutomobileTypeFuelControl.quoted_table_name} AS t2
|
89
|
+
ON t1.type_name = t2.type_name
|
90
|
+
AND t1.fuel_common_name = t2.fuel_common_name
|
91
|
+
AND t1.control_name = t2.control_name
|
92
|
+
WHERE
|
93
|
+
t1.type_name = #{quoted_table_name}.type_name
|
94
|
+
AND t1.fuel_common_name = #{quoted_table_name}.fuel_common_name
|
95
|
+
AND t1.year = #{quoted_table_name}.year )
|
96
|
+
}
|
97
|
+
update_all(%{
|
98
|
+
#{gas}_emission_factor = 1.0 * #{emission_factor} * total_travel / fuel_consumption,
|
99
|
+
#{gas}_emission_factor_units = 'kilograms_per_litre'
|
100
|
+
})
|
90
101
|
end
|
91
102
|
end
|
92
103
|
end
|
@@ -1,14 +1,11 @@
|
|
1
1
|
class AutomobileTypeFuelYearAge < ActiveRecord::Base
|
2
2
|
set_primary_key :name
|
3
3
|
|
4
|
-
belongs_to :type_fuel_year, :class_name => 'AutomobileTypeFuelYear', :foreign_key => 'type_fuel_year_name'
|
5
|
-
|
6
4
|
col :name
|
7
5
|
col :type_name
|
8
6
|
col :fuel_common_name
|
9
7
|
col :year, :type => :integer
|
10
8
|
col :age, :type => :integer
|
11
|
-
col :type_fuel_year_name
|
12
9
|
col :total_travel_percent, :type => :float
|
13
10
|
col :annual_distance, :type => :float
|
14
11
|
col :annual_distance_units
|
@@ -90,16 +90,10 @@ AutomobileTypeFuelYearAge.class_eval do
|
|
90
90
|
|
91
91
|
process "Convert annual distance from miles to kilometres" do
|
92
92
|
conversion_factor = 1.miles.to(:kilometres)
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
WHERE annual_distance_units = 'miles'
|
98
|
-
}
|
99
|
-
end
|
100
|
-
|
101
|
-
process "Derive type fuel year name for association with AutomobileTypeFuelYear" do
|
102
|
-
update_all "type_fuel_year_name = type_name || ' ' || fuel_common_name || ' ' || year"
|
93
|
+
where(:annual_distance_units => 'miles').update_all(%{
|
94
|
+
annual_distance = 1.0 * annual_distance * #{conversion_factor},
|
95
|
+
annual_distance_units = 'kilometres'
|
96
|
+
})
|
103
97
|
end
|
104
98
|
|
105
99
|
process "Ensure AutomobileTypeFuelYear is populated" do
|
@@ -107,11 +101,15 @@ AutomobileTypeFuelYearAge.class_eval do
|
|
107
101
|
end
|
108
102
|
|
109
103
|
process "Calculate number of vehicles from total travel percent and AutomobileTypeFuelYear" do
|
110
|
-
total_travel =
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
104
|
+
total_travel = %{
|
105
|
+
SELECT t1.total_travel
|
106
|
+
FROM #{AutomobileTypeFuelYear.quoted_table_name} AS t1
|
107
|
+
WHERE
|
108
|
+
t1.type_name = #{quoted_table_name}.type_name
|
109
|
+
AND t1.fuel_common_name = #{quoted_table_name}.fuel_common_name
|
110
|
+
AND t1.year = #{quoted_table_name}.year
|
111
|
+
}
|
112
|
+
where("annual_distance > 0").update_all "vehicles = 1.0 * total_travel_percent * (#{total_travel}) / annual_distance"
|
115
113
|
end
|
116
114
|
end
|
117
115
|
end
|
@@ -1,15 +1,11 @@
|
|
1
1
|
class AutomobileTypeFuelYearControl < ActiveRecord::Base
|
2
2
|
set_primary_key :name
|
3
3
|
|
4
|
-
belongs_to :control, :class_name => 'AutomobileTypeFuelControl', :foreign_key => 'type_fuel_control_name'
|
5
|
-
|
6
4
|
col :name
|
7
5
|
col :type_name
|
8
6
|
col :fuel_common_name
|
9
7
|
col :year, :type => :integer
|
10
8
|
col :control_name
|
11
|
-
col :type_fuel_control_name
|
12
|
-
col :type_fuel_year_name
|
13
9
|
col :total_travel_percent, :type => :float
|
14
10
|
|
15
11
|
# %w{ type_name fuel_common_name control_name type_fuel_control_name type_fuel_year_name }.each do |attribute|
|
@@ -9,13 +9,5 @@ AutomobileTypeFuelYearControl.class_eval do
|
|
9
9
|
store 'control_name'
|
10
10
|
store 'total_travel_percent'
|
11
11
|
end
|
12
|
-
|
13
|
-
process "Derive type fuel control name for association with AutomobileTypeFuelControl" do
|
14
|
-
update_all "type_fuel_control_name = type_name || ' ' || fuel_common_name || ' ' || control_name"
|
15
|
-
end
|
16
|
-
|
17
|
-
process "Derive type fuel year name for association with AutomobileTypeFuelYear" do
|
18
|
-
update_all "type_fuel_year_name = type_name || ' ' || fuel_common_name || ' ' || year"
|
19
|
-
end
|
20
12
|
end
|
21
13
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
class AutomobileTypeYear < ActiveRecord::Base
|
2
2
|
set_primary_key :name
|
3
3
|
|
4
|
+
# FIXME TODO keep this until fix AutomobileFuel fallback hfc emission factor so that it doesn't call type_year.type_fuel_year
|
4
5
|
has_many :type_fuel_years, :class_name => 'AutomobileTypeFuelYear', :foreign_key => 'type_year_name'
|
5
|
-
|
6
|
+
|
6
7
|
col :name
|
7
8
|
col :type_name
|
8
9
|
col :year, :type => :integer
|
@@ -12,16 +12,18 @@ AutomobileTypeYear.class_eval do
|
|
12
12
|
AutomobileTypeFuelYear.run_data_miner!
|
13
13
|
end
|
14
14
|
|
15
|
-
process "Set units" do
|
16
|
-
update_all :hfc_emission_factor_units => 'kilograms_co2e_per_litre'
|
17
|
-
end
|
18
|
-
|
19
15
|
process "Calculate HFC emission factor from AutomobileTypeFuelYear" do
|
20
|
-
total_fuel_consumption =
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
total_fuel_consumption = %{
|
17
|
+
SELECT SUM(src.fuel_consumption)
|
18
|
+
FROM #{AutomobileTypeFuelYear.quoted_table_name} AS src
|
19
|
+
WHERE
|
20
|
+
src.type_name = #{quoted_table_name}.type_name
|
21
|
+
AND src.year = #{quoted_table_name}.year
|
22
|
+
}
|
23
|
+
where("(#{total_fuel_consumption}) > 0").update_all(%{
|
24
|
+
hfc_emission_factor = 1.0 * hfc_emissions / (#{total_fuel_consumption}),
|
25
|
+
hfc_emission_factor_units = 'kilograms_co2e_per_litre'
|
26
|
+
})
|
27
|
+
end
|
26
28
|
end
|
27
29
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
AutomobileYear.class_eval do
|
2
|
+
data_miner do
|
3
|
+
process "Ensure AutomobileMakeModelYearVariant is populated" do
|
4
|
+
AutomobileMakeModelYearVariant.run_data_miner!
|
5
|
+
end
|
6
|
+
|
7
|
+
process "Derive year names from automobile make model year variants" do
|
8
|
+
::Earth::Utils.insert_ignore(
|
9
|
+
:src => AutomobileMakeModelYearVariant,
|
10
|
+
:dest => AutomobileYear,
|
11
|
+
:cols => { :year => :year }
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,16 +1,18 @@
|
|
1
1
|
require 'earth/automobile/automobile_fuel/data_miner'
|
2
2
|
require 'earth/automobile/automobile_make/data_miner'
|
3
|
-
require 'earth/automobile/automobile_make_fleet_year/data_miner'
|
4
3
|
require 'earth/automobile/automobile_make_year/data_miner'
|
4
|
+
require 'earth/automobile/automobile_make_year_fleet/data_miner'
|
5
5
|
require 'earth/automobile/automobile_make_model/data_miner'
|
6
6
|
require 'earth/automobile/automobile_make_model_year/data_miner'
|
7
|
+
require 'earth/automobile/automobile_make_model_year_variant/data_miner'
|
7
8
|
require 'earth/automobile/automobile_size_class/data_miner'
|
8
9
|
require 'earth/automobile/automobile_size_class_year/data_miner'
|
9
|
-
require 'earth/automobile/automobile_make_model_year_variant/data_miner'
|
10
10
|
require 'earth/automobile/automobile_type_year/data_miner'
|
11
|
-
require 'earth/automobile/automobile_type_fuel_age/data_miner'
|
12
11
|
require 'earth/automobile/automobile_type_fuel_control/data_miner'
|
13
12
|
require 'earth/automobile/automobile_type_fuel_year/data_miner'
|
14
13
|
require 'earth/automobile/automobile_type_fuel_year_age/data_miner'
|
15
14
|
require 'earth/automobile/automobile_type_fuel_year_control/data_miner'
|
15
|
+
require 'earth/automobile/automobile_model/data_miner'
|
16
|
+
require 'earth/automobile/automobile_year/data_miner'
|
17
|
+
|
16
18
|
require 'earth/fuel/data_miner'
|