earth 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. data/CHANGELOG +12 -0
  2. data/data/residence/recs_response_groupings.csv +52 -0
  3. data/earth.gemspec +1 -1
  4. data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +1 -1
  5. data/lib/earth/industry/mecs_energy.rb +26 -16
  6. data/lib/earth/{insolation_scopes.rb → irradiance_scopes.rb} +1 -1
  7. data/lib/earth/loader.rb +5 -4
  8. data/lib/earth/locality/{direct_normal_insolation.rb → direct_normal_irradiance.rb} +4 -4
  9. data/lib/earth/locality/{direct_normal_insolation → direct_normal_irradiance}/data_miner.rb +4 -4
  10. data/lib/earth/locality/electricity_mix/data_miner.rb +8 -8
  11. data/lib/earth/locality/{global_horizontal_insolation.rb → global_horizontal_irradiance.rb} +4 -4
  12. data/lib/earth/locality/{global_horizontal_insolation → global_horizontal_irradiance}/data_miner.rb +4 -4
  13. data/lib/earth/locality/{photovoltaic_insolation.rb → photovoltaic_irradiance.rb} +4 -4
  14. data/lib/earth/locality/{photovoltaic_insolation → photovoltaic_irradiance}/data_miner.rb +4 -4
  15. data/lib/earth/locality/state.rb +3 -1
  16. data/lib/earth/locality/state/data_miner.rb +15 -8
  17. data/lib/earth/locality/zip_code/data_miner.rb +1 -1
  18. data/lib/earth/residence/recs_2009_response.rb +655 -0
  19. data/lib/earth/residence/recs_2009_response/data_miner.rb +402 -0
  20. data/lib/earth/residence/recs_2009_response/parser.rb +879 -0
  21. data/lib/earth/version.rb +1 -1
  22. data/spec/earth/locality/direct_normal_irradiance_spec.rb +8 -0
  23. data/spec/earth/locality/global_horizontal_irradiance_spec.rb +8 -0
  24. data/spec/earth/locality/photovoltaic_irradiance_spec.rb +8 -0
  25. data/spec/earth/locality/state_spec.rb +7 -0
  26. data/spec/earth/residence/recs_2009_response_spec.rb +388 -0
  27. data/spec/earth_spec.rb +1 -1
  28. metadata +386 -246
  29. data/ar17.html +0 -2093
  30. data/spec/earth/locality/direct_normal_insolation_spec.rb +0 -8
  31. data/spec/earth/locality/global_horizontal_insolation_spec.rb +0 -8
  32. data/spec/earth/locality/photovoltaic_insolation_spec.rb +0 -8
data/CHANGELOG CHANGED
@@ -1,3 +1,15 @@
1
+ 1.1.2 / 2013-03-15
2
+
3
+ * Enhancements
4
+
5
+ * 2012 Fuel Economy Guide
6
+ * RECS 2009 microdata
7
+ * New ZCTA urls from census.gov
8
+
9
+ * Bug fixes
10
+
11
+ * Fix esoteric regression with loading RECS 2009
12
+
1
13
  1.1.0 / 2012-10-18
2
14
 
3
15
  * Breaking changes
@@ -0,0 +1,52 @@
1
+ state_postal_abbreviation,recs_grouping_id
2
+ AK,27
3
+ AL,18
4
+ AR,20
5
+ AZ,24
6
+ CA,26
7
+ CO,22
8
+ CT,1
9
+ DC,14
10
+ DE,14
11
+ FL,17
12
+ GA,15
13
+ HI,27
14
+ IA,10
15
+ ID,23
16
+ IL,6
17
+ IN,7
18
+ KS,11
19
+ KY,18
20
+ LA,20
21
+ MA,2
22
+ MD,14
23
+ ME,1
24
+ MI,8
25
+ MN,10
26
+ MO,12
27
+ MS,18
28
+ MT,23
29
+ NC,16
30
+ ND,10
31
+ NE,11
32
+ NH,1
33
+ NJ,4
34
+ NM,25
35
+ NV,25
36
+ NY,3
37
+ OH,7
38
+ OK,20
39
+ OR,27
40
+ PA,5
41
+ RI,1
42
+ SC,16
43
+ SD,10
44
+ TN,19
45
+ TX,21
46
+ UT,23
47
+ VA,13
48
+ VT,1
49
+ WA,27
50
+ WI,9
51
+ WV,14
52
+ WY,23
@@ -4,7 +4,7 @@ require File.expand_path("../lib/earth/version", __FILE__)
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "earth"
6
6
  s.version = Earth::VERSION
7
- s.authors = ["Seamus Abshere", "Derek Kastner", "Andy Rossmeissl"]
7
+ s.authors = ["Seamus Abshere", "Derek Kastner", "Andy Rossmeissl", "Ian Hough"]
8
8
  s.email = ['seamus@abshere.net', 'dkastner@gmail.com', 'andy@rossmeissl.net', 'ijhough@gmail.com']
9
9
  s.homepage = "https://github.com/brighterplanet/earth"
10
10
  s.summary = %Q{Land, sky, and sea}
@@ -110,7 +110,7 @@ AutomobileMakeModelYearVariant.class_eval do
110
110
  2009 => { :url => 'http://www.fueleconomy.gov/FEG/epadata/09data.zip', :filename => '2009_FE_guide for DOE_ALL-rel dates-no-sales-8-28-08download.csv' },
111
111
  2010 => { :url => 'http://www.fueleconomy.gov/FEG/epadata/10data.zip', :filename => '2010FEGuide for DOE-all rel dates-no-sales-02-22-2011public.xlsx' },
112
112
  2011 => { :url => 'http://www.fueleconomy.gov/FEG/epadata/11data.zip', :filename => '2011FEGuide-for DOE rel-dates before 1-23-2011-no-sales-01-10-2011_All_public.xlsx' },
113
- 2012 => { :url => 'http://www.fueleconomy.gov/feg/epadata/12data.zip', :filename => '2012 FEGuide for DOE-rev99-rel dates before 3-13-2012-no-sales_public.xlsx' }
113
+ 2012 => { :url => 'http://www.fueleconomy.gov/feg/epadata/12data.zip', :filename => '2012 FEGuide-for DOE-OK to release-no-sales-11-13-2012public.xlsx' }
114
114
  })
115
115
 
116
116
  fuel_economy_guides.each do |year, options|
@@ -70,31 +70,41 @@ EOS
70
70
  def fuel_ratios
71
71
  # Don't return a ratio if reported total energy was withheld
72
72
  if energy.to_f > 0
73
+
73
74
  # Calculate the sum of all fuels and note if any were withheld
74
- withheld = 0
75
+ withheld = false
75
76
  fuels_sum = MecsEnergy::FUELS.inject(0) do |sum, fuel|
76
- (value = send("#{fuel}")).nil? ? withheld = 1 : sum += value
77
+ if (v = send(fuel)).nil?
78
+ withheld = true
79
+ else
80
+ sum += v
81
+ end
77
82
  sum
78
83
  end
79
84
 
80
- # If energy > sum of all fuels and some fuels were withheld, calculate fuel ratios as fraction of energy
81
- # and attribute the disparity between energy and sum of all fuels to the dirtiest fuel that was withheld
82
- if energy > fuels_sum and withheld == 1
83
- ratios = MecsEnergy::FUELS.inject({}) do |r, fuel|
84
- fuel_use = send("#{fuel}")
85
- r[fuel] = fuel_use.present? ? fuel_use / energy : nil
86
- r
85
+ if energy > fuels_sum and withheld
86
+ # If energy > sum of all fuels and some fuels were withheld, calculate fuel ratios as fraction of energy
87
+ # and attribute the disparity between energy and sum of all fuels to the dirtiest fuel that was withheld
88
+ ratios = MecsEnergy::FUELS.inject({}) do |memo, fuel|
89
+ memo[fuel] = if (v = send(fuel)).present?
90
+ v / energy
91
+ else
92
+ nil
93
+ end
94
+ memo
87
95
  end
88
-
89
96
  dirtiest_withheld = ([:coal, :other_fuel, :coke_and_breeze, :residual_fuel_oil, :distillate_fuel_oil, :lpg_and_ngl, :natural_gas] & ratios.select{|k,v| v.nil?}.keys).first
90
97
  ratios[dirtiest_withheld] = (energy - fuels_sum) / energy
91
- ratios.delete_if{ |fuel, ratio| ratio.to_f == 0.0 }
92
- # Otherwise calculate ratios as fraction of sum of all fuels, skipping any fuels that were withheld
98
+ ratios.delete_if do |fuel, ratio|
99
+ ratio.to_f == 0.0
100
+ end
93
101
  else
94
- ratios = MecsEnergy::FUELS.inject({}) do |r, fuel|
95
- fuel_use = send("#{fuel}")
96
- r[fuel] = fuel_use / fuels_sum if fuel_use.to_f > 0
97
- r
102
+ # Otherwise calculate ratios as fraction of sum of all fuels, skipping any fuels that were withheld
103
+ ratios = MecsEnergy::FUELS.inject({}) do |memo, fuel|
104
+ if (v = send(fuel).to_f) > 0
105
+ memo[fuel] = v / fuels_sum
106
+ end
107
+ memo
98
108
  end
99
109
  ratios.keys.any? ? ratios : nil
100
110
  end
@@ -1,5 +1,5 @@
1
1
  module Earth
2
- module InsolationScopes
2
+ module IrradianceScopes
3
3
  def self.included(target)
4
4
  target.scope :at_lat_lon, lambda { |lat, lon|
5
5
  target.where('nw_lat > ? AND nw_lon > ? AND se_lat < ? AND se_lon < ?', lat, lon, lat, lon)
@@ -22,16 +22,17 @@ module Earth
22
22
  args = [glob, options]
23
23
  return if @require_glob.include?(args)
24
24
  @require_glob << args
25
- data_miner_paths = []
25
+ require_later = []
26
26
  ::Dir[glob].each do |path|
27
- if path.include?('data_miner')
28
- data_miner_paths << path
27
+ # ugh
28
+ if path.include?('data_miner') or path.include?('parser')
29
+ require_later << path
29
30
  else
30
31
  require path
31
32
  end
32
33
  end
33
34
  # load data_miner blocks second to make sure they override
34
- data_miner_paths.each do |path|
35
+ require_later.each do |path|
35
36
  require path
36
37
  end if options[:load_data_miner] || options[:mine_original_sources]
37
38
  nil
@@ -1,12 +1,12 @@
1
1
  require 'earth/model'
2
- require 'earth/insolation_scopes'
2
+ require 'earth/irradiance_scopes'
3
3
 
4
- class DirectNormalInsolation < ActiveRecord::Base
4
+ class DirectNormalIrradiance < ActiveRecord::Base
5
5
  extend Earth::Model
6
- include Earth::InsolationScopes
6
+ include Earth::IrradianceScopes
7
7
 
8
8
  TABLE_STRUCTURE = <<-EOS
9
- CREATE TABLE direct_normal_insolations
9
+ CREATE TABLE direct_normal_irradiances
10
10
  (
11
11
  row_hash CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
12
12
  nw_lat FLOAT,
@@ -1,20 +1,20 @@
1
1
  begin
2
2
  require 'geo_ruby'
3
3
  rescue LoadError
4
- puts '[Earth] You need to install the geo_ruby gem to mine Insolation from scratch'
4
+ puts '[Earth] You need to install the geo_ruby gem to mine DirectNormalIrradiance from scratch'
5
5
  exit
6
6
  end
7
7
  begin
8
8
  require 'dbf'
9
9
  rescue LoadError
10
- puts '[Earth] You need to install the dbf gem to mine Insolation from scratch'
10
+ puts '[Earth] You need to install the dbf gem to mine DirectNormalIrradiance from scratch'
11
11
  exit
12
12
  end
13
13
  require 'unix_utils'
14
14
 
15
- DirectNormalInsolation.class_eval do
15
+ DirectNormalIrradiance.class_eval do
16
16
  data_miner do
17
- import 'Direct Normal Insolation shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
17
+ import 'Direct Normal Irradiance shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
18
18
  :url => 'http://www.nrel.gov/gis/cfm/data/GIS_Data_Technology_Specific/United_States/Solar/High_Resolution/Lower_48_DNI_High_Resolution.zip',
19
19
  :format => :shp do
20
20
  key :row_hash
@@ -64,10 +64,10 @@ ElectricityMix.class_eval do
64
64
  sub_pops = state.zip_codes.known_subregion.sum(:population, :group => :egrid_subregion)
65
65
 
66
66
  %w{ co2 ch4 n2o }.each do |gas|
67
- ef = sub_pops.inject(0) do |memo, (subregion, population)|
68
- memo += subregion.send("#{gas}_emission_factor") * population
69
- memo
70
- end / sub_pops.values.sum
67
+ ef = sub_pops.sum do |subregion, population|
68
+ subregion.send("#{gas}_emission_factor") * population
69
+ end
70
+ ef /= sub_pops.values.sum
71
71
 
72
72
  mix.update_attributes!(
73
73
  "#{gas}_emission_factor" => ef,
@@ -75,10 +75,10 @@ ElectricityMix.class_eval do
75
75
  )
76
76
  end
77
77
 
78
- lf = sub_pops.inject(0) do |memo, (subregion, population)|
79
- memo += subregion.egrid_region.loss_factor * population
80
- memo
81
- end / sub_pops.values.sum
78
+ lf = sub_pops.sum do |subregion, population|
79
+ subregion.egrid_region.loss_factor * population
80
+ end
81
+ lf /= sub_pops.values.sum
82
82
 
83
83
  mix.update_attributes! :loss_factor => lf
84
84
  end
@@ -1,12 +1,12 @@
1
1
  require 'earth/model'
2
- require 'earth/insolation_scopes'
2
+ require 'earth/irradiance_scopes'
3
3
 
4
- class GlobalHorizontalInsolation < ActiveRecord::Base
4
+ class GlobalHorizontalIrradiance < ActiveRecord::Base
5
5
  extend Earth::Model
6
- include Earth::InsolationScopes
6
+ include Earth::IrradianceScopes
7
7
 
8
8
  TABLE_STRUCTURE = <<-EOS
9
- CREATE TABLE global_horizontal_insolations
9
+ CREATE TABLE global_horizontal_irradiances
10
10
  (
11
11
  row_hash CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
12
12
  nw_lat FLOAT,
@@ -1,20 +1,20 @@
1
1
  begin
2
2
  require 'geo_ruby'
3
3
  rescue LoadError
4
- puts '[Earth] You need to install the geo_ruby gem to mine Insolation from scratch'
4
+ puts '[Earth] You need to install the geo_ruby gem to mine GlobalHorizontalIrradiance from scratch'
5
5
  exit
6
6
  end
7
7
  begin
8
8
  require 'dbf'
9
9
  rescue LoadError
10
- puts '[Earth] You need to install the dbf gem to mine Insolation from scratch'
10
+ puts '[Earth] You need to install the dbf gem to mine GlobalHorizontalIrradiance from scratch'
11
11
  exit
12
12
  end
13
13
  require 'unix_utils'
14
14
 
15
- GlobalHorizontalInsolation.class_eval do
15
+ GlobalHorizontalIrradiance.class_eval do
16
16
  data_miner do
17
- import 'Global Horizontal Insolation shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
17
+ import 'Global Horizontal Irradiance shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
18
18
  :url => 'http://www.nrel.gov/gis/cfm/data/GIS_Data_Technology_Specific/United_States/Solar/High_Resolution/Lower_48_GHI_High_Resolution.zip',
19
19
  :format => :shp do
20
20
  key :row_hash
@@ -1,12 +1,12 @@
1
1
  require 'earth/model'
2
- require 'earth/insolation_scopes'
2
+ require 'earth/irradiance_scopes'
3
3
 
4
- class PhotovoltaicInsolation < ActiveRecord::Base
4
+ class PhotovoltaicIrradiance < ActiveRecord::Base
5
5
  extend Earth::Model
6
- include Earth::InsolationScopes
6
+ include Earth::IrradianceScopes
7
7
 
8
8
  TABLE_STRUCTURE = <<-EOS
9
- CREATE TABLE photovoltaic_insolations
9
+ CREATE TABLE photovoltaic_irradiances
10
10
  (
11
11
  row_hash CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
12
12
  nw_lat FLOAT,
@@ -1,20 +1,20 @@
1
1
  begin
2
2
  require 'geo_ruby'
3
3
  rescue LoadError
4
- puts '[Earth] You need to install the geo_ruby gem to mine Insolation from scratch'
4
+ puts '[Earth] You need to install the geo_ruby gem to mine PhotovoltaicIrradiance from scratch'
5
5
  exit
6
6
  end
7
7
  begin
8
8
  require 'dbf'
9
9
  rescue LoadError
10
- puts '[Earth] You need to install the dbf gem to mine Insolation from scratch'
10
+ puts '[Earth] You need to install the dbf gem to mine PhotovoltaicIrradiance from scratch'
11
11
  exit
12
12
  end
13
13
  require 'unix_utils'
14
14
 
15
- PhotovoltaicInsolation.class_eval do
15
+ PhotovoltaicIrradiance.class_eval do
16
16
  data_miner do
17
- import 'Photovoltaic Insolation shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
17
+ import 'Photovoltaic Irradiance (tilt = latitude) shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
18
18
  :url => 'http://www.nrel.gov/gis/cfm/data/GIS_Data_Technology_Specific/United_States/Solar/High_Resolution/Lower_48_LATTILT_High_Resolution.zip',
19
19
  :format => :shp do
20
20
  key :row_hash
@@ -30,7 +30,8 @@ CREATE TABLE states
30
30
  population INTEGER,
31
31
  electricity_emission_factor FLOAT,
32
32
  electricity_emission_factor_units CHARACTER VARYING(255),
33
- electricity_loss_factor FLOAT
33
+ electricity_loss_factor FLOAT,
34
+ recs_grouping_id INTEGER
34
35
  );
35
36
 
36
37
  EOS
@@ -39,6 +40,7 @@ EOS
39
40
 
40
41
  has_many :zip_codes, :foreign_key => 'state_postal_abbreviation'
41
42
  has_many :climate_divisions, :foreign_key => 'state_postal_abbreviation'
43
+ has_many :recs_2009_responses, :foreign_key => 'recs_grouping_id', :primary_key => 'recs_grouping_id'
42
44
  belongs_to :census_division, :foreign_key => 'census_division_number'
43
45
  has_one :census_region, :through => :census_division
44
46
  has_one :electricity_mix, :foreign_key => 'state_postal_abbreviation'
@@ -27,6 +27,13 @@ State.class_eval do
27
27
  store 'petroleum_administration_for_defense_district_code', :field_name => 'Code'
28
28
  end
29
29
 
30
+ # RECS 2009 grouping
31
+ import 'RECS 2009 response grouping ids',
32
+ :url => "file:///#{Earth::DATA_DIR}/residence/recs_response_groupings.csv" do
33
+ key 'postal_abbreviation', :field_name => 'state_postal_abbreviation'
34
+ store 'recs_grouping_id'
35
+ end
36
+
30
37
  process 'ensure ZipCode and EgridSubregion are populated' do
31
38
  ZipCode.run_data_miner!
32
39
  EgridSubregion.run_data_miner!
@@ -37,20 +44,20 @@ State.class_eval do
37
44
  safe_find_each do |state|
38
45
  sub_pops = state.zip_codes.known_subregion.sum(:population, :group => :egrid_subregion)
39
46
 
40
- ef = sub_pops.inject(0) do |memo, (subregion, population)|
41
- memo += subregion.electricity_emission_factor * population
42
- memo
43
- end / sub_pops.values.sum
47
+ ef = sub_pops.sum do |subregion, population|
48
+ subregion.electricity_emission_factor * population
49
+ end
50
+ ef /= sub_pops.values.sum
44
51
 
45
52
  state.update_attributes!(
46
53
  :electricity_emission_factor => ef,
47
54
  :electricity_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour'
48
55
  )
49
56
 
50
- loss_factor = sub_pops.inject(0) do |memo, (subregion, population)|
51
- memo += subregion.egrid_region.loss_factor * population
52
- memo
53
- end / sub_pops.values.sum
57
+ loss_factor = sub_pops.sum do |subregion, population|
58
+ subregion.egrid_region.loss_factor * population
59
+ end
60
+ loss_factor /= sub_pops.values.sum
54
61
 
55
62
  state.update_attributes! :electricity_loss_factor => loss_factor
56
63
  end
@@ -26,7 +26,7 @@ ZipCode.class_eval do
26
26
 
27
27
  # 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
28
28
  import 'US Census 2010 zip code tabulation area populations',
29
- :url => 'http://www.census.gov/geo/www/2010census/zcta_rel/zcta_county_rel_10.txt' do
29
+ :url => 'http://www.census.gov/geo/maps-data/data/docs/rel/zcta_county_rel_10.txt' do
30
30
  key 'name', :field_name => 'ZCTA5', :sprintf => '%05d'
31
31
  store 'population', :field_name => 'ZPOP'
32
32
  end
@@ -0,0 +1,655 @@
1
+ require 'earth/model'
2
+
3
+ class Recs2009Response < ActiveRecord::Base
4
+ extend Earth::Model
5
+
6
+ TABLE_STRUCTURE = <<-EOS
7
+ CREATE TABLE recs_2009_responses
8
+ (
9
+ id INTEGER NOT NULL PRIMARY KEY,
10
+ weighting FLOAT,
11
+ census_region_number INTEGER,
12
+ census_division_number INTEGER,
13
+ recs_grouping_id INTEGER,
14
+ urban_rural CHARACTER VARYING(10),
15
+ metro_micro CHARACTER VARYING(10),
16
+ climate_region_id INTEGER,
17
+ climate_zone_id INTEGER,
18
+ hdd_2009 FLOAT,
19
+ hdd_2009_units CHARACTER VARYING(25),
20
+ hdd_avg FLOAT,
21
+ hdd_avg_units CHARACTER VARYING(25),
22
+ cdd_2009 FLOAT,
23
+ cdd_2009_units CHARACTER VARYING(25),
24
+ cdd_avg FLOAT,
25
+ cdd_avg_units CHARACTER VARYING(25),
26
+ building_type CHARACTER VARYING(25),
27
+ converted_house BOOLEAN,
28
+ condo_coop CHARACTER VARYING(10),
29
+ apartments INTEGER,
30
+ year_built INTEGER,
31
+ year_occupied INTEGER,
32
+ building_floors INTEGER,
33
+ levels INTEGER,
34
+ area FLOAT,
35
+ area_units CHARACTER VARYING(25),
36
+ rooms INTEGER,
37
+ bedrooms INTEGER,
38
+ bathrooms INTEGER,
39
+ half_baths INTEGER,
40
+ other_rooms INTEGER,
41
+ attic_rooms INTEGER,
42
+ basement_rooms INTEGER,
43
+ garage_type CHARACTER VARYING(10),
44
+ garage_size CHARACTER VARYING(10),
45
+ pool BOOLEAN,
46
+ shaded BOOLEAN,
47
+ slab BOOLEAN,
48
+ crawlspace BOOLEAN,
49
+ basement_type CHARACTER VARYING(10),
50
+ attic_type CHARACTER VARYING(10),
51
+ wall_material CHARACTER VARYING(35),
52
+ roof_material CHARACTER VARYING(25),
53
+ windows INTEGER,
54
+ window_panes INTEGER,
55
+ sliding_doors INTEGER,
56
+ insulation CHARACTER VARYING(10),
57
+ drafty CHARACTER VARYING(20),
58
+ high_ceiling BOOLEAN,
59
+ heating BOOLEAN,
60
+ heater CHARACTER VARYING(30),
61
+ heater_age INTEGER,
62
+ heater_fuel CHARACTER VARYING(15),
63
+ heater_shared BOOLEAN,
64
+ heater_thermostats INTEGER,
65
+ heater_portion FLOAT,
66
+ heater_2 CHARACTER VARYING(30),
67
+ heater_2_fuel CHARACTER VARYING(15),
68
+ heater_3 CHARACTER VARYING(30),
69
+ heater_3_fuel CHARACTER VARYING(15),
70
+ heater_4 CHARACTER VARYING(30),
71
+ heater_4_fuel CHARACTER VARYING(15),
72
+ heater_5 CHARACTER VARYING(30),
73
+ heater_5_fuel CHARACTER VARYING(15),
74
+ heater_6 CHARACTER VARYING(30),
75
+ heater_6_fuel CHARACTER VARYING(15),
76
+ cooling BOOLEAN,
77
+ cooler_central_age INTEGER,
78
+ cooler_central_shared BOOLEAN,
79
+ cooler_ac_units INTEGER,
80
+ cooler_ac_age INTEGER,
81
+ cooler_ac_energy_star BOOLEAN,
82
+ fans INTEGER,
83
+ water_heaters_storage INTEGER,
84
+ water_heaters_tankless INTEGER,
85
+ water_heater CHARACTER VARYING(15),
86
+ water_heater_fuel CHARACTER VARYING(15),
87
+ water_heater_age INTEGER,
88
+ water_heater_size CHARACTER VARYING(30),
89
+ water_heater_shared BOOLEAN,
90
+ water_heater_2 CHARACTER VARYING(15),
91
+ water_heater_2_fuel CHARACTER VARYING(15),
92
+ water_heater_2_age INTEGER,
93
+ water_heater_2_size CHARACTER VARYING(30),
94
+ pool_fuel CHARACTER VARYING(15),
95
+ hot_tub_fuel CHARACTER VARYING(15),
96
+ lights_high_use INTEGER,
97
+ lights_high_use_efficient INTEGER,
98
+ lights_med_use INTEGER,
99
+ lights_med_use_efficient INTEGER,
100
+ lights_low_use INTEGER,
101
+ lights_low_use_efficient INTEGER,
102
+ lights_outdoor INTEGER,
103
+ lights_outdoor_efficient INTEGER,
104
+ cooking_fuel CHARACTER VARYING(15),
105
+ stoves INTEGER,
106
+ stove_fuel CHARACTER VARYING(15),
107
+ cooktops INTEGER,
108
+ cooktop_fuel CHARACTER VARYING(15),
109
+ ovens INTEGER,
110
+ oven_fuel CHARACTER VARYING(15),
111
+ oven_type CHARACTER VARYING(25),
112
+ outdoor_grill_fuel CHARACTER VARYING(15),
113
+ indoor_grill_fuel CHARACTER VARYING(15),
114
+ toaster BOOLEAN,
115
+ coffee BOOLEAN,
116
+ fridges INTEGER,
117
+ fridge_type CHARACTER VARYING(35),
118
+ fridge_size CHARACTER VARYING(35),
119
+ fridge_defrost CHARACTER VARYING(10),
120
+ fridge_door_ice BOOLEAN,
121
+ fridge_age INTEGER,
122
+ fridge_energy_star BOOLEAN,
123
+ fridge_2_type CHARACTER VARYING(35),
124
+ fridge_2_size CHARACTER VARYING(35),
125
+ fridge_2_defrost CHARACTER VARYING(10),
126
+ fridge_2_age INTEGER,
127
+ fridge_2_energy_star BOOLEAN,
128
+ fridge_3_type CHARACTER VARYING(35),
129
+ fridge_3_size CHARACTER VARYING(35),
130
+ fridge_3_defrost CHARACTER VARYING(10),
131
+ fridge_3_age INTEGER,
132
+ fridge_3_energy_star BOOLEAN,
133
+ freezers INTEGER,
134
+ freezer_type CHARACTER VARYING(10),
135
+ freezer_size CHARACTER VARYING(35),
136
+ freezer_defrost CHARACTER VARYING(10),
137
+ freezer_age INTEGER,
138
+ freezer_2_type CHARACTER VARYING(10),
139
+ freezer_2_size CHARACTER VARYING(35),
140
+ freezer_2_defrost CHARACTER VARYING(10),
141
+ freezer_2_age INTEGER,
142
+ dishwasher_age INTEGER,
143
+ dishwasher_energy_star BOOLEAN,
144
+ washer_type CHARACTER VARYING(15),
145
+ washer_age INTEGER,
146
+ washer_energy_star BOOLEAN,
147
+ dryer_fuel CHARACTER VARYING(15),
148
+ dryer_age INTEGER,
149
+ tvs INTEGER,
150
+ tv_size CHARACTER VARYING(20),
151
+ tv_type CHARACTER VARYING(10),
152
+ tv_theater BOOLEAN,
153
+ tv_2_size CHARACTER VARYING(20),
154
+ tv_2_type CHARACTER VARYING(10),
155
+ tv_2_theater BOOLEAN,
156
+ tv_3_size CHARACTER VARYING(20),
157
+ tv_3_type CHARACTER VARYING(10),
158
+ tv_3_theater BOOLEAN,
159
+ computers INTEGER,
160
+ computer_type CHARACTER VARYING(10),
161
+ computer_monitor CHARACTER VARYING(10),
162
+ computer_2_type CHARACTER VARYING(10),
163
+ computer_2_monitor CHARACTER VARYING(10),
164
+ computer_3_type CHARACTER VARYING(10),
165
+ computer_3_monitor CHARACTER VARYING(10),
166
+ internet BOOLEAN,
167
+ printers INTEGER,
168
+ fax BOOLEAN,
169
+ copier BOOLEAN,
170
+ well_pump BOOLEAN,
171
+ engine_block_heater BOOLEAN,
172
+ aquarium BOOLEAN,
173
+ stereo BOOLEAN,
174
+ cordless_phone BOOLEAN,
175
+ answering_machine BOOLEAN,
176
+ tools INTEGER,
177
+ electronics INTEGER,
178
+ home_business BOOLEAN,
179
+ home_during_week BOOLEAN,
180
+ telecommuting INTEGER,
181
+ telecommuting_units CHARACTER VARYING(15),
182
+ unusual_activities BOOLEAN,
183
+ heat_area FLOAT,
184
+ heat_area_units CHARACTER VARYING(15),
185
+ heat_rooms INTEGER,
186
+ heat_attic_portion FLOAT,
187
+ heat_basement_portion FLOAT,
188
+ heat_garage BOOLEAN,
189
+ heat_temp_day FLOAT,
190
+ heat_temp_day_units CHARACTER VARYING(20),
191
+ heat_temp_night FLOAT,
192
+ heat_temp_night_units CHARACTER VARYING(20),
193
+ heat_temp_away FLOAT,
194
+ heat_temp_away_units CHARACTER VARYING(20),
195
+ heat_auto_adjust_day BOOLEAN,
196
+ heat_auto_adjust_night BOOLEAN,
197
+ cool_area FLOAT,
198
+ cool_area_units CHARACTER VARYING(15),
199
+ cool_rooms INTEGER,
200
+ cool_attic_portion FLOAT,
201
+ cool_basement_portion FLOAT,
202
+ cool_garage BOOLEAN,
203
+ cool_temp_day FLOAT,
204
+ cool_temp_day_units CHARACTER VARYING(20),
205
+ cool_temp_night FLOAT,
206
+ cool_temp_night_units CHARACTER VARYING(20),
207
+ cool_temp_away FLOAT,
208
+ cool_temp_away_units CHARACTER VARYING(20),
209
+ cool_auto_adjust_day BOOLEAN,
210
+ cool_auto_adjust_night BOOLEAN,
211
+ cooler_central_use CHARACTER VARYING(35),
212
+ cooler_ac_use CHARACTER VARYING(35),
213
+ fan_use CHARACTER VARYING(35),
214
+ humidifier_use INTEGER,
215
+ humidifier_use_units CHARACTER VARYING(10),
216
+ dehumidifier_use INTEGER,
217
+ dehumidifier_use_units CHARACTER VARYING(10),
218
+ oven_use INTEGER,
219
+ oven_use_units CHARACTER VARYING(15),
220
+ microwave_use CHARACTER VARYING(30),
221
+ microwave_defrost BOOLEAN,
222
+ cooking_frequency INTEGER,
223
+ cooking_frequency_units CHARACTER VARYING(15),
224
+ fridge_2_use INTEGER,
225
+ fridge_2_use_units CHARACTER VARYING(10),
226
+ fridge_3_use INTEGER,
227
+ fridge_3_use_units CHARACTER VARYING(10),
228
+ dishwasher_use INTEGER,
229
+ dishwasher_use_units CHARACTER VARYING(15),
230
+ washer_use INTEGER,
231
+ washer_use_units CHARACTER VARYING(15),
232
+ washer_temp_wash CHARACTER VARYING(10),
233
+ washer_temp_rinse CHARACTER VARYING(10),
234
+ dryer_use CHARACTER VARYING(25),
235
+ tv_weekday_use INTEGER,
236
+ tv_weekday_use_units CHARACTER VARYING(15),
237
+ tv_weekend_use INTEGER,
238
+ tv_weekend_use_units CHARACTER VARYING(15),
239
+ tv_2_weekday_use INTEGER,
240
+ tv_2_weekday_use_units CHARACTER VARYING(15),
241
+ tv_2_weekend_use INTEGER,
242
+ tv_2_weekend_use_units CHARACTER VARYING(15),
243
+ tv_3_weekday_use INTEGER,
244
+ tv_3_weekday_use_units CHARACTER VARYING(15),
245
+ tv_3_weekend_use INTEGER,
246
+ tv_3_weekend_use_units CHARACTER VARYING(15),
247
+ computer_use INTEGER,
248
+ computer_use_units CHARACTER VARYING(15),
249
+ computer_idle CHARACTER VARYING(15),
250
+ computer_2_use INTEGER,
251
+ computer_2_use_units CHARACTER VARYING(15),
252
+ computer_2_idle CHARACTER VARYING(15),
253
+ computer_3_use INTEGER,
254
+ computer_3_use_units CHARACTER VARYING(15),
255
+ computer_3_idle CHARACTER VARYING(15),
256
+ tool_charging CHARACTER VARYING(20),
257
+ tool_vampires CHARACTER VARYING(25),
258
+ electronic_charging CHARACTER VARYING(20),
259
+ electronic_vampires CHARACTER VARYING(25),
260
+ energy_audit BOOLEAN,
261
+ energy_audit_year INTEGER,
262
+ energy_audit_incent CHARACTER VARYING(35),
263
+ energy_audit_incent_year INTEGER,
264
+ insulation_added BOOLEAN,
265
+ insulation_added_year INTEGER,
266
+ insulation_incent CHARACTER VARYING(35),
267
+ insulation_incent_year INTEGER,
268
+ windows_replaced CHARACTER VARYING(10),
269
+ windows_incent CHARACTER VARYING(35),
270
+ windows_incent_year INTEGER,
271
+ caulking_added BOOLEAN,
272
+ caulking_added_year INTEGER,
273
+ caulking_incent CHARACTER VARYING(35),
274
+ caulking_incent_year INTEGER,
275
+ heater_maintained BOOLEAN,
276
+ heater_replaced BOOLEAN,
277
+ heater_incent CHARACTER VARYING(35),
278
+ heater_incent_year INTEGER,
279
+ cooler_central_maintained BOOLEAN,
280
+ cooler_central_replaced BOOLEAN,
281
+ cooler_central_incent CHARACTER VARYING(35),
282
+ cooler_central_incent_year INTEGER,
283
+ cooler_ac_replaced BOOLEAN,
284
+ cooler_ac_incent CHARACTER VARYING(35),
285
+ cooler_ac_incent_year INTEGER,
286
+ water_heater_blanket BOOLEAN,
287
+ water_heater_incent CHARACTER VARYING(35),
288
+ water_heater_incent_year INTEGER,
289
+ lights_replaced BOOLEAN,
290
+ lights_incent CHARACTER VARYING(35),
291
+ lights_incent_year INTEGER,
292
+ dishwasher_replaced BOOLEAN,
293
+ dishwasher_incent CHARACTER VARYING(35),
294
+ dishwasher_incent_year INTEGER,
295
+ fridge_replaced BOOLEAN,
296
+ fridge_incent CHARACTER VARYING(35),
297
+ fridge_incent_year INTEGER,
298
+ freezer_replaced BOOLEAN,
299
+ freezer_incent CHARACTER VARYING(35),
300
+ freezer_incent_year INTEGER,
301
+ washer_replaced BOOLEAN,
302
+ washer_incent CHARACTER VARYING(35),
303
+ washer_incent_year INTEGER,
304
+ renewable_energy CHARACTER VARYING(15),
305
+ own_rent CHARACTER VARYING(10),
306
+ sex CHARACTER VARYING(10),
307
+ employment CHARACTER VARYING(25),
308
+ live_with_spouse BOOLEAN,
309
+ race CHARACTER VARYING(35),
310
+ latino BOOLEAN,
311
+ education CHARACTER VARYING(30),
312
+ household_size INTEGER,
313
+ member_1_age INTEGER,
314
+ member_2_age INTEGER,
315
+ member_3_age INTEGER,
316
+ member_4_age INTEGER,
317
+ member_5_age INTEGER,
318
+ member_6_age INTEGER,
319
+ member_7_age INTEGER,
320
+ member_8_age INTEGER,
321
+ member_9_age INTEGER,
322
+ member_10_age INTEGER,
323
+ member_11_age INTEGER,
324
+ member_12_age INTEGER,
325
+ member_13_age INTEGER,
326
+ member_14_age INTEGER,
327
+ income INTEGER,
328
+ income_employment BOOLEAN,
329
+ income_retirement BOOLEAN,
330
+ income_ssi BOOLEAN,
331
+ income_welfare BOOLEAN,
332
+ income_investment BOOLEAN,
333
+ income_other BOOLEAN,
334
+ poverty_100 BOOLEAN,
335
+ poverty_150 BOOLEAN,
336
+ public_housing_authority BOOLEAN,
337
+ food_stamps BOOLEAN,
338
+ low_rent BOOLEAN,
339
+ pays_electricity_heat CHARACTER VARYING(30),
340
+ pays_electricity_water CHARACTER VARYING(30),
341
+ pays_electricity_cooking CHARACTER VARYING(30),
342
+ pays_electricity_cool CHARACTER VARYING(30),
343
+ pays_electricity_lighting CHARACTER VARYING(30),
344
+ pays_natural_gas_heat CHARACTER VARYING(30),
345
+ pays_natural_gas_water CHARACTER VARYING(30),
346
+ pays_natural_gas_cooking CHARACTER VARYING(30),
347
+ pays_natural_gas_other CHARACTER VARYING(30),
348
+ pays_fuel_oil CHARACTER VARYING(30),
349
+ pays_propane CHARACTER VARYING(30),
350
+ electricity_heat BOOLEAN,
351
+ electricity_heat_2 BOOLEAN,
352
+ electricity_cool BOOLEAN,
353
+ electricity_water BOOLEAN,
354
+ electricity_cooking BOOLEAN,
355
+ electricity_other BOOLEAN,
356
+ natural_gas_heat BOOLEAN,
357
+ natural_gas_heat_2 BOOLEAN,
358
+ natural_gas_water BOOLEAN,
359
+ natural_gas_cooking BOOLEAN,
360
+ natural_gas_other BOOLEAN,
361
+ propane_heat BOOLEAN,
362
+ propane_heat_2 BOOLEAN,
363
+ propane_water BOOLEAN,
364
+ propane_cooking BOOLEAN,
365
+ propane_other BOOLEAN,
366
+ fuel_oil_heat BOOLEAN,
367
+ fuel_oil_heat_2 BOOLEAN,
368
+ fuel_oil_water BOOLEAN,
369
+ fuel_oil_other BOOLEAN,
370
+ kerosene_heat BOOLEAN,
371
+ kerosene_heat_2 BOOLEAN,
372
+ kerosene_water BOOLEAN,
373
+ kerosene_other BOOLEAN,
374
+ wood_heat BOOLEAN,
375
+ wood_heat_2 BOOLEAN,
376
+ wood_water BOOLEAN,
377
+ wood_other BOOLEAN,
378
+ solar_heat BOOLEAN,
379
+ solar_heat_2 BOOLEAN,
380
+ solar_water BOOLEAN,
381
+ solar_other BOOLEAN,
382
+ other_heat BOOLEAN,
383
+ other_heat_2 BOOLEAN,
384
+ other_water BOOLEAN,
385
+ other_cooking BOOLEAN,
386
+ energy FLOAT,
387
+ energy_units CHARACTER VARYING(10),
388
+ energy_cost INTEGER,
389
+ energy_cost_units CHARACTER VARYING(10),
390
+ electricity FLOAT,
391
+ electricity_units CHARACTER VARYING(10),
392
+ electricity_cost INTEGER,
393
+ electricity_cost_units CHARACTER VARYING(10),
394
+ natural_gas FLOAT,
395
+ natural_gas_units CHARACTER VARYING(10),
396
+ natural_gas_cost INTEGER,
397
+ natural_gas_cost_units CHARACTER VARYING(10),
398
+ propane FLOAT,
399
+ propane_units CHARACTER VARYING(10),
400
+ propane_cost INTEGER,
401
+ propane_cost_units CHARACTER VARYING(10),
402
+ fuel_oil FLOAT,
403
+ fuel_oil_units CHARACTER VARYING(10),
404
+ fuel_oil_cost INTEGER,
405
+ fuel_oil_cost_units CHARACTER VARYING(10),
406
+ kerosene FLOAT,
407
+ kerosene_units CHARACTER VARYING(10),
408
+ kerosene_cost INTEGER,
409
+ kerosene_cost_units CHARACTER VARYING(10),
410
+ wood FLOAT,
411
+ wood_units CHARACTER VARYING(10)
412
+ );
413
+ EOS
414
+
415
+ self.table_name = "recs_2009_responses"
416
+ self.primary_key = "id"
417
+
418
+ has_many :states, :foreign_key => :recs_grouping_id, :primary_key => :recs_grouping_id
419
+
420
+ warn_if_nulls_except(
421
+ :metro_micro,
422
+ :converted_house,
423
+ :condo_coop,
424
+ :apartments,
425
+ :building_floors,
426
+ :garage_type,
427
+ :garage_size,
428
+ :basement_type,
429
+ :attic_type,
430
+ :roof_material,
431
+ :heater,
432
+ :heater_age,
433
+ :heater_fuel,
434
+ :heater_shared,
435
+ :heater_portion,
436
+ :heater_2,
437
+ :heater_2_fuel,
438
+ :heater_3,
439
+ :heater_3_fuel,
440
+ :heater_4,
441
+ :heater_4_fuel,
442
+ :heater_5,
443
+ :heater_5_fuel,
444
+ :heater_6,
445
+ :heater_6_fuel,
446
+ :cooler_central_age,
447
+ :cooler_central_shared,
448
+ :cooler_ac_age,
449
+ :cooler_ac_energy_star,
450
+ :water_heater,
451
+ :water_heater_fuel,
452
+ :water_heater_age,
453
+ :water_heater_size,
454
+ :water_heater_shared,
455
+ :water_heater_2,
456
+ :water_heater_2_fuel,
457
+ :water_heater_2_age,
458
+ :water_heater_2_size,
459
+ :pool_fuel,
460
+ :hot_tub_fuel,
461
+ :cooking_fuel,
462
+ :stove_fuel,
463
+ :cooktop_fuel,
464
+ :oven_fuel,
465
+ :oven_type,
466
+ :outdoor_grill_fuel,
467
+ :indoor_grill_fuel,
468
+ :fridge_type,
469
+ :fridge_size,
470
+ :fridge_defrost,
471
+ :fridge_door_ice,
472
+ :fridge_age,
473
+ :fridge_energy_star,
474
+ :fridge_2_type,
475
+ :fridge_2_size,
476
+ :fridge_2_defrost,
477
+ :fridge_2_age,
478
+ :fridge_2_energy_star,
479
+ :fridge_3_type,
480
+ :fridge_3_size,
481
+ :fridge_3_defrost,
482
+ :fridge_3_age,
483
+ :fridge_3_energy_star,
484
+ :freezer_type,
485
+ :freezer_size,
486
+ :freezer_defrost,
487
+ :freezer_age,
488
+ :freezer_2_type,
489
+ :freezer_2_size,
490
+ :freezer_2_defrost,
491
+ :freezer_2_age,
492
+ :dishwasher_age,
493
+ :dishwasher_energy_star,
494
+ :washer_type,
495
+ :washer_age,
496
+ :washer_energy_star,
497
+ :dryer_fuel,
498
+ :dryer_age,
499
+ :tv_size,
500
+ :tv_type,
501
+ :tv_theater,
502
+ :tv_2_size,
503
+ :tv_2_type,
504
+ :tv_2_theater,
505
+ :tv_3_size,
506
+ :tv_3_type,
507
+ :tv_3_theater,
508
+ :computer_type,
509
+ :computer_monitor,
510
+ :computer_2_type,
511
+ :computer_2_monitor,
512
+ :computer_3_type,
513
+ :computer_3_monitor,
514
+ :well_pump,
515
+ :engine_block_heater,
516
+ :heat_attic_portion,
517
+ :heat_basement_portion,
518
+ :heat_garage,
519
+ :heat_temp_day,
520
+ :heat_temp_day_units,
521
+ :heat_temp_night,
522
+ :heat_temp_night_units,
523
+ :heat_temp_away,
524
+ :heat_temp_away_units,
525
+ :heat_auto_adjust_day,
526
+ :heat_auto_adjust_night,
527
+ :cool_attic_portion,
528
+ :cool_basement_portion,
529
+ :cool_garage,
530
+ :cool_temp_day,
531
+ :cool_temp_day_units,
532
+ :cool_temp_night,
533
+ :cool_temp_night_units,
534
+ :cool_temp_away,
535
+ :cool_temp_away_units,
536
+ :cool_auto_adjust_day,
537
+ :cool_auto_adjust_night,
538
+ :cooler_central_use,
539
+ :cooler_ac_use,
540
+ :fan_use,
541
+ :humidifier_use,
542
+ :humidifier_use_units,
543
+ :dehumidifier_use,
544
+ :dehumidifier_use_units,
545
+ :oven_use,
546
+ :oven_use_units,
547
+ :microwave_use,
548
+ :microwave_defrost,
549
+ :fridge_2_use,
550
+ :fridge_2_use_units,
551
+ :fridge_3_use,
552
+ :fridge_3_use_units,
553
+ :dishwasher_use,
554
+ :dishwasher_use_units,
555
+ :washer_use,
556
+ :washer_use_units,
557
+ :washer_temp_wash,
558
+ :washer_temp_rinse,
559
+ :dryer_use,
560
+ :tv_weekday_use,
561
+ :tv_weekday_use_units,
562
+ :tv_weekend_use,
563
+ :tv_weekend_use_units,
564
+ :tv_2_weekday_use,
565
+ :tv_2_weekday_use_units,
566
+ :tv_2_weekend_use,
567
+ :tv_2_weekend_use_units,
568
+ :tv_3_weekday_use,
569
+ :tv_3_weekday_use_units,
570
+ :tv_3_weekend_use,
571
+ :tv_3_weekend_use_units,
572
+ :computer_use,
573
+ :computer_use_units,
574
+ :computer_idle,
575
+ :computer_2_use,
576
+ :computer_2_use_units,
577
+ :computer_2_idle,
578
+ :computer_3_use,
579
+ :computer_3_use_units,
580
+ :computer_3_idle,
581
+ :tool_charging,
582
+ :tool_vampires,
583
+ :electronic_charging,
584
+ :electronic_vampires,
585
+ :energy_audit_year,
586
+ :energy_audit_incent,
587
+ :energy_audit_incent_year,
588
+ :insulation_added_year,
589
+ :insulation_incent,
590
+ :insulation_incent_year,
591
+ :caulking_added_year,
592
+ :caulking_incent,
593
+ :caulking_incent_year,
594
+ :windows_replaced,
595
+ :windows_incent,
596
+ :windows_incent_year,
597
+ :heater_maintained,
598
+ :heater_replaced,
599
+ :heater_incent,
600
+ :heater_incent_year,
601
+ :cooler_central_maintained,
602
+ :cooler_central_replaced,
603
+ :cooler_central_incent,
604
+ :cooler_central_incent_year,
605
+ :cooler_ac_replaced,
606
+ :cooler_ac_incent,
607
+ :cooler_ac_incent_year,
608
+ :water_heater_blanket,
609
+ :water_heater_incent,
610
+ :water_heater_incent_year,
611
+ :lights_replaced,
612
+ :lights_incent,
613
+ :lights_incent_year,
614
+ :dishwasher_replaced,
615
+ :dishwasher_incent,
616
+ :dishwasher_incent_year,
617
+ :fridge_replaced,
618
+ :fridge_incent,
619
+ :fridge_incent_year,
620
+ :freezer_replaced,
621
+ :freezer_incent,
622
+ :freezer_incent_year,
623
+ :washer_replaced,
624
+ :washer_incent,
625
+ :washer_incent_year,
626
+ :renewable_energy,
627
+ :own_rent,
628
+ :member_2_age,
629
+ :member_3_age,
630
+ :member_4_age,
631
+ :member_5_age,
632
+ :member_6_age,
633
+ :member_7_age,
634
+ :member_8_age,
635
+ :member_9_age,
636
+ :member_10_age,
637
+ :member_11_age,
638
+ :member_12_age,
639
+ :member_13_age,
640
+ :member_14_age,
641
+ :public_housing_authority,
642
+ :low_rent,
643
+ :pays_electricity_heat,
644
+ :pays_electricity_water,
645
+ :pays_electricity_cooking,
646
+ :pays_electricity_cool,
647
+ :pays_electricity_lighting,
648
+ :pays_natural_gas_heat,
649
+ :pays_natural_gas_water,
650
+ :pays_natural_gas_cooking,
651
+ :pays_natural_gas_other,
652
+ :pays_fuel_oil,
653
+ :pays_propane
654
+ )
655
+ end