earth 0.11.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|