earth 0.11.0 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/earth_tester.rb +1 -0
- data/earth.gemspec +1 -1
- data/lib/earth.rb +1 -1
- data/lib/earth/air/flight_segment/data_miner.rb +5 -9
- data/lib/earth/automobile/automobile_size_class_year.rb +1 -0
- data/lib/earth/automobile/automobile_size_class_year/data_miner.rb +1 -0
- data/lib/earth/data_miner.rb +1 -0
- data/lib/earth/fuel/fuel_type.rb +1 -0
- data/lib/earth/fuel/fuel_type/data_miner.rb +1 -0
- data/lib/earth/hospitality.rb +2 -0
- data/lib/earth/hospitality/census_region_lodging_class.rb +16 -0
- data/lib/earth/hospitality/census_region_lodging_class/data_miner.rb +40 -0
- data/lib/earth/hospitality/country_lodging_class.rb +16 -0
- data/lib/earth/hospitality/country_lodging_class/data_miner.rb +40 -0
- data/lib/earth/hospitality/data_miner.rb +2 -0
- data/lib/earth/hospitality/lodging_class.rb +3 -1
- data/lib/earth/hospitality/lodging_class/data_miner.rb +6 -5
- data/lib/earth/industry/data_miner.rb +1 -0
- data/lib/earth/industry/industry.rb +1 -1
- data/lib/earth/industry/industry/data_miner.rb +12 -0
- data/lib/earth/industry/merchant_category.rb +1 -1
- data/lib/earth/locality.rb +5 -7
- data/lib/earth/locality/census_division/data_miner.rb +7 -6
- data/lib/earth/locality/country.rb +25 -2
- data/lib/earth/locality/country/data_miner.rb +74 -23
- data/lib/earth/locality/data_miner.rb +5 -7
- data/lib/earth/locality/egrid_country.rb +17 -0
- data/lib/earth/locality/egrid_country/data_miner.rb +13 -0
- data/lib/earth/locality/egrid_region.rb +2 -14
- data/lib/earth/locality/egrid_region/data_miner.rb +15 -14
- data/lib/earth/locality/egrid_subregion.rb +3 -64
- data/lib/earth/locality/egrid_subregion/data_miner.rb +39 -25
- data/lib/earth/locality/zip_code/data_miner.rb +1 -0
- data/lib/earth/rail.rb +6 -0
- data/lib/earth/{locality → rail}/country_rail_class.rb +0 -0
- data/lib/earth/{locality → rail}/country_rail_class/data_miner.rb +0 -0
- data/lib/earth/{locality → rail}/country_rail_traction.rb +0 -0
- data/lib/earth/{locality → rail}/country_rail_traction/data_miner.rb +0 -0
- data/lib/earth/{locality → rail}/country_rail_traction_class.rb +0 -0
- data/lib/earth/{locality → rail}/country_rail_traction_class/data_miner.rb +0 -0
- data/lib/earth/rail/data_miner.rb +6 -0
- data/lib/earth/rail/national_transit_database_record/data_miner.rb +1 -0
- data/lib/earth/rail/rail_company/data_miner.rb +6 -5
- data/lib/earth/residence.rb +1 -2
- data/lib/earth/residence/data_miner.rb +1 -2
- data/lib/earth/residence/residence_fuel_type.rb +5 -2
- data/lib/earth/{locality → residence}/urbanity.rb +0 -0
- data/lib/earth/{locality → residence}/urbanity/data_miner.rb +0 -0
- data/lib/earth/version.rb +1 -1
- data/spec/earth_spec.rb +6 -6
- metadata +216 -209
data/bin/earth_tester.rb
CHANGED
data/earth.gemspec
CHANGED
@@ -5,7 +5,7 @@ require "earth/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "earth"
|
7
7
|
s.version = Earth::VERSION
|
8
|
-
s.date = "2011-
|
8
|
+
s.date = "2011-12-06"
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
10
|
s.authors = ["Seamus Abshere", "Derek Kastner", "Andy Rossmeissl"]
|
11
11
|
s.email = %q{andy@rossmeissl.net}
|
data/lib/earth.rb
CHANGED
@@ -131,7 +131,7 @@ module Earth
|
|
131
131
|
end
|
132
132
|
|
133
133
|
TAPS_STEP = 'Tap the Brighter Planet data server'
|
134
|
-
TAPS_SOURCE = 'http://carbon:neutral@data.brighterplanet.com'
|
134
|
+
TAPS_SOURCE = 'http://carbon:neutral@data.brighterplanet.com:5000'
|
135
135
|
def _prepend_taps_step_to_data_miner(resource)
|
136
136
|
resource_model = resource.constantize
|
137
137
|
return if resource_model.data_miner_config.steps.any? { |step| step.description == TAPS_STEP }
|
@@ -10,13 +10,15 @@ FlightSegment.class_eval do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
URL = 'http://www.transtats.bts.gov/DownLoad_Table.asp
|
13
|
+
URL = 'http://www.transtats.bts.gov/DownLoad_Table.asp'
|
14
14
|
FORM_DATA = %{
|
15
|
+
Table_ID=293&
|
16
|
+
Has_Group=3&
|
15
17
|
UserTableName=T_100_Segment__All_Carriers&
|
16
18
|
DBShortName=Air_Carriers&
|
17
19
|
RawDataTable=T_T100_SEGMENT_ALL_CARRIER&
|
18
|
-
sqlstr=+SELECT+DEPARTURES_SCHEDULED%2CDEPARTURES_PERFORMED%2CPAYLOAD%2CSEATS%2CPASSENGERS%2CFREIGHT%2CMAIL%2CDISTANCE%2CRAMP_TO_RAMP%2CAIR_TIME%2CUNIQUE_CARRIER%2CAIRLINE_ID%2CUNIQUE_CARRIER_NAME%2CUNIQUE_CARRIER_ENTITY%2CREGION%2CCARRIER%2CCARRIER_NAME%2CCARRIER_GROUP%2CCARRIER_GROUP_NEW%2CORIGIN%2CORIGIN_CITY_NAME%
|
19
|
-
varlist=DEPARTURES_SCHEDULED%2CDEPARTURES_PERFORMED%2CPAYLOAD%2CSEATS%2CPASSENGERS%2CFREIGHT%2CMAIL%2CDISTANCE%2CRAMP_TO_RAMP%2CAIR_TIME%2CUNIQUE_CARRIER%2CAIRLINE_ID%2CUNIQUE_CARRIER_NAME%2CUNIQUE_CARRIER_ENTITY%2CREGION%2CCARRIER%2CCARRIER_NAME%2CCARRIER_GROUP%2CCARRIER_GROUP_NEW%2CORIGIN%2CORIGIN_CITY_NAME%
|
20
|
+
sqlstr=+SELECT+DEPARTURES_SCHEDULED%2CDEPARTURES_PERFORMED%2CPAYLOAD%2CSEATS%2CPASSENGERS%2CFREIGHT%2CMAIL%2CDISTANCE%2CRAMP_TO_RAMP%2CAIR_TIME%2CUNIQUE_CARRIER%2CAIRLINE_ID%2CUNIQUE_CARRIER_NAME%2CUNIQUE_CARRIER_ENTITY%2CREGION%2CCARRIER%2CCARRIER_NAME%2CCARRIER_GROUP%2CCARRIER_GROUP_NEW%2CORIGIN%2CORIGIN_CITY_NAME%2CORIGIN_STATE_ABR%2CORIGIN_STATE_FIPS%2CORIGIN_STATE_NM%2CORIGIN_COUNTRY%2CORIGIN_COUNTRY_NAME%2CORIGIN_WAC%2CDEST%2CDEST_CITY_NAME%2CDEST_STATE_ABR%2CDEST_STATE_FIPS%2CDEST_STATE_NM%2CDEST_COUNTRY%2CDEST_COUNTRY_NAME%2CDEST_WAC%2CAIRCRAFT_GROUP%2CAIRCRAFT_TYPE%2CAIRCRAFT_CONFIG%2CYEAR%2CQUARTER%2CMONTH%2CDISTANCE_GROUP%2CCLASS%2CDATA_SOURCE+FROM++T_T100_SEGMENT_ALL_CARRIER+WHERE+Month+%3D__MONTH_NUMBER__+AND+YEAR%3D__YEAR__&
|
21
|
+
varlist=DEPARTURES_SCHEDULED%2CDEPARTURES_PERFORMED%2CPAYLOAD%2CSEATS%2CPASSENGERS%2CFREIGHT%2CMAIL%2CDISTANCE%2CRAMP_TO_RAMP%2CAIR_TIME%2CUNIQUE_CARRIER%2CAIRLINE_ID%2CUNIQUE_CARRIER_NAME%2CUNIQUE_CARRIER_ENTITY%2CREGION%2CCARRIER%2CCARRIER_NAME%2CCARRIER_GROUP%2CCARRIER_GROUP_NEW%2CORIGIN%2CORIGIN_CITY_NAME%2CORIGIN_STATE_ABR%2CORIGIN_STATE_FIPS%2CORIGIN_STATE_NM%2CORIGIN_COUNTRY%2CORIGIN_COUNTRY_NAME%2CORIGIN_WAC%2CDEST%2CDEST_CITY_NAME%2CDEST_STATE_ABR%2CDEST_STATE_FIPS%2CDEST_STATE_NM%2CDEST_COUNTRY%2CDEST_COUNTRY_NAME%2CDEST_WAC%2CAIRCRAFT_GROUP%2CAIRCRAFT_TYPE%2CAIRCRAFT_CONFIG%2CYEAR%2CQUARTER%2CMONTH%2CDISTANCE_GROUP%2CCLASS%2CDATA_SOURCE&
|
20
22
|
grouplist=&
|
21
23
|
suml=&
|
22
24
|
sumRegion=&
|
@@ -92,9 +94,6 @@ FlightSegment.class_eval do
|
|
92
94
|
VarName=ORIGIN_CITY_NAME&
|
93
95
|
VarDesc=OriginCityName&
|
94
96
|
VarType=Char&
|
95
|
-
VarName=ORIGIN_CITY_NUM&
|
96
|
-
VarDesc=OriginCityNum&
|
97
|
-
VarType=Num&
|
98
97
|
VarName=ORIGIN_STATE_ABR&
|
99
98
|
VarDesc=OriginState&
|
100
99
|
VarType=Char&
|
@@ -119,9 +118,6 @@ FlightSegment.class_eval do
|
|
119
118
|
VarName=DEST_CITY_NAME&
|
120
119
|
VarDesc=DestCityName&
|
121
120
|
VarType=Char&
|
122
|
-
VarName=DEST_CITY_NUM&
|
123
|
-
VarDesc=DestCityNum&
|
124
|
-
VarType=Num&
|
125
121
|
VarName=DEST_STATE_ABR&
|
126
122
|
VarDesc=DestState&
|
127
123
|
VarType=Char&
|
data/lib/earth/data_miner.rb
CHANGED
data/lib/earth/fuel/fuel_type.rb
CHANGED
data/lib/earth/hospitality.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
class CensusRegionLodgingClass < ActiveRecord::Base
|
2
|
+
set_primary_key :name
|
3
|
+
|
4
|
+
col :name
|
5
|
+
col :census_region_number
|
6
|
+
col :lodging_class_name
|
7
|
+
col :electricity_intensity, :type => :float
|
8
|
+
col :electricity_intensity_units
|
9
|
+
col :natural_gas_intensity, :type => :float
|
10
|
+
col :natural_gas_intensity_units
|
11
|
+
col :fuel_oil_intensity, :type => :float
|
12
|
+
col :fuel_oil_intensity_units
|
13
|
+
col :district_heat_intensity, :type => :float
|
14
|
+
col :district_heat_intensity_units
|
15
|
+
col :weighting, :type => :float
|
16
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
CensusRegionLodgingClass.class_eval do
|
2
|
+
data_miner do
|
3
|
+
import "US census region lodging class fuel intensities derived from CBECS 2003",
|
4
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGkxNExTajZPSjRWU3REVks5SFJ0cmc&output=csv',
|
5
|
+
:select => lambda { |row| row['census_region_lodging_class'].present? } do
|
6
|
+
key 'name', :field_name => 'census_region_lodging_class'
|
7
|
+
store 'census_region_number', :field_name => 'census_region'
|
8
|
+
store 'lodging_class_name', :field_name => 'lodging_class'
|
9
|
+
store 'electricity_intensity', :units_field_name => 'electricity_intensity_units'
|
10
|
+
store 'natural_gas_intensity', :units_field_name => 'natural_gas_intensity_units'
|
11
|
+
store 'fuel_oil_intensity', :units_field_name => 'fuel_oil_intensity_units'
|
12
|
+
store 'district_heat_intensity', :units_field_name => 'district_heat_intensity_units'
|
13
|
+
store 'weighting'
|
14
|
+
end
|
15
|
+
|
16
|
+
process "Convert natural gas intensities to metric units" do
|
17
|
+
conversion_factor = 2.83168466 # Google: 2.83168466 cubic m / 100 cubic ft
|
18
|
+
where(:natural_gas_intensity_units => 'hundred_cubic_feet_per_room_night').update_all(%{
|
19
|
+
natural_gas_intensity = 1.0 * natural_gas_intensity * #{conversion_factor},
|
20
|
+
natural_gas_intensity_units = 'cubic_metres_per_room_night'
|
21
|
+
})
|
22
|
+
end
|
23
|
+
|
24
|
+
process "Convert fuel oil intensities to metric units" do
|
25
|
+
conversion_factor = 3.78541178 # Google: 3.78541178 l / gal
|
26
|
+
where(:fuel_oil_intensity_units => 'gallons_per_room_night').update_all(%{
|
27
|
+
fuel_oil_intensity = 1.0 * fuel_oil_intensity * #{conversion_factor},
|
28
|
+
fuel_oil_intensity_units = 'litres_per_room_night'
|
29
|
+
})
|
30
|
+
end
|
31
|
+
|
32
|
+
process "Convert district heat intensities to metric units" do
|
33
|
+
conversion_factor = 1.05505585 # Google: 1.05505585 MJ / 1000 Btu
|
34
|
+
where(:district_heat_intensity_units => 'thousand_btu_per_room_night').update_all(%{
|
35
|
+
district_heat_intensity = 1.0 * district_heat_intensity * #{conversion_factor},
|
36
|
+
district_heat_intensity_units = 'megajoules_per_room_night'
|
37
|
+
})
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CountryLodgingClass < ActiveRecord::Base
|
2
|
+
set_primary_key :name
|
3
|
+
|
4
|
+
col :name
|
5
|
+
col :country_iso_3166_code
|
6
|
+
col :lodging_class_name
|
7
|
+
col :electricity_intensity, :type => :float
|
8
|
+
col :electricity_intensity_units
|
9
|
+
col :natural_gas_intensity, :type => :float
|
10
|
+
col :natural_gas_intensity_units
|
11
|
+
col :fuel_oil_intensity, :type => :float
|
12
|
+
col :fuel_oil_intensity_units
|
13
|
+
col :district_heat_intensity, :type => :float
|
14
|
+
col :district_heat_intensity_units
|
15
|
+
col :weighting, :type => :float
|
16
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
CountryLodgingClass.class_eval do
|
2
|
+
data_miner do
|
3
|
+
import "US lodging classes and their fuel intensities derived from CBECS 2003",
|
4
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGkxNExTajZPSjRWU3REVks5SFJ0cmc&output=csv',
|
5
|
+
:select => lambda { |row| row['country_lodging_class'].present? } do
|
6
|
+
key 'name', :field_name => 'country_lodging_class'
|
7
|
+
store 'country_iso_3166_code', :field_name => 'country'
|
8
|
+
store 'lodging_class_name', :field_name => 'lodging_class'
|
9
|
+
store 'electricity_intensity', :units_field_name => 'electricity_intensity_units'
|
10
|
+
store 'natural_gas_intensity', :units_field_name => 'natural_gas_intensity_units'
|
11
|
+
store 'fuel_oil_intensity', :units_field_name => 'fuel_oil_intensity_units'
|
12
|
+
store 'district_heat_intensity', :units_field_name => 'district_heat_intensity_units'
|
13
|
+
store 'weighting'
|
14
|
+
end
|
15
|
+
|
16
|
+
process "Convert natural gas intensities to metric units" do
|
17
|
+
conversion_factor = 2.83168466 # Google: 2.83168466 cubic m / 100 cubic ft
|
18
|
+
where(:natural_gas_intensity_units => 'hundred_cubic_feet_per_room_night').update_all(%{
|
19
|
+
natural_gas_intensity = 1.0 * natural_gas_intensity * #{conversion_factor},
|
20
|
+
natural_gas_intensity_units = 'cubic_metres_per_room_night'
|
21
|
+
})
|
22
|
+
end
|
23
|
+
|
24
|
+
process "Convert fuel oil intensities to metric units" do
|
25
|
+
conversion_factor = 3.78541178 # Google: 3.78541178 l / gal
|
26
|
+
where(:fuel_oil_intensity_units => 'gallons_per_room_night').update_all(%{
|
27
|
+
fuel_oil_intensity = 1.0 * fuel_oil_intensity * #{conversion_factor},
|
28
|
+
fuel_oil_intensity_units = 'litres_per_room_night'
|
29
|
+
})
|
30
|
+
end
|
31
|
+
|
32
|
+
process "Convert district heat intensities to metric units" do
|
33
|
+
conversion_factor = 1.05505585 # Google: 1.05505585 MJ / 1000 Btu
|
34
|
+
where(:district_heat_intensity_units => 'thousand_btu_per_room_night').update_all(%{
|
35
|
+
district_heat_intensity = 1.0 * district_heat_intensity * #{conversion_factor},
|
36
|
+
district_heat_intensity_units = 'megajoules_per_room_night'
|
37
|
+
})
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -2,6 +2,8 @@ class LodgingClass < ActiveRecord::Base
|
|
2
2
|
set_primary_key :name
|
3
3
|
|
4
4
|
col :name
|
5
|
+
|
6
|
+
# DEPRECATED - cut once new Lodging has been phased in
|
5
7
|
col :electricity_intensity, :type => :float
|
6
8
|
col :electricity_intensity_units
|
7
9
|
col :natural_gas_intensity, :type => :float
|
@@ -10,4 +12,4 @@ class LodgingClass < ActiveRecord::Base
|
|
10
12
|
col :fuel_oil_intensity_units
|
11
13
|
col :district_heat_intensity, :type => :float
|
12
14
|
col :district_heat_intensity_units
|
13
|
-
end
|
15
|
+
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
LodgingClass.class_eval do
|
2
2
|
data_miner do
|
3
|
-
|
4
|
-
|
3
|
+
# DEPRECATED - once new Lodging is phased in replace this with an import of lodging class names from the CountryLodgingClass google doc
|
4
|
+
import "a list of lodging classes and pre-calculated energy intensities",
|
5
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGZZWmZtWEJlYzhRNXlPdWpBTldlcUE&output=csv' do
|
5
6
|
key 'name'
|
6
|
-
store '
|
7
|
-
store '
|
8
|
-
store '
|
7
|
+
store 'electricity_intensity', :units_field_name => 'electricity_intensity_units'
|
8
|
+
store 'natural_gas_intensity', :units_field_name => 'natural_gas_intensity_units'
|
9
|
+
store 'fuel_oil_intensity', :units_field_name => 'fuel_oil_intensity_units'
|
9
10
|
store 'district_heat_intensity', :units_field_name => 'district_heat_intensity_units'
|
10
11
|
end
|
11
12
|
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'earth/industry/industry/data_miner'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Industry.class_eval do
|
2
|
+
data_miner do
|
3
|
+
import "the U.S. Census 2002 NAICS code list",
|
4
|
+
:url => 'http://www.census.gov/epcd/naics02/naicod02.txt',
|
5
|
+
:skip => 4,
|
6
|
+
:headers => false,
|
7
|
+
:delimiter => ' ' do
|
8
|
+
key 'naics_code', :field_number => 0
|
9
|
+
store 'description', :field_number => 1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/earth/locality.rb
CHANGED
@@ -2,16 +2,14 @@ require 'earth/locality/census_division'
|
|
2
2
|
require 'earth/locality/census_region'
|
3
3
|
require 'earth/locality/climate_division'
|
4
4
|
require 'earth/locality/country'
|
5
|
-
require 'earth/locality/
|
6
|
-
require 'earth/locality/country_rail_class'
|
7
|
-
require 'earth/locality/country_rail_traction_class'
|
5
|
+
require 'earth/locality/egrid_country'
|
8
6
|
require 'earth/locality/egrid_region'
|
9
7
|
require 'earth/locality/egrid_subregion'
|
10
8
|
require 'earth/locality/petroleum_administration_for_defense_district'
|
11
9
|
require 'earth/locality/state'
|
12
|
-
require 'earth/locality/urbanity'
|
13
10
|
require 'earth/locality/zip_code'
|
14
11
|
|
15
|
-
require 'earth/automobile'
|
16
|
-
require 'earth/
|
17
|
-
require 'earth/
|
12
|
+
require 'earth/automobile' # for automobile data on Country
|
13
|
+
require 'earth/fuel' # for GWPs for EgridSubregion
|
14
|
+
require 'earth/hospitality' # for lodging data on Country
|
15
|
+
require 'earth/rail' # for rail data on Country
|
@@ -29,13 +29,14 @@ CensusDivision.class_eval do
|
|
29
29
|
store 'meeting_building_district_heat_intensity', :from_units => :thousand_btu_per_square_foot_hour, :to_units => :megajoules_per_square_metre_hour
|
30
30
|
end
|
31
31
|
|
32
|
-
import 'lodging building fuel intensities
|
33
|
-
:url => 'https://
|
32
|
+
import 'lodging building fuel intensities derived from CBECS 2003',
|
33
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGkxNExTajZPSjRWU3REVks5SFJ0cmc&output=csv',
|
34
|
+
:select => lambda { |row| row['census_division'].to_i.between?(1, 9) } do
|
34
35
|
key 'number', :field_name => 'census_division'
|
35
|
-
store '
|
36
|
-
store '
|
37
|
-
store '
|
38
|
-
store 'lodging_building_district_heat_intensity', :from_units => :thousand_btu_per_room_night,
|
36
|
+
store 'lodging_building_electricity_intensity', :field_name => 'electricity_intensity', :units_field_name => 'electricity_intensity_units'
|
37
|
+
store 'lodging_building_natural_gas_intensity', :field_name => 'natural_gas_intensity', :from_units => :hundred_cubic_feet_per_room_night, :to_units => :cubic_metres_per_room_night
|
38
|
+
store 'lodging_building_fuel_oil_intensity', :field_name => 'fuel_oil_intensity', :from_units => :gallons_per_room_night, :to_units => :litres_per_room_night
|
39
|
+
store 'lodging_building_district_heat_intensity', :field_name => 'district_heat_intensity', :from_units => :thousand_btu_per_room_night, :to_units => :megajoules_per_room_night
|
39
40
|
end
|
40
41
|
end
|
41
42
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
class Country < ActiveRecord::Base
|
2
2
|
set_primary_key :iso_3166_code
|
3
3
|
|
4
|
-
has_many :rail_companies,
|
4
|
+
has_many :rail_companies, :foreign_key => 'country_iso_3166_code' # used to calculate rail data
|
5
|
+
has_many :lodging_classes, :foreign_key => 'country_iso_3166_code', :class_name => 'CountryLodgingClass'
|
5
6
|
|
6
7
|
falls_back_on :name => 'fallback',
|
7
8
|
:automobile_urbanity => lambda { united_states.automobile_urbanity }, # for now assume US represents world
|
@@ -13,7 +14,17 @@ class Country < ActiveRecord::Base
|
|
13
14
|
:automobile_highway_speed_units => lambda { united_states.automobile_highway_speed_units }, # for now assume US represents world
|
14
15
|
:automobile_trip_distance => lambda { united_states.automobile_trip_distance }, # for now assume US represents world
|
15
16
|
:automobile_trip_distance_units => lambda { united_states.automobile_trip_distance_units }, # for now assume US represents world
|
17
|
+
:electricity_emission_factor => lambda { maximum(:electricity_emission_factor) }, # default to the largest electricity emission factor
|
18
|
+
:electricity_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour', # FIXME TODO derive this
|
16
19
|
:flight_route_inefficiency_factor => lambda { maximum(:flight_route_inefficiency_factor) }, # default to the largest inefficiency factor
|
20
|
+
:lodging_natural_gas_intensity => lambda { united_states.lodging_natural_gas_intensity }, # for now assume US represents world
|
21
|
+
:lodging_natural_gas_intensity_units => lambda { united_states.lodging_natural_gas_intensity_units }, # for now assume US represents world
|
22
|
+
:lodging_fuel_oil_intensity => lambda { united_states.lodging_fuel_oil_intensity }, # for now assume US represents world
|
23
|
+
:lodging_fuel_oil_intensity_units => lambda { united_states.lodging_fuel_oil_intensity_units }, # for now assume US represents world
|
24
|
+
:lodging_electricity_intensity => lambda { united_states.lodging_electricity_intensity }, # for now assume US represents world
|
25
|
+
:lodging_electricity_intensity_units => lambda { united_states.lodging_electricity_intensity_units }, # for now assume US represents world
|
26
|
+
:lodging_district_heat_intensity => lambda { united_states.lodging_district_heat_intensity }, # for now assume US represents world
|
27
|
+
:lodging_district_heat_intensity_units => lambda { united_states.lodging_district_heat_intensity_units }, # for now assume US represents world
|
17
28
|
:rail_trip_distance => lambda { weighted_average(:rail_trip_distance, :weighted_by => :rail_passengers) },
|
18
29
|
:rail_trip_distance_units => 'kilometres', # FIXME TODO derive this
|
19
30
|
:rail_speed => lambda { weighted_average(:rail_speed, :weighted_by => :rail_passengers) },
|
@@ -31,7 +42,9 @@ class Country < ActiveRecord::Base
|
|
31
42
|
end
|
32
43
|
end
|
33
44
|
|
34
|
-
col :iso_3166_code
|
45
|
+
col :iso_3166_code # alpha-2 2-letter like GB
|
46
|
+
col :iso_3166_numeric_code, :type => :integer # numeric like 826; aka UN M49 code
|
47
|
+
col :iso_3166_alpha_3_code # 3-letter like GBR
|
35
48
|
col :name
|
36
49
|
col :automobile_urbanity, :type => :float # float from 0 to 1
|
37
50
|
col :automobile_fuel_efficiency, :type => :float
|
@@ -42,7 +55,17 @@ class Country < ActiveRecord::Base
|
|
42
55
|
col :automobile_highway_speed_units
|
43
56
|
col :automobile_trip_distance, :type => :float
|
44
57
|
col :automobile_trip_distance_units
|
58
|
+
col :electricity_emission_factor, :type => :float
|
59
|
+
col :electricity_emission_factor_units
|
45
60
|
col :flight_route_inefficiency_factor, :type => :float
|
61
|
+
col :lodging_natural_gas_intensity, :type => :float
|
62
|
+
col :lodging_natural_gas_intensity_units
|
63
|
+
col :lodging_fuel_oil_intensity, :type => :float
|
64
|
+
col :lodging_fuel_oil_intensity_units
|
65
|
+
col :lodging_electricity_intensity, :type => :float
|
66
|
+
col :lodging_electricity_intensity_units
|
67
|
+
col :lodging_district_heat_intensity, :type => :float
|
68
|
+
col :lodging_district_heat_intensity_units
|
46
69
|
col :rail_passengers, :type => :float
|
47
70
|
col :rail_trip_distance, :type => :float
|
48
71
|
col :rail_trip_distance_units
|
@@ -1,26 +1,25 @@
|
|
1
1
|
Country.class_eval do
|
2
2
|
data_miner do
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
:
|
3
|
+
# http://www.iso.org/iso/list-en1-semic-3.txt
|
4
|
+
# http://unstats.un.org/unsd/methods/m49/m49alpha.htm
|
5
|
+
import "OpenGeoCode.org's Country Codes to Country Names list",
|
6
|
+
:url => 'http://opengeocode.org/download/countrynames.txt',
|
7
|
+
:format => :delimited,
|
7
8
|
:delimiter => ';',
|
8
|
-
:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdEJoRVBZaGhnUmlhX240VXE3X0F3WkE&output=csv' do
|
15
|
-
key 'iso_3166_code'
|
16
|
-
store 'flight_route_inefficiency_factor'
|
9
|
+
:headers => false,
|
10
|
+
:skip => 22 do
|
11
|
+
key 'iso_3166_code', :field_number => 0
|
12
|
+
store 'iso_3166_alpha_3_code', :field_number => 1
|
13
|
+
store 'iso_3166_numeric_code', :field_number => 2
|
14
|
+
store 'name', :field_number => 5 # romanized version
|
17
15
|
end
|
18
16
|
|
17
|
+
# AUTOMOBILE
|
19
18
|
import "automobile-related data for the US",
|
20
19
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdDdZRm1tNjY0c2dYNG00bXJ3TXRqUVE&gid=0&output=csv' do
|
21
20
|
key 'iso_3166_code'
|
22
21
|
store 'automobile_urbanity'
|
23
|
-
store 'automobile_city_speed',
|
22
|
+
store 'automobile_city_speed', :units_field_name => 'automobile_city_speed_units'
|
24
23
|
store 'automobile_highway_speed', :units_field_name => 'automobile_highway_speed_units'
|
25
24
|
store 'automobile_trip_distance', :units_field_name => 'automobile_trip_distance_units'
|
26
25
|
end
|
@@ -29,7 +28,6 @@ Country.class_eval do
|
|
29
28
|
AutomobileTypeFuelYear.run_data_miner!
|
30
29
|
end
|
31
30
|
|
32
|
-
# FIXME TODO eventually need to do this for all countries
|
33
31
|
process "Derive US average automobile fuel efficiency from AutomobileTypeFuelYear" do
|
34
32
|
fuel_years = AutomobileTypeFuelYear.where(:year => AutomobileTypeFuelYear.maximum(:year))
|
35
33
|
where(:iso_3166_code => 'US').update_all(
|
@@ -62,8 +60,67 @@ Country.class_eval do
|
|
62
60
|
})
|
63
61
|
end
|
64
62
|
|
65
|
-
|
63
|
+
# ELECTRICITY
|
64
|
+
import "calculate national electricity emission factors from Brander et al. (2011)",
|
65
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDZmWHFjLVdBZGRBdGxVdDdqd1YtYWc&output=csv' do
|
66
|
+
key 'iso_3166_code', :field_name => 'country_iso_3166_code'
|
67
|
+
store 'electricity_emission_factor', :synthesize => lambda { |row|
|
68
|
+
(
|
69
|
+
row['electricity_co2_emission_factor'].to_f +
|
70
|
+
row['electricity_ch4_emission_factor'].to_f +
|
71
|
+
row['electricity_n2o_emission_factor'].to_f
|
72
|
+
) / (1 - row['loss_factor'].to_f) }, :units_field_name => 'electricity_ch4_emission_factor_units'
|
73
|
+
end
|
74
|
+
|
75
|
+
process "Ensure EgridSubregion is populated" do
|
76
|
+
EgridSubregion.run_data_miner!
|
77
|
+
end
|
78
|
+
|
79
|
+
process "Derive average US electricity emission factor from eGRID" do
|
80
|
+
us = united_states
|
81
|
+
subregion = EgridSubregion.find_by_abbreviation 'US'
|
82
|
+
us.electricity_emission_factor =
|
83
|
+
(
|
84
|
+
subregion.electricity_co2_emission_factor +
|
85
|
+
subregion.electricity_ch4_emission_factor +
|
86
|
+
subregion.electricity_n2o_emission_factor
|
87
|
+
) / (1 - subregion.egrid_region.loss_factor)
|
88
|
+
us.electricity_emission_factor_units = 'kilograms_co2e_per_kilowatt_hour'
|
89
|
+
us.save!
|
90
|
+
end
|
91
|
+
|
92
|
+
# FLIGHT
|
93
|
+
import "country-specific flight route inefficiency factors derived from Kettunen et al. (2005)",
|
94
|
+
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdEJoRVBZaGhnUmlhX240VXE3X0F3WkE&output=csv' do
|
95
|
+
key 'iso_3166_code'
|
96
|
+
store 'flight_route_inefficiency_factor'
|
97
|
+
end
|
98
|
+
|
99
|
+
# HOSPITALITY
|
100
|
+
process "Ensure CountryLodgingClass is populated" do
|
101
|
+
CountryLodgingClass.run_data_miner!
|
102
|
+
end
|
103
|
+
|
104
|
+
process "Derive average hotel characteristics from CountryLodgingClass" do
|
105
|
+
find_each do |country|
|
106
|
+
if country.lodging_classes.any?
|
107
|
+
country.lodging_natural_gas_intensity = country.lodging_classes.weighted_average(:natural_gas_intensity)
|
108
|
+
country.lodging_natural_gas_intensity_units = 'cubic_metres_per_room_night' # FIXME TODO derive this
|
109
|
+
country.lodging_fuel_oil_intensity = country.lodging_classes.weighted_average(:fuel_oil_intensity)
|
110
|
+
country.lodging_fuel_oil_intensity_units = 'gallons_per_room_night' # FIXME TODO derive this
|
111
|
+
country.lodging_electricity_intensity = country.lodging_classes.weighted_average(:electricity_intensity)
|
112
|
+
country.lodging_electricity_intensity_units = 'kilowatt_hours_per_room_night' # FIXME TODO derive this
|
113
|
+
country.lodging_district_heat_intensity = country.lodging_classes.weighted_average(:district_heat_intensity)
|
114
|
+
country.lodging_district_heat_intensity_units = 'megajoules_per_room_night' # FIXME TODO derive this
|
115
|
+
country.save!
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# RAIL
|
121
|
+
process "Ensure RailCompany and RailFuel are populated" do
|
66
122
|
RailCompany.run_data_miner!
|
123
|
+
RailFuel.run_data_miner!
|
67
124
|
end
|
68
125
|
|
69
126
|
process "Calculate rail passengers, trip distance, and speed from RailCompany" do
|
@@ -87,10 +144,6 @@ Country.class_eval do
|
|
87
144
|
store 'rail_trip_co2_emission_factor', :units_field_name => 'rail_trip_co2_emission_factor_units'
|
88
145
|
end
|
89
146
|
|
90
|
-
process "Ensure RailFuel is populated" do
|
91
|
-
RailFuel.run_data_miner!
|
92
|
-
end
|
93
|
-
|
94
147
|
process "Unit conversion for European rail diesel intensity" do
|
95
148
|
diesel = RailFuel.find_by_name("diesel")
|
96
149
|
where(:rail_trip_diesel_intensity_units => 'grams_per_passenger_kilometre').update_all(%{
|
@@ -107,7 +160,7 @@ Country.class_eval do
|
|
107
160
|
end
|
108
161
|
|
109
162
|
process "Derive US rail fuel and emission data from RailCompany" do
|
110
|
-
country =
|
163
|
+
country = united_states
|
111
164
|
country.rail_trip_electricity_intensity = country.rail_companies.weighted_average(:electricity_intensity, :weighted_by => :passengers)
|
112
165
|
country.rail_trip_electricity_intensity_units = 'kilowatt_hours_per_passenger_kilometre'
|
113
166
|
country.rail_trip_diesel_intensity = country.rail_companies.weighted_average(:diesel_intensity, :weighted_by => :passengers)
|
@@ -116,7 +169,5 @@ Country.class_eval do
|
|
116
169
|
country.rail_trip_co2_emission_factor_units = 'kilograms_per_passenger_kilometre'
|
117
170
|
country.save!
|
118
171
|
end
|
119
|
-
|
120
|
-
# FIXME TODO verify this
|
121
172
|
end
|
122
173
|
end
|