earth 0.11.13 → 0.11.14
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +1 -1
- data/bin/earth_tester.rb +1 -1
- data/earth.gemspec +2 -3
- data/lib/earth.rb +1 -1
- data/lib/earth/air/aircraft/data_miner.rb +4 -0
- data/lib/earth/air/airline/data_miner.rb +5 -1
- data/lib/earth/air/airport/data_miner.rb +4 -0
- data/lib/earth/air/flight_segment.rb +2 -2
- data/lib/earth/air/flight_segment/data_miner.rb +4 -0
- data/lib/earth/computation/computation_carrier_instance_class.rb +1 -1
- data/lib/earth/hospitality/commercial_building_energy_consumption_survey_response.rb +3 -8
- data/lib/earth/hospitality/commercial_building_energy_consumption_survey_response/data_miner.rb +10 -19
- data/lib/earth/hospitality/country_lodging_class/data_miner.rb +17 -23
- data/lib/earth/hospitality/lodging_property.rb +4 -0
- data/lib/earth/industry/mecs_energy.rb +15 -6
- data/lib/earth/industry/mecs_ratio.rb +16 -7
- data/lib/earth/industry/sic_1987.rb +0 -1
- data/lib/earth/locality/country/data_miner.rb +7 -14
- data/lib/earth/locality/zip_code/data_miner.rb +4 -6
- data/lib/earth/version.rb +1 -1
- data/spec/earth/air/aircraft_spec.rb +1 -1
- data/spec/earth/automobile/automobile_fuel_spec.rb +1 -1
- data/spec/earth/automobile/automobile_type_fuel_year_age_spec.rb +1 -1
- data/spec/earth/bus/bus_class_spec.rb +1 -1
- data/spec/earth/fuel/fuel_spec.rb +1 -1
- data/spec/earth/hospitality/commercial_building_energy_consumption_survey_response_spec.rb +37 -0
- data/spec/earth/hospitality/country_lodging_class_spec.rb +31 -0
- data/spec/earth/industry/cbecs_energy_intensity_spec.rb +1 -1
- data/spec/earth/industry/industry_spec.rb +1 -1
- data/spec/earth/industry/mecs_energy_spec.rb +10 -2
- data/spec/earth/industry/mecs_ratio_spec.rb +9 -1
- data/spec/earth/industry/naics_2002_naics_2007_concordance_spec.rb +1 -1
- data/spec/earth/industry/naics_2002_sic_1987_concordance_spec.rb +1 -1
- data/spec/earth/industry/naics_2002_spec.rb +1 -1
- data/spec/earth/industry/naics_2007_spec.rb +1 -1
- data/spec/earth/industry/sic_1987_spec.rb +1 -15
- data/spec/earth/locality/country_spec.rb +27 -10
- data/spec/earth/locality/state_spec.rb +1 -1
- data/spec/earth/locality/zip_code_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- metadata +193 -199
- data/.document +0 -5
data/README.markdown
CHANGED
@@ -83,7 +83,7 @@ ft = AutomobileFuel.first
|
|
83
83
|
|
84
84
|
### Data storage
|
85
85
|
|
86
|
-
You can store Earth data in any relational database. On your very first run, you will need to create the tables for data each model. This is done using
|
86
|
+
You can store Earth data in any relational database. On your very first run, you will need to create the tables for data each model. This is done using [the `active_record_inline_schema` library](https://github.com/seamusabshere/active_record_inline_schema) if you pass the `apply_schemas` option:
|
87
87
|
|
88
88
|
``` ruby
|
89
89
|
require 'activerecord'
|
data/bin/earth_tester.rb
CHANGED
data/earth.gemspec
CHANGED
@@ -5,7 +5,6 @@ require "earth/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "earth"
|
7
7
|
s.version = Earth::VERSION
|
8
|
-
s.date = "2012-03-05"
|
9
8
|
s.platform = Gem::Platform::RUBY
|
10
9
|
s.authors = ["Seamus Abshere", "Derek Kastner", "Andy Rossmeissl"]
|
11
10
|
s.email = %q{andy@rossmeissl.net}
|
@@ -36,7 +35,7 @@ Gem::Specification.new do |s|
|
|
36
35
|
s.add_runtime_dependency 'fixed_width-multibyte'
|
37
36
|
s.add_runtime_dependency 'fuzzy_match', '>=1.1.0'
|
38
37
|
s.add_runtime_dependency 'geokit'
|
39
|
-
s.add_runtime_dependency '
|
38
|
+
s.add_runtime_dependency 'active_record_inline_schema'
|
40
39
|
s.add_runtime_dependency 'remote_table', '>=1.3.0'
|
41
40
|
s.add_runtime_dependency 'table_warnings', '>=0.0.6'
|
42
41
|
s.add_runtime_dependency 'to_regexp'
|
@@ -45,7 +44,7 @@ Gem::Specification.new do |s|
|
|
45
44
|
s.add_development_dependency 'bundler'
|
46
45
|
s.add_development_dependency 'charisma'
|
47
46
|
s.add_development_dependency 'cucumber'
|
48
|
-
s.add_development_dependency '
|
47
|
+
s.add_development_dependency 'mysql2' # for bin/earth_tester.rb; use mysql2 for utf-8 compatibility
|
49
48
|
s.add_development_dependency 'pg'
|
50
49
|
s.add_development_dependency 'rake'
|
51
50
|
s.add_development_dependency 'rdoc'
|
data/lib/earth.rb
CHANGED
@@ -22,6 +22,10 @@ Aircraft.class_eval do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
data_miner do
|
25
|
+
process "Start from scratch" do
|
26
|
+
delete_all
|
27
|
+
end
|
28
|
+
|
25
29
|
('A'..'Z').each do |letter|
|
26
30
|
import("aircraft made by whitelisted manufacturers whose ICAO code starts with '#{letter}' from the FAA",
|
27
31
|
:url => "http://www.faa.gov/air_traffic/publications/atpubs/CNT/5-2-#{letter}.htm",
|
@@ -1,6 +1,10 @@
|
|
1
1
|
Airline.class_eval do
|
2
2
|
data_miner do
|
3
|
-
|
3
|
+
process "Start from scratch" do
|
4
|
+
delete_all
|
5
|
+
end
|
6
|
+
|
7
|
+
import "a Brighter Planet-curated list of airlines and codes not included in our proprietary sources",
|
4
8
|
:url => 'https://spreadsheets.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGJoaFpENXRqMEM2NW42am5tNURGU2c&output=csv' do
|
5
9
|
key 'name'
|
6
10
|
store 'bts_code', :nullify => true
|
@@ -17,6 +17,10 @@ Airport.class_eval do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
data_miner do
|
20
|
+
process "Start from scratch" do
|
21
|
+
delete_all
|
22
|
+
end
|
23
|
+
|
20
24
|
import "the OpenFlights.org airports database",
|
21
25
|
:url => 'https://openflights.svn.sourceforge.net/svnroot/openflights/openflights/data/airports.dat',
|
22
26
|
:headers => %w{ id name city country_name iata_code icao_code latitude longitude altitude timezone daylight_savings },
|
@@ -21,8 +21,8 @@ class FlightSegment < ActiveRecord::Base
|
|
21
21
|
# Assume a load factor of 1 where passengers > available seats
|
22
22
|
where('passengers > seats AND seats > 0').update_all 'load_factor = 1'
|
23
23
|
|
24
|
-
#
|
25
|
-
#
|
24
|
+
# Derive freight share as a fraction of the total weight carried -- assume 90.718474 kg (200 lbs) per passenger (includes checked baggage)
|
25
|
+
# FIXME TODO assume 100 kg per passenger?
|
26
26
|
where('(freight + mail + passengers) > 0').update_all 'freight_share = 1.0 * (freight + mail) / (freight + mail + (passengers * 90.718474))'
|
27
27
|
|
28
28
|
# Derive average seats per flight
|
@@ -183,6 +183,10 @@ FlightSegment.class_eval do
|
|
183
183
|
end
|
184
184
|
|
185
185
|
data_miner do
|
186
|
+
process "Start from scratch" do
|
187
|
+
delete_all
|
188
|
+
end
|
189
|
+
|
186
190
|
form_data_per_month(2009..::Time.now.year).each do |month, form_data|
|
187
191
|
import "T100 flight segment data for #{month.strftime('%B %Y')}",
|
188
192
|
:url => URL,
|
@@ -2,7 +2,7 @@ require 'earth/locality'
|
|
2
2
|
class ComputationCarrierInstanceClass < ActiveRecord::Base
|
3
3
|
self.primary_key = "name"
|
4
4
|
|
5
|
-
belongs_to :
|
5
|
+
belongs_to :carrier, :class_name => 'ComputationCarrier', :foreign_key => 'computation_carrier_name'
|
6
6
|
|
7
7
|
falls_back_on :name => 'fallback',
|
8
8
|
:electricity_intensity => lambda { ComputationCarrierInstanceClass.find_by_name('Amazon m1.small').electricity_intensity },
|
@@ -45,9 +45,12 @@ class CommercialBuildingEnergyConsumptionSurveyResponse < ActiveRecord::Base
|
|
45
45
|
col :fuel_oil_energy_units
|
46
46
|
col :district_heat_use, :type => :float
|
47
47
|
col :district_heat_use_units
|
48
|
+
col :district_heat_energy, :type => :float
|
49
|
+
col :district_heat_energy_units
|
48
50
|
col :stratum, :type => :integer
|
49
51
|
col :pair, :type => :integer
|
50
52
|
col :weighting, :type => :float
|
53
|
+
col :room_nights, :type => :float
|
51
54
|
col :electricity_per_room_night, :type => :float # for lodging fuzzy weighting
|
52
55
|
col :electricity_per_room_night_units # for lodging fuzzy weighting
|
53
56
|
col :natural_gas_per_room_night, :type => :float # for lodging fuzzy weighting
|
@@ -56,12 +59,4 @@ class CommercialBuildingEnergyConsumptionSurveyResponse < ActiveRecord::Base
|
|
56
59
|
col :fuel_oil_per_room_night_units # for lodging fuzzy weighting
|
57
60
|
col :district_heat_per_room_night, :type => :float # for lodging fuzzy weighting
|
58
61
|
col :district_heat_per_room_night_units # for lodging fuzzy weighting
|
59
|
-
col :electricity_energy_intensity, :type => :float
|
60
|
-
col :electricity_energy_intensity_units
|
61
|
-
col :natural_gas_energy_intensity, :type => :float
|
62
|
-
col :natural_gas_energy_intensity_units
|
63
|
-
col :fuel_oil_energy_intensity, :type => :float
|
64
|
-
col :fuel_oil_energy_intensity_units
|
65
|
-
col :district_heat_energy_intensity, :type => :float
|
66
|
-
col :district_heat_energy_intensity_units
|
67
62
|
end
|
data/lib/earth/hospitality/commercial_building_energy_consumption_survey_response/data_miner.rb
CHANGED
@@ -64,32 +64,23 @@ CommercialBuildingEnergyConsumptionSurveyResponse.class_eval do
|
|
64
64
|
store 'fuel_oil_use', :field_name => 'FKCNS8', :from_units => :gallons, :to_units => :litres
|
65
65
|
store 'fuel_oil_energy', :field_name => 'FKBTU8', :from_units => :kbtus, :to_units => :megajoules
|
66
66
|
store 'district_heat_use', :field_name => 'DHBTU8', :from_units => :kbtus, :to_units => :megajoules
|
67
|
+
store 'district_heat_energy', :field_name => 'DHBTU8', :from_units => :kbtus, :to_units => :megajoules
|
67
68
|
end
|
68
69
|
|
69
|
-
process "Derive
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
70
|
+
process "Derive room nights for lodging records" do
|
71
|
+
lodging_records.
|
72
|
+
# nights/year * weeks/night * years/month * months * hours/week * nights/hour * rooms = room-nights
|
73
|
+
# => weeks/year => weeks/month => weeks => hours => nights => room-nights
|
74
|
+
update_all "room_nights = (365.0 * (1 / 7.0) * (1 / 12.0) * months_used * weekly_hours * (1 / 24.0) * lodging_rooms)"
|
75
|
+
end
|
76
|
+
|
77
|
+
process "Derive fuel intensities per room night for lodging records" do
|
74
78
|
[:natural_gas, :fuel_oil, :electricity, :district_heat].each do |fuel|
|
75
79
|
lodging_records.update_all %{
|
76
|
-
#{fuel}_per_room_night = #{fuel}_use /
|
80
|
+
#{fuel}_per_room_night = #{fuel}_use / room_nights,
|
77
81
|
#{fuel}_per_room_night_units = #{fuel}_use_units || '_per_room_night'
|
78
82
|
}
|
79
83
|
end
|
80
84
|
end
|
81
|
-
|
82
|
-
process "Derive fuel intensities per unit area" do
|
83
|
-
[:natural_gas, :fuel_oil, :electricity].each do |fuel|
|
84
|
-
update_all %{
|
85
|
-
#{fuel}_energy_intensity = #{fuel}_energy / area,
|
86
|
-
#{fuel}_energy_intensity_units = 'megajoules_per_square_metre'
|
87
|
-
}
|
88
|
-
update_all %{
|
89
|
-
district_heat_energy_intensity = district_heat_use / area,
|
90
|
-
district_heat_energy_intensity_units = 'megajoules_per_square_metre'
|
91
|
-
}
|
92
|
-
end
|
93
|
-
end
|
94
85
|
end
|
95
86
|
end
|
@@ -16,30 +16,24 @@ CountryLodgingClass.class_eval do
|
|
16
16
|
|
17
17
|
process "Calculate US lodging class fuel intensities from CommercialBuildingEnergyConsumptionSurveyResponse" do
|
18
18
|
occupancy_rate = Country.united_states.lodging_occupancy_rate
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
19
|
+
lodging_records = CommercialBuildingEnergyConsumptionSurveyResponse.lodging_records
|
20
|
+
|
21
|
+
Country.united_states.lodging_classes.map(&:cbecs_detailed_activity).uniq.each do |cbecs_activity|
|
22
|
+
%w{natural_gas fuel_oil electricity district_heat}.each do |fuel|
|
23
|
+
cbecs_column = (fuel + '_use').to_sym
|
24
|
+
|
25
|
+
where(:cbecs_detailed_activity => cbecs_activity).update_all %{
|
26
|
+
#{fuel}_intensity = (#{
|
27
|
+
lodging_records.where(:detailed_activity => cbecs_activity).
|
28
|
+
weighted_average_relation(cbecs_column, :disaggregate_by => :room_nights, :weighted_by => :weighting).to_sql
|
29
|
+
}) / #{occupancy_rate},
|
30
|
+
#{fuel}_intensity_units = '#{lodging_records.first.send("#{fuel}_use_units")}_per_occupied_room_night',
|
31
|
+
weighting = (#{
|
32
|
+
lodging_records.where(:detailed_activity => cbecs_activity).sum(:weighting) /
|
33
|
+
where(:cbecs_detailed_activity => cbecs_activity).count
|
34
|
+
})
|
35
|
+
}
|
30
36
|
end
|
31
|
-
|
32
|
-
where(:cbecs_detailed_activity => cbecs_activity).update_all(%{
|
33
|
-
natural_gas_intensity_units = 'cubic_metres_per_room_night',
|
34
|
-
fuel_oil_intensity_units = 'litres_per_room_night',
|
35
|
-
electricity_intensity_units = 'kilowatt_hours_per_room_night',
|
36
|
-
district_heat_intensity_units = 'megajoules_per_room_night',
|
37
|
-
weighting = (
|
38
|
-
SELECT SUM(weighting)
|
39
|
-
FROM #{CommercialBuildingEnergyConsumptionSurveyResponse.quoted_table_name}
|
40
|
-
WHERE detailed_activity = '#{cbecs_activity}'
|
41
|
-
) / #{where(:cbecs_detailed_activity => cbecs_activity).count}
|
42
|
-
})
|
43
37
|
end
|
44
38
|
end
|
45
39
|
end
|
@@ -26,4 +26,8 @@ class LodgingProperty < ActiveRecord::Base
|
|
26
26
|
col :pools_indoor, :type => :float # float b/c fallback needs to be a float
|
27
27
|
col :pools_outdoor, :type => :float # float b/c fallback needs to be a float
|
28
28
|
col :update_date
|
29
|
+
add_index :city
|
30
|
+
add_index :locality
|
31
|
+
add_index :postcode
|
32
|
+
add_index :country_iso_3166_alpha_3_code
|
29
33
|
end
|
@@ -28,21 +28,30 @@ class MecsEnergy < ActiveRecord::Base
|
|
28
28
|
FUELS = [:electricity, :residual_fuel_oil, :distillate_fuel_oil,
|
29
29
|
:natural_gas, :lpg_and_ngl, :coal, :coke_and_breeze, :other_fuel]
|
30
30
|
|
31
|
-
# Find the first record whose naics_code matches code.
|
31
|
+
# Find the first record whose naics_code matches code and that has valid fuel ratios.
|
32
32
|
# If no record found chop off the last character of code and try again, and so on.
|
33
33
|
def self.find_by_naics_code(code)
|
34
34
|
find_by_naics_code_and_census_region_number(code, nil)
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
# Find the first record whose census_region_number matches number, whose naics_code matches code, and that has valid fuel ratios.
|
38
|
+
# If none found and we know census region number, try looking nationwide
|
39
|
+
# If none found and looking nationwide, chop off the last character of code and try again looking in census region
|
40
|
+
# And so on
|
41
|
+
def self.find_by_naics_code_and_census_region_number(code, number, original_number = number)
|
40
42
|
if code.blank?
|
41
43
|
record = nil
|
42
44
|
else
|
43
45
|
code = Industry.format_naics_code code
|
44
|
-
|
45
|
-
|
46
|
+
candidate = where(:census_region_number => number, :naics_code => code).first
|
47
|
+
|
48
|
+
if candidate.try(:fuel_ratios).present?
|
49
|
+
record = candidate
|
50
|
+
elsif number.present?
|
51
|
+
record = find_by_naics_code_and_census_region_number(code, nil, original_number)
|
52
|
+
else
|
53
|
+
record = find_by_naics_code_and_census_region_number(code[0..-2], original_number)
|
54
|
+
end
|
46
55
|
end
|
47
56
|
record
|
48
57
|
end
|
@@ -12,21 +12,30 @@ class MecsRatio < ActiveRecord::Base
|
|
12
12
|
col :energy_per_dollar_of_shipments, :type => :float
|
13
13
|
col :energy_per_dollar_of_shipments_units
|
14
14
|
|
15
|
-
# Find the first record whose naics_code matches code.
|
15
|
+
# Find the first record whose naics_code matches code and whose energy per dollar shipment is present.
|
16
16
|
# If no record found chop off the last character of code and try again, and so on.
|
17
17
|
def self.find_by_naics_code(code)
|
18
|
-
find_by_naics_code_and_census_region_number(code, nil)
|
18
|
+
candidate = find_by_naics_code_and_census_region_number(code, nil)
|
19
19
|
end
|
20
20
|
|
21
|
-
# Find the first record whose census_region_number matches number
|
22
|
-
# If none found
|
23
|
-
|
21
|
+
# Find the first record whose census_region_number matches number, whose naics_code matches code, and whose energy per dollar of shipments is present.
|
22
|
+
# If none found and we know census region number, try looking nationwide
|
23
|
+
# If none found and looking nationwide, chop off the last character of code and try again looking in census region
|
24
|
+
# And so on
|
25
|
+
def self.find_by_naics_code_and_census_region_number(code, number, original_number = number)
|
24
26
|
if code.blank?
|
25
27
|
record = nil
|
26
28
|
else
|
27
29
|
code = Industry.format_naics_code code
|
28
|
-
|
29
|
-
|
30
|
+
candidate = where(:census_region_number => number, :naics_code => code).first
|
31
|
+
|
32
|
+
if candidate.try(:energy_per_dollar_of_shipments).present?
|
33
|
+
record = candidate
|
34
|
+
elsif number.present?
|
35
|
+
record = find_by_naics_code_and_census_region_number(code, nil, original_number)
|
36
|
+
else
|
37
|
+
record = find_by_naics_code_and_census_region_number(code[0..-2], original_number)
|
38
|
+
end
|
30
39
|
end
|
31
40
|
record
|
32
41
|
end
|
@@ -4,7 +4,6 @@ class Sic1987 < ActiveRecord::Base
|
|
4
4
|
|
5
5
|
has_many :naics_2002_sic_1987_concordances, :foreign_key => :sic_1987_code
|
6
6
|
has_many :naics_2002, :through => :naics_2002_sic_1987_concordances
|
7
|
-
has_many :industries, :through => :naics_2002
|
8
7
|
|
9
8
|
# for data import
|
10
9
|
def self.format_description(description)
|
@@ -9,28 +9,21 @@ Country.class_eval do
|
|
9
9
|
import "OpenGeoCode.org's Country Codes to Country Names list",
|
10
10
|
:url => 'http://opengeocode.org/download/countrynames.txt',
|
11
11
|
:format => :delimited,
|
12
|
-
:delimiter => ';',
|
12
|
+
:delimiter => '; ',
|
13
13
|
:headers => false,
|
14
14
|
:skip => 22 do
|
15
15
|
key 'iso_3166_code', :field_number => 0
|
16
16
|
store 'iso_3166_alpha_3_code', :field_number => 1
|
17
17
|
store 'iso_3166_numeric_code', :field_number => 2
|
18
|
-
store 'name', :field_number => 5 # romanized version
|
18
|
+
store 'name', :field_number => 5 # romanized version with utf-8 characters
|
19
19
|
end
|
20
20
|
|
21
|
-
import "heating degree day data from WRI CAIT",
|
21
|
+
import "heating and cooling degree day data from WRI CAIT",
|
22
22
|
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDN4MkRTSWtWRjdfazhRdWllTkVSMkE&output=csv',
|
23
23
|
:select => Proc.new { |record| record['country'] != 'European Union (27)' },
|
24
24
|
:errata => { :url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDNSMUtCV0h4cUF4UnBKZlNkczlNbFE&output=csv' } do
|
25
25
|
key 'name', :field_name => 'country'
|
26
26
|
store 'heating_degree_days', :units => :degrees_celsius
|
27
|
-
end
|
28
|
-
|
29
|
-
import "cooling degree day data from WRI CAIT",
|
30
|
-
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDN4MkRTSWtWRjdfazhRdWllTkVSMkE&output=csv',
|
31
|
-
:select => Proc.new { |record| record['country'] != 'European Union (27)' },
|
32
|
-
:errata => { :url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDNSMUtCV0h4cUF4UnBKZlNkczlNbFE&output=csv' } do
|
33
|
-
key 'name', :field_name => 'country'
|
34
27
|
store 'cooling_degree_days', :units => :degrees_celsius
|
35
28
|
end
|
36
29
|
|
@@ -142,13 +135,13 @@ Country.class_eval do
|
|
142
135
|
find_each do |country|
|
143
136
|
if country.lodging_classes.any?
|
144
137
|
country.lodging_natural_gas_intensity = country.lodging_classes.weighted_average(:natural_gas_intensity)
|
145
|
-
country.lodging_natural_gas_intensity_units = '
|
138
|
+
country.lodging_natural_gas_intensity_units = 'cubic_metres_per_occupied_room_night' # FIXME TODO derive this
|
146
139
|
country.lodging_fuel_oil_intensity = country.lodging_classes.weighted_average(:fuel_oil_intensity)
|
147
|
-
country.lodging_fuel_oil_intensity_units = '
|
140
|
+
country.lodging_fuel_oil_intensity_units = 'gallons_per_occupied_room_night' # FIXME TODO derive this
|
148
141
|
country.lodging_electricity_intensity = country.lodging_classes.weighted_average(:electricity_intensity)
|
149
|
-
country.lodging_electricity_intensity_units = '
|
142
|
+
country.lodging_electricity_intensity_units = 'kilowatt_hours_per_occupied_room_night' # FIXME TODO derive this
|
150
143
|
country.lodging_district_heat_intensity = country.lodging_classes.weighted_average(:district_heat_intensity)
|
151
|
-
country.lodging_district_heat_intensity_units = '
|
144
|
+
country.lodging_district_heat_intensity_units = 'megajoules_per_occupied_room_night' # FIXME TODO derive this
|
152
145
|
country.save!
|
153
146
|
end
|
154
147
|
end
|
@@ -9,7 +9,7 @@ ZipCode.class_eval do
|
|
9
9
|
|
10
10
|
data_miner do
|
11
11
|
import 'the Mapping Hacks zipcode database',
|
12
|
-
:url => 'http://mappinghacks.com/data/zipcode.zip'
|
12
|
+
:url => 'http://archive.data.brighterplanet.com/zipcode.zip', # http://mappinghacks.com/data/zipcode.zip'
|
13
13
|
:filename => 'zipcode.csv' do
|
14
14
|
key 'name', :field_name => 'zip', :sprintf => '%05d'
|
15
15
|
store 'state_postal_abbreviation', :field_name => 'state'
|
@@ -32,13 +32,11 @@ ZipCode.class_eval do
|
|
32
32
|
store 'climate_division_name'
|
33
33
|
end
|
34
34
|
|
35
|
-
# TODO: download file directly from US census
|
36
35
|
# NOTE: ZCTAs are not zip codes but are based on the most common zip code in the area they cover - see http://www.census.gov/geo/ZCTA/zcta.html
|
37
36
|
import 'US Census 2010 zip code tabulation area populations',
|
38
|
-
:url => '
|
39
|
-
|
40
|
-
|
41
|
-
store 'population', :field_name => 'Total'
|
37
|
+
:url => 'http://www.census.gov/geo/www/2010census/zcta_rel/zcta_county_rel_10.txt' do
|
38
|
+
key 'name', :field_name => 'ZCTA5', :sprintf => '%05d'
|
39
|
+
store 'population', :field_name => 'ZPOP'
|
42
40
|
end
|
43
41
|
|
44
42
|
import 'misc zip code data not included in other sources',
|
data/lib/earth/version.rb
CHANGED
@@ -3,7 +3,7 @@ require 'earth/air/aircraft'
|
|
3
3
|
require 'earth/air/aircraft/data_miner'
|
4
4
|
|
5
5
|
describe Aircraft do
|
6
|
-
describe 'import', :
|
6
|
+
describe 'import', :data_miner => true do
|
7
7
|
it 'should treat empty cells as null' do
|
8
8
|
Aircraft.auto_upgrade!
|
9
9
|
Aircraft.run_data_miner!
|
@@ -3,7 +3,7 @@ require 'earth/automobile'
|
|
3
3
|
require 'earth/automobile/data_miner'
|
4
4
|
|
5
5
|
describe AutomobileFuel do
|
6
|
-
describe 'import', :
|
6
|
+
describe 'import', :data_miner => true do
|
7
7
|
it 'should import data without problems' do
|
8
8
|
AutomobileFuel.run_data_miner!
|
9
9
|
AutomobileFuel.all.count.should > 0
|