earth 0.0.18
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/.document +5 -0
- data/.gitignore +22 -0
- data/.rvmrc +8 -0
- data/Gemfile +5 -0
- data/LICENSE +20 -0
- data/README.markdown +38 -0
- data/Rakefile +71 -0
- data/VERSION +1 -0
- data/earth.gemspec +265 -0
- data/lib/earth.rb +169 -0
- data/lib/earth/air.rb +13 -0
- data/lib/earth/air/aircraft.rb +32 -0
- data/lib/earth/air/aircraft/data_miner.rb +171 -0
- data/lib/earth/air/aircraft_class.rb +10 -0
- data/lib/earth/air/aircraft_class/data_miner.rb +42 -0
- data/lib/earth/air/aircraft_manufacturer.rb +9 -0
- data/lib/earth/air/aircraft_manufacturer/data_miner.rb +20 -0
- data/lib/earth/air/airline.rb +16 -0
- data/lib/earth/air/airline/data_miner.rb +57 -0
- data/lib/earth/air/airport.rb +44 -0
- data/lib/earth/air/airport/data_miner.rb +80 -0
- data/lib/earth/air/data_miner.rb +15 -0
- data/lib/earth/air/flight_configuration.rb +18 -0
- data/lib/earth/air/flight_configuration/data_miner.rb +4 -0
- data/lib/earth/air/flight_distance_class.rb +7 -0
- data/lib/earth/air/flight_distance_class/data_miner.rb +16 -0
- data/lib/earth/air/flight_domesticity.rb +6 -0
- data/lib/earth/air/flight_domesticity/data_miner.rb +57 -0
- data/lib/earth/air/flight_fuel_type.rb +17 -0
- data/lib/earth/air/flight_fuel_type/data_miner.rb +4 -0
- data/lib/earth/air/flight_propulsion.rb +18 -0
- data/lib/earth/air/flight_propulsion/data_miner.rb +4 -0
- data/lib/earth/air/flight_seat_class.rb +12 -0
- data/lib/earth/air/flight_seat_class/data_miner.rb +36 -0
- data/lib/earth/air/flight_segment.rb +38 -0
- data/lib/earth/air/flight_segment/data_miner.rb +334 -0
- data/lib/earth/air/flight_service.rb +18 -0
- data/lib/earth/air/flight_service/data_miner.rb +4 -0
- data/lib/earth/all.rb +10 -0
- data/lib/earth/automobile.rb +8 -0
- data/lib/earth/automobile/automobile_fuel_type.rb +18 -0
- data/lib/earth/automobile/automobile_fuel_type/data_miner.rb +45 -0
- data/lib/earth/automobile/automobile_make.rb +14 -0
- data/lib/earth/automobile/automobile_make/data_miner.rb +68 -0
- data/lib/earth/automobile/automobile_make_fleet_year.rb +15 -0
- data/lib/earth/automobile/automobile_make_fleet_year/data_miner.rb +29 -0
- data/lib/earth/automobile/automobile_make_year.rb +14 -0
- data/lib/earth/automobile/automobile_make_year/data_miner.rb +45 -0
- data/lib/earth/automobile/automobile_model.rb +14 -0
- data/lib/earth/automobile/automobile_model/data_miner.rb +38 -0
- data/lib/earth/automobile/automobile_model_year.rb +15 -0
- data/lib/earth/automobile/automobile_model_year/data_miner.rb +51 -0
- data/lib/earth/automobile/automobile_size_class.rb +14 -0
- data/lib/earth/automobile/automobile_size_class/data_miner.rb +43 -0
- data/lib/earth/automobile/automobile_variant.rb +17 -0
- data/lib/earth/automobile/automobile_variant/data_miner.rb +464 -0
- data/lib/earth/automobile/data_miner.rb +8 -0
- data/lib/earth/bus.rb +1 -0
- data/lib/earth/bus/bus_class.rb +19 -0
- data/lib/earth/bus/bus_class/data_miner.rb +41 -0
- data/lib/earth/bus/data_miner.rb +1 -0
- data/lib/earth/conversions_ext.rb +45 -0
- data/lib/earth/data_miner.rb +10 -0
- data/lib/earth/diet.rb +2 -0
- data/lib/earth/diet/data_miner.rb +2 -0
- data/lib/earth/diet/diet_class.rb +15 -0
- data/lib/earth/diet/diet_class/data_miner.rb +36 -0
- data/lib/earth/diet/food_group.rb +17 -0
- data/lib/earth/diet/food_group/data_miner.rb +26 -0
- data/lib/earth/fuel.rb +2 -0
- data/lib/earth/fuel/data_miner.rb +2 -0
- data/lib/earth/fuel/fuel_price.rb +13 -0
- data/lib/earth/fuel/fuel_price/data_miner.rb +20 -0
- data/lib/earth/fuel/fuel_type.rb +18 -0
- data/lib/earth/fuel/fuel_type/data_miner.rb +37 -0
- data/lib/earth/industry.rb +10 -0
- data/lib/earth/industry/data_miner.rb +2 -0
- data/lib/earth/industry/industries_product_lines.rb +6 -0
- data/lib/earth/industry/industries_sectors.rb +6 -0
- data/lib/earth/industry/industry.rb +12 -0
- data/lib/earth/industry/industry/data_miner.rb +21 -0
- data/lib/earth/industry/merchant.rb +5 -0
- data/lib/earth/industry/merchant_categories_industries.rb +8 -0
- data/lib/earth/industry/merchant_category.rb +6 -0
- data/lib/earth/industry/product_line.rb +10 -0
- data/lib/earth/industry/product_line/data_miner.rb +18 -0
- data/lib/earth/industry/product_lines_sectors.rb +6 -0
- data/lib/earth/industry/sector.rb +3 -0
- data/lib/earth/inflectors.rb +9 -0
- data/lib/earth/locality.rb +10 -0
- data/lib/earth/locality/census_division.rb +17 -0
- data/lib/earth/locality/census_division/data_miner.rb +21 -0
- data/lib/earth/locality/census_region.rb +13 -0
- data/lib/earth/locality/census_region/data_miner.rb +17 -0
- data/lib/earth/locality/climate_division.rb +17 -0
- data/lib/earth/locality/climate_division/data_miner.rb +20 -0
- data/lib/earth/locality/country.rb +13 -0
- data/lib/earth/locality/country/data_miner.rb +19 -0
- data/lib/earth/locality/data_miner.rb +10 -0
- data/lib/earth/locality/egrid_region.rb +15 -0
- data/lib/earth/locality/egrid_region/data_miner.rb +19 -0
- data/lib/earth/locality/egrid_subregion.rb +16 -0
- data/lib/earth/locality/egrid_subregion/data_miner.rb +26 -0
- data/lib/earth/locality/petroleum_administration_for_defense_district.rb +13 -0
- data/lib/earth/locality/petroleum_administration_for_defense_district/data_miner.rb +21 -0
- data/lib/earth/locality/state.rb +22 -0
- data/lib/earth/locality/state/data_miner.rb +37 -0
- data/lib/earth/locality/urbanity.rb +20 -0
- data/lib/earth/locality/urbanity/data_miner.rb +4 -0
- data/lib/earth/locality/zip_code.rb +29 -0
- data/lib/earth/locality/zip_code/data_miner.rb +36 -0
- data/lib/earth/pet.rb +4 -0
- data/lib/earth/pet/breed.rb +15 -0
- data/lib/earth/pet/breed/data_miner.rb +25 -0
- data/lib/earth/pet/breed_gender.rb +14 -0
- data/lib/earth/pet/breed_gender/data_miner.rb +21 -0
- data/lib/earth/pet/data_miner.rb +4 -0
- data/lib/earth/pet/gender.rb +10 -0
- data/lib/earth/pet/gender/data_miner.rb +13 -0
- data/lib/earth/pet/species.rb +40 -0
- data/lib/earth/pet/species/data_miner.rb +42 -0
- data/lib/earth/rail.rb +1 -0
- data/lib/earth/rail/data_miner.rb +1 -0
- data/lib/earth/rail/rail_class.rb +16 -0
- data/lib/earth/rail/rail_class/data_miner.rb +36 -0
- data/lib/earth/residence.rb +8 -0
- data/lib/earth/residence/air_conditioner_use.rb +30 -0
- data/lib/earth/residence/air_conditioner_use/data_miner.rb +4 -0
- data/lib/earth/residence/clothes_machine_use.rb +33 -0
- data/lib/earth/residence/clothes_machine_use/data_miner.rb +4 -0
- data/lib/earth/residence/data_miner.rb +8 -0
- data/lib/earth/residence/dishwasher_use.rb +33 -0
- data/lib/earth/residence/dishwasher_use/data_miner.rb +4 -0
- data/lib/earth/residence/residence_appliance.rb +7 -0
- data/lib/earth/residence/residence_appliance/data_miner.rb +19 -0
- data/lib/earth/residence/residence_class.rb +26 -0
- data/lib/earth/residence/residence_class/data_miner.rb +4 -0
- data/lib/earth/residence/residence_fuel_price.rb +18 -0
- data/lib/earth/residence/residence_fuel_price/data_miner.rb +200 -0
- data/lib/earth/residence/residence_fuel_type.rb +33 -0
- data/lib/earth/residence/residence_fuel_type/data_miner.rb +18 -0
- data/lib/earth/residence/residential_energy_consumption_survey_response.rb +67 -0
- data/lib/earth/residence/residential_energy_consumption_survey_response/data_miner.rb +264 -0
- data/lib/earth/schema.rb +8 -0
- data/spec/lib/earth_spec.rb +25 -0
- data/spec/spec_helper.rb +11 -0
- data/vendor/geokit-rails/CHANGELOG.rdoc +46 -0
- data/vendor/geokit-rails/MIT-LICENSE +20 -0
- data/vendor/geokit-rails/README.markdown +561 -0
- data/vendor/geokit-rails/Rakefile +18 -0
- data/vendor/geokit-rails/about.yml +9 -0
- data/vendor/geokit-rails/assets/api_keys_template +61 -0
- data/vendor/geokit-rails/init.rb +1 -0
- data/vendor/geokit-rails/install.rb +14 -0
- data/vendor/geokit-rails/lib/geokit-rails.rb +24 -0
- data/vendor/geokit-rails/lib/geokit-rails/acts_as_mappable.rb +456 -0
- data/vendor/geokit-rails/lib/geokit-rails/adapters/abstract.rb +31 -0
- data/vendor/geokit-rails/lib/geokit-rails/adapters/mysql.rb +22 -0
- data/vendor/geokit-rails/lib/geokit-rails/adapters/postgresql.rb +22 -0
- data/vendor/geokit-rails/lib/geokit-rails/adapters/sqlserver.rb +43 -0
- data/vendor/geokit-rails/lib/geokit-rails/defaults.rb +22 -0
- data/vendor/geokit-rails/lib/geokit-rails/geocoder_control.rb +16 -0
- data/vendor/geokit-rails/lib/geokit-rails/ip_geocode_lookup.rb +46 -0
- data/vendor/geokit-rails/test/acts_as_mappable_test.rb +474 -0
- data/vendor/geokit-rails/test/boot.rb +25 -0
- data/vendor/geokit-rails/test/database.yml +20 -0
- data/vendor/geokit-rails/test/fixtures/companies.yml +7 -0
- data/vendor/geokit-rails/test/fixtures/custom_locations.yml +54 -0
- data/vendor/geokit-rails/test/fixtures/locations.yml +54 -0
- data/vendor/geokit-rails/test/fixtures/mock_addresses.yml +17 -0
- data/vendor/geokit-rails/test/fixtures/mock_families.yml +2 -0
- data/vendor/geokit-rails/test/fixtures/mock_houses.yml +9 -0
- data/vendor/geokit-rails/test/fixtures/mock_organizations.yml +5 -0
- data/vendor/geokit-rails/test/fixtures/mock_people.yml +5 -0
- data/vendor/geokit-rails/test/fixtures/stores.yml +0 -0
- data/vendor/geokit-rails/test/ip_geocode_lookup_test.rb +77 -0
- data/vendor/geokit-rails/test/models/company.rb +3 -0
- data/vendor/geokit-rails/test/models/custom_location.rb +12 -0
- data/vendor/geokit-rails/test/models/location.rb +4 -0
- data/vendor/geokit-rails/test/models/mock_address.rb +4 -0
- data/vendor/geokit-rails/test/models/mock_family.rb +3 -0
- data/vendor/geokit-rails/test/models/mock_house.rb +3 -0
- data/vendor/geokit-rails/test/models/mock_organization.rb +4 -0
- data/vendor/geokit-rails/test/models/mock_person.rb +4 -0
- data/vendor/geokit-rails/test/models/store.rb +3 -0
- data/vendor/geokit-rails/test/schema.rb +60 -0
- data/vendor/geokit-rails/test/tasks.rake +31 -0
- data/vendor/geokit-rails/test/test_helper.rb +23 -0
- metadata +444 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class ZipCode < ActiveRecord::Base
|
|
2
|
+
set_primary_key :name
|
|
3
|
+
|
|
4
|
+
belongs_to :egrid_subregion, :foreign_key => 'egrid_subregion_abbreviation'
|
|
5
|
+
belongs_to :climate_division, :foreign_key => 'climate_division_name'
|
|
6
|
+
belongs_to :state, :foreign_key => 'state_postal_abbreviation'
|
|
7
|
+
# has_one :census_division, :through => :state
|
|
8
|
+
# has_one :census_region, :through => :state
|
|
9
|
+
has_many :residences
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
acts_as_mappable :default_units => :miles, # FIXME imperial
|
|
13
|
+
:lat_column_name => :latitude,
|
|
14
|
+
:lng_column_name => :longitude
|
|
15
|
+
|
|
16
|
+
def set_latitude_and_longitude
|
|
17
|
+
return if latitude.present? and longitude.present?
|
|
18
|
+
a = Geokit::Geocoders::YahooGeocoder.geocode name
|
|
19
|
+
update_attributes! :latitude => a.lat, :longitude => a.lng
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
data_miner do
|
|
23
|
+
tap "Brighter Planet's sanitized zip codes", Earth.taps_server
|
|
24
|
+
|
|
25
|
+
process "pull dependencies" do
|
|
26
|
+
run_data_miner_on_belongs_to_associations
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
ZipCode.class_eval do
|
|
2
|
+
data_miner do
|
|
3
|
+
schema Earth.database_options do
|
|
4
|
+
string 'name'
|
|
5
|
+
string 'state_postal_abbreviation'
|
|
6
|
+
string 'description'
|
|
7
|
+
string 'latitude'
|
|
8
|
+
string 'longitude'
|
|
9
|
+
string 'egrid_subregion_abbreviation'
|
|
10
|
+
string 'climate_division_name'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
import 'the Mapping Hacks zipcode database',
|
|
14
|
+
:url => 'http://mappinghacks.com/data/zipcode.zip',
|
|
15
|
+
:filename => 'zipcode.csv' do
|
|
16
|
+
key 'name', :field_name => 'zip', :sprintf => '%05d'
|
|
17
|
+
store 'state_postal_abbreviation', :field_name => 'state'
|
|
18
|
+
store 'description', :field_name => 'city'
|
|
19
|
+
store 'latitude'
|
|
20
|
+
store 'longitude'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
import 'a list of zipcodes and eGRID Subregions',
|
|
24
|
+
:url => 'http://static.brighterplanet.com/science/data/electricity/egrid/models_export/zip_subregions.csv' do
|
|
25
|
+
key 'name', :field_name => 'zip', :sprintf => '%05d'
|
|
26
|
+
store 'egrid_subregion_abbreviation', :field_name => 'primary_subregion'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
import 'a list of zipcodes and Climate Divisions',
|
|
30
|
+
:url => 'http://static.brighterplanet.com/science/data/geography/zip_code_name-climate_division_name.csv' do
|
|
31
|
+
key 'name', :field_name => 'zip_code_name', :sprintf => '%05d'
|
|
32
|
+
store 'climate_division_name'
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
data/lib/earth/pet.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class Breed < ActiveRecord::Base
|
|
2
|
+
set_primary_key :name
|
|
3
|
+
|
|
4
|
+
has_many :pets, :foreign_key => 'breed_id'
|
|
5
|
+
has_many :breed_genders, :foreign_key => 'breed_name'
|
|
6
|
+
belongs_to :species, :foreign_key => 'species_name'
|
|
7
|
+
|
|
8
|
+
data_miner do
|
|
9
|
+
tap "Brighter Planet's breed data", Earth.taps_server
|
|
10
|
+
|
|
11
|
+
process "pull dependencies" do
|
|
12
|
+
run_data_miner_on_belongs_to_associations
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Breed.class_eval do
|
|
2
|
+
data_miner do
|
|
3
|
+
schema Earth.database_options do
|
|
4
|
+
string 'name'
|
|
5
|
+
string 'species_name'
|
|
6
|
+
float 'weight'
|
|
7
|
+
string 'weight_units'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
import "Brighter Planet's list of cat and dog breeds",
|
|
11
|
+
:url => 'http://static.brighterplanet.com/science/data/consumables/pets/breed_genders.csv',
|
|
12
|
+
:encoding => 'ISO-8859-1',
|
|
13
|
+
:select => lambda { |row| row['gender'].blank? } do
|
|
14
|
+
key 'name'
|
|
15
|
+
store 'species_name', :field_name => 'species'
|
|
16
|
+
store 'weight', :from_units => :pounds, :to_units => :kilograms
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
import "a list of horse breeds", :url => 'http://www.freebase.com/type/exporttypeinstances/base/horses/horse_breed?page=0&filter_mode=type&filter_view=table&show%01p%3D%2Ftype%2Fobject%2Fname%01index=0&show%01p%3D%2Fcommon%2Ftopic%2Fimage%01index=1&show%01p%3D%2Fcommon%2Ftopic%2Farticle%01index=2&sort%01p%3D%2Ftype%2Fobject%2Ftype%01p%3Dlink%01p%3D%2Ftype%2Flink%2Ftimestamp%01index=false&=&exporttype=csv-8' do
|
|
20
|
+
key 'name'
|
|
21
|
+
store 'species_name', :static => 'horse'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class BreedGender < ActiveRecord::Base
|
|
2
|
+
set_primary_key :name
|
|
3
|
+
|
|
4
|
+
belongs_to :breed, :foreign_key => 'breed_name'
|
|
5
|
+
belongs_to :gender, :foreign_key => 'gender_name'
|
|
6
|
+
|
|
7
|
+
data_miner do
|
|
8
|
+
tap "Brighter Planet's breed gender data", Earth.taps_server
|
|
9
|
+
|
|
10
|
+
process "pull dependencies" do
|
|
11
|
+
run_data_miner_on_belongs_to_associations
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
BreedGender.class_eval do
|
|
2
|
+
data_miner do
|
|
3
|
+
schema Earth.database_options do
|
|
4
|
+
string 'name'
|
|
5
|
+
string 'breed_name'
|
|
6
|
+
string 'gender_name'
|
|
7
|
+
float 'weight'
|
|
8
|
+
string 'weight_units'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
import "Brighter Planet's list of cat and dog breeds, genders, and weights",
|
|
12
|
+
:url => 'http://static.brighterplanet.com/science/data/consumables/pets/breed_genders.csv',
|
|
13
|
+
:select => lambda { |row| row['gender'].present? } do
|
|
14
|
+
key 'name', :synthesize => lambda { |row| row['name'] + ' ' + row['gender'] }
|
|
15
|
+
store 'breed_name', :field_name => 'name'
|
|
16
|
+
store 'gender_name', :field_name => 'gender'
|
|
17
|
+
store 'weight', :from_units => :pounds, :to_units => :kilograms
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Gender.class_eval do
|
|
2
|
+
data_miner do
|
|
3
|
+
schema Earth.database_options do
|
|
4
|
+
string 'name'
|
|
5
|
+
end
|
|
6
|
+
import "a list of genders derived from pet breed genders",
|
|
7
|
+
:url => 'http://static.brighterplanet.com/science/data/consumables/pets/breed_genders.csv',
|
|
8
|
+
:select => lambda { |row| row['gender'].present? } do
|
|
9
|
+
key 'name', :field_name => 'gender'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class Species < ActiveRecord::Base
|
|
2
|
+
set_primary_key :name
|
|
3
|
+
|
|
4
|
+
has_many :pets
|
|
5
|
+
|
|
6
|
+
scope :thoroughly_researched, :conditions => 'marginal_dietary_requirement IS NOT NULL'
|
|
7
|
+
|
|
8
|
+
falls_back_on :diet_emission_intensity => lambda { weighted_average :diet_emission_intensity, :weighted_by => :population }, # kg CO2 / joule
|
|
9
|
+
:marginal_dietary_requirement => lambda { (thoroughly_researched.map(&:weighted_diet_size).sum / thoroughly_researched.sum(:population) ) / thoroughly_researched.weighted_average(:weight, :weighted_by => :population)}, # joules
|
|
10
|
+
:fixed_dietary_requirement => 0, # force a zero intercept to be respectful of our tiny tiny animal friends
|
|
11
|
+
:weight => lambda { weighted_average :weight, :weighted_by => :population } # kg
|
|
12
|
+
|
|
13
|
+
data_miner do
|
|
14
|
+
tap "Brighter Planet's species data", Earth.taps_server
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
def [](name)
|
|
19
|
+
find_by_name name.to_s
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def diet_size
|
|
24
|
+
return unless weight and marginal_dietary_requirement and fixed_dietary_requirement
|
|
25
|
+
weight * marginal_dietary_requirement + fixed_dietary_requirement
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def weighted_diet_size
|
|
29
|
+
return unless _diet_size = diet_size and _population = population
|
|
30
|
+
_diet_size * _population
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def to_s
|
|
34
|
+
name
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def cat?
|
|
38
|
+
eql? self.class[:cat]
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Species.class_eval do
|
|
2
|
+
data_miner do
|
|
3
|
+
schema Earth.database_options do
|
|
4
|
+
string 'name'
|
|
5
|
+
integer 'population'
|
|
6
|
+
float 'diet_emission_intensity'
|
|
7
|
+
string 'diet_emission_intensity_units'
|
|
8
|
+
float 'weight'
|
|
9
|
+
string 'weight_units'
|
|
10
|
+
float 'marginal_dietary_requirement'
|
|
11
|
+
string 'marginal_dietary_requirement_units'
|
|
12
|
+
float 'fixed_dietary_requirement'
|
|
13
|
+
string 'fixed_dietary_requirement_units'
|
|
14
|
+
float 'minimum_weight'
|
|
15
|
+
string 'minimum_weight_units'
|
|
16
|
+
float 'maximum_weight'
|
|
17
|
+
string 'maximum_weight_units'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
process "Define some unit conversions" do
|
|
21
|
+
# 1 (kilocalories per pound) = 9 224.14105 joules per kilogram
|
|
22
|
+
Conversions.register :kilocalories_per_pound, :joules_per_kilogram, 9_224.14105
|
|
23
|
+
# 1 (grams per kilocalories) = 2.39005736 × 10-7 kilograms per joules
|
|
24
|
+
Conversions.register :grams_per_kilocalorie, :kilograms_per_joule, 2.39005736e-7
|
|
25
|
+
# 1 joule = 0.000239005736 kilocalories
|
|
26
|
+
Conversions.register :joules, :kilocalories, 0.000239005736
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
import "a list of pet species weights, dietary requirements, and diet emissions intensities",
|
|
30
|
+
:url => 'http://static.brighterplanet.com/science/data/consumables/pets/species.csv' do
|
|
31
|
+
key 'name', :field_name => 'species'
|
|
32
|
+
store 'population'
|
|
33
|
+
store 'weight', :from_units => :pounds, :to_units => :kilograms
|
|
34
|
+
store 'marginal_dietary_requirement', :from_units => :kilocalories_per_pound, :to_units => :joules_per_kilogram
|
|
35
|
+
store 'fixed_dietary_requirement', :from_units => :kilocalories, :to_units => :joules
|
|
36
|
+
store 'diet_emission_intensity', :from_units => :grams_per_kilocalorie, :to_units => :kilograms_per_joule
|
|
37
|
+
store 'minimum_weight', :from_units => :pounds, :to_units => :kilograms
|
|
38
|
+
store 'maximum_weight', :from_units => :pounds, :to_units => :kilograms
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
data/lib/earth/rail.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'earth/rail/rail_class'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'earth/rail/rail_class/data_miner'
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class RailClass < ActiveRecord::Base
|
|
2
|
+
set_primary_key :name
|
|
3
|
+
|
|
4
|
+
has_many :rail_trips
|
|
5
|
+
|
|
6
|
+
data_miner do
|
|
7
|
+
tap "Brighter Planet's rail class data", Earth.taps_server
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# speed is missing
|
|
11
|
+
# https://brighterplanet.sifterapp.com/projects/30/issues/455
|
|
12
|
+
falls_back_on :passengers => 25.06,
|
|
13
|
+
:distance => 8.57.miles.to(:kilometres),
|
|
14
|
+
:diesel_intensity => 0.05.gallons_per_mile.to(:litres_per_kilometre),
|
|
15
|
+
:electricity_intensity => 8.89.miles.to(:kilometres)
|
|
16
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
RailClass.class_eval do
|
|
2
|
+
data_miner do
|
|
3
|
+
schema Earth.database_options do
|
|
4
|
+
string 'name'
|
|
5
|
+
float 'distance'
|
|
6
|
+
string 'distance_units'
|
|
7
|
+
float 'passengers'
|
|
8
|
+
float 'speed'
|
|
9
|
+
string 'speed_units'
|
|
10
|
+
float 'duration'
|
|
11
|
+
string 'duration_units'
|
|
12
|
+
float 'electricity_intensity'
|
|
13
|
+
string 'electricity_intensity_units'
|
|
14
|
+
float 'diesel_intensity'
|
|
15
|
+
string 'diesel_intensity_units'
|
|
16
|
+
string 'description'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
process "Define some unit conversions" do
|
|
20
|
+
Conversions.register :gallons_per_mile, :litres_per_kilometre, 2.35214583
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
import "a list of rail classes and pre-calculated trip and fuel use characteristics",
|
|
24
|
+
:url => 'http://static.brighterplanet.com/science/data/transport/rail/rail_classes.csv' do
|
|
25
|
+
key 'name'
|
|
26
|
+
store 'description'
|
|
27
|
+
store 'distance', :from_units => :miles, :to_units => :kilometres
|
|
28
|
+
store 'speed', :from_units => :miles, :to_units => :kilometres
|
|
29
|
+
store 'duration'
|
|
30
|
+
store 'passengers'
|
|
31
|
+
store 'electricity_intensity', :field_name => 'electricity_per_vehicle_mile', :from_units => :miles, :to_units => :kilometres
|
|
32
|
+
store 'diesel_intensity', :field_name => 'diesel_per_vehicle_mile', :from_units => :gallons_per_mile, :to_units => :litres_per_kilometre
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require 'earth/residence/air_conditioner_use'
|
|
2
|
+
require 'earth/residence/clothes_machine_use'
|
|
3
|
+
require 'earth/residence/dishwasher_use'
|
|
4
|
+
require 'earth/residence/residence_appliance'
|
|
5
|
+
require 'earth/residence/residence_class'
|
|
6
|
+
require 'earth/residence/residence_fuel_price'
|
|
7
|
+
require 'earth/residence/residence_fuel_type'
|
|
8
|
+
require 'earth/residence/residential_energy_consumption_survey_response'
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
class AirConditionerUse < ActiveRecord::Base
|
|
2
|
+
set_primary_key :name
|
|
3
|
+
|
|
4
|
+
has_many :residences
|
|
5
|
+
has_many :residential_energy_consumption_survey_responses
|
|
6
|
+
|
|
7
|
+
falls_back_on :fugitive_emission => 0.102295.pounds_per_square_foot.to(:kilograms_per_square_metre), # https://brighterplanet.sifterapp.com/projects/30/issues/430
|
|
8
|
+
:fugitive_emission_units => 'kilograms_per_square_metre'
|
|
9
|
+
|
|
10
|
+
data_miner do
|
|
11
|
+
schema do
|
|
12
|
+
string 'name'
|
|
13
|
+
float 'fugitive_emission'
|
|
14
|
+
string 'fugitive_emission_units'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
process "derive from ResidentialEnergyConsumptionSurveyResponse" do
|
|
18
|
+
ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
|
|
19
|
+
connection.execute %{
|
|
20
|
+
INSERT IGNORE INTO air_conditioner_uses(name)
|
|
21
|
+
SELECT DISTINCT residential_energy_consumption_survey_responses.central_ac_use FROM residential_energy_consumption_survey_responses WHERE LENGTH(residential_energy_consumption_survey_responses.central_ac_use) > 0
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
import "Ian's precalculated fugitive emissions values", :url => 'http://spreadsheets.google.com/pub?key=ri_380yQZAqBKeqie_TECgg' do
|
|
26
|
+
key 'name', :field_name => 'air_conditioner_use_name'
|
|
27
|
+
store 'fugitive_emission', :units_field_name => 'unit', :to_units => :kilograms_per_square_metre
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class ClothesMachineUse < ActiveRecord::Base
|
|
2
|
+
set_primary_key :name
|
|
3
|
+
|
|
4
|
+
has_many :residences
|
|
5
|
+
has_many :residential_energy_consumption_survey_responses
|
|
6
|
+
|
|
7
|
+
data_miner do
|
|
8
|
+
schema do
|
|
9
|
+
string 'name'
|
|
10
|
+
float 'annual_energy_from_electricity_for_clothes_driers'
|
|
11
|
+
string 'annual_energy_from_electricity_for_clothes_driers_units'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
process "derive from ResidentialEnergyConsumptionSurveyResponse" do
|
|
15
|
+
ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
|
|
16
|
+
connection.execute %{
|
|
17
|
+
INSERT IGNORE INTO clothes_machine_uses(name)
|
|
18
|
+
SELECT DISTINCT residential_energy_consumption_survey_responses.clothes_washer_use FROM residential_energy_consumption_survey_responses WHERE LENGTH(residential_energy_consumption_survey_responses.clothes_washer_use) > 0
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# sabshere 5/20/10 weird that this uses cohort
|
|
23
|
+
process "precalculate annual energy use" do
|
|
24
|
+
find_in_batches do |batch|
|
|
25
|
+
batch.each do |record|
|
|
26
|
+
record.annual_energy_from_electricity_for_clothes_driers = ResidentialEnergyConsumptionSurveyResponse.big_cohort(:clothes_machine_use => record).weighted_average :annual_energy_from_electricity_for_clothes_driers
|
|
27
|
+
record.annual_energy_from_electricity_for_clothes_driers_units = 'joules'
|
|
28
|
+
record.save!
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require 'earth/residence/air_conditioner_use/data_miner'
|
|
2
|
+
require 'earth/residence/clothes_machine_use/data_miner'
|
|
3
|
+
require 'earth/residence/dishwasher_use/data_miner'
|
|
4
|
+
require 'earth/residence/residence_appliance/data_miner'
|
|
5
|
+
require 'earth/residence/residence_class/data_miner'
|
|
6
|
+
require 'earth/residence/residence_fuel_price/data_miner'
|
|
7
|
+
require 'earth/residence/residence_fuel_type/data_miner'
|
|
8
|
+
require 'earth/residence/residential_energy_consumption_survey_response/data_miner'
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class DishwasherUse < ActiveRecord::Base
|
|
2
|
+
set_primary_key :name
|
|
3
|
+
|
|
4
|
+
has_many :residences
|
|
5
|
+
has_many :residential_energy_consumption_survey_responses
|
|
6
|
+
|
|
7
|
+
data_miner do
|
|
8
|
+
schema do
|
|
9
|
+
string 'name'
|
|
10
|
+
float 'annual_energy_from_electricity_for_dishwashers'
|
|
11
|
+
string 'annual_energy_from_electricity_for_dishwashers_units'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
process "derive from ResidentialEnergyConsumptionSurveyResponse" do
|
|
15
|
+
ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
|
|
16
|
+
connection.execute %{
|
|
17
|
+
INSERT IGNORE INTO dishwasher_uses(name)
|
|
18
|
+
SELECT DISTINCT residential_energy_consumption_survey_responses.dishwasher_use_id FROM residential_energy_consumption_survey_responses WHERE LENGTH(residential_energy_consumption_survey_responses.dishwasher_use_id) > 0
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# sabshere 5/25/10 weird that this uses cohort
|
|
23
|
+
process "precalculate annual energy" do
|
|
24
|
+
find_in_batches do |batch|
|
|
25
|
+
batch.each do |record|
|
|
26
|
+
record.annual_energy_from_electricity_for_dishwashers = ResidentialEnergyConsumptionSurveyResponse.big_cohort(:dishwasher_use => record).weighted_average :annual_energy_from_electricity_for_dishwashers
|
|
27
|
+
record.annual_energy_from_electricity_for_dishwashers_units = 'joules'
|
|
28
|
+
record.save!
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|