Skip to content

Commit

Permalink
update example semcog
Browse files Browse the repository at this point in the history
  • Loading branch information
albabnoor committed Jul 9, 2021
1 parent 181243b commit ae7cf47
Show file tree
Hide file tree
Showing 87 changed files with 3,089 additions and 3,165 deletions.
2 changes: 1 addition & 1 deletion activitysim/examples/example_semcog/change_log.txt
@@ -1,4 +1,4 @@
###
###
##### extensions
##### simulation.py
###
Expand Down
Expand Up @@ -2,7 +2,7 @@ Description,Target,Expression
#,, annotate households table after import
,_PERSON_COUNT,"lambda query, persons, households: persons.query(query).groupby('household_id').size().reindex(households.index).fillna(0).astype(np.int8)"
#,,FIXME households.income can be negative - so we clip?
income,income,households.HINCP.fillna(0)
income,income,households.hincp.fillna(0)
income_in_thousands,income_in_thousands,(income / 1000).clip(lower=0)
income_segment,income_segment,"pd.cut(income_in_thousands, bins=[-np.inf, 30, 60, 100, np.inf], labels=[1, 2, 3, 4]).astype(int)"
#,,
Expand All @@ -14,7 +14,7 @@ median_value_of_time,median_value_of_time,"income_segment.map({k: v for k, v in
hh_value_of_time,hh_value_of_time,"rng.lognormal_for_df(df, mu=np.log(median_value_of_time * _MU), sigma=_SIGMA).clip(_MIN_VOT, _MAX_VOT)"
#,,
#num_workers was renamed in import,,
,num_workers,"_PERSON_COUNT('(ESR==1)|(ESR==2)|(ESR==4)|(ESR==5)', persons, households)"
,num_workers,"_PERSON_COUNT('(esr==1)|(esr==2)|(esr==4)|(esr==5)', persons, households)"
number of non_workers,num_non_workers,households.hhsize - num_workers
#,,
#,,we assume that everyone 16 and older is a potential driver
Expand All @@ -27,10 +27,11 @@ num_children_6_to_12,num_children_6_to_12,"_PERSON_COUNT('6 <= age <= 12', perso
num_children_16_to_17,num_children_16_to_17,"_PERSON_COUNT('16 <= age <= 17', persons, households)"
num_college_age,num_college_age,"_PERSON_COUNT('18 <= age <= 24', persons, households)"
num_young_adults,num_young_adults,"_PERSON_COUNT('25 <= age <= 34', persons, households)"
non_family,non_family,households.HHT.isin(HHT_NONFAMILY)
family,family,households.HHT.isin(HHT_FAMILY)
non_family,non_family,households.hht.isin(HHT_NONFAMILY)
family,family,households.hht.isin(HHT_FAMILY)
home_is_urban,home_is_urban,"reindex(land_use.AreaType, households.home_zone_id) < setting('urban_threshold')"
home_is_rural,home_is_rural,"reindex(land_use.AreaType, households.home_zone_id) > setting('rural_threshold')"
home_in_detroit,home_in_detroit,"reindex(land_use.COUNTY, households.home_zone_id) == 1"
#,, default for work and school location logsums before auto_ownership model is run
,auto_ownership,households.auto_ownership
TAZ column to match settings file,TAZ,households.home_zone_id
Expand Down
14 changes: 8 additions & 6 deletions activitysim/examples/example_semcog/configs/annotate_persons.csv
Expand Up @@ -7,11 +7,11 @@ age_16_p,age_16_p,persons.age >= 16
adult,adult,persons.age >= 18
male,male,persons.sex == 1
female,female,persons.sex == 2
,esr,persons.ESR.fillna(0)
,wkhp,persons.WKHP.fillna(0)
,wkw,persons.WKW.fillna(0)
,schg,persons.SCHG.fillna(0)
,mil,persons.MIL.fillna(0)
,esr,persons.esr.fillna(0)
,wkhp,persons.wkhp.fillna(0)
,wkw,persons.wkw.fillna(0)
,schg,persons.schg.fillna(0)
,mil,persons.mil.fillna(0)
employment status type,pemploy,np.zeros(len(persons))
,pemploy,"np.where(persons.age < 16, PEMPLOY_CHILD, PEMPLOY_PART)"
,pemploy,"np.where((persons['age'] >= 16) & ((esr == 3) | (esr == 6)), PEMPLOY_NOT, pemploy)"
Expand Down Expand Up @@ -60,8 +60,10 @@ is_worker,is_worker,"np.where((pemploy == PEMPLOY_FULL) |( pemploy == PEMPLOY_PA
home_zone_id,home_zone_id,"reindex(households.home_zone_id, persons.household_id)"
hh_child,hh_child,"reindex(households.children, persons.household_id)"
person number,PNUM,persons.member_id
income,income,"reindex(households.HINCP, persons.household_id)"
income,income,"reindex(households.hincp, persons.household_id)"
income_in_thousands,income_in_thousands,(income / 1000).clip(lower=0)
income_segment,income_segment,"pd.cut(income_in_thousands, bins=[-np.inf, 30, 60, 100, np.inf], labels=[1, 2, 3, 4]).astype(int)"
is_fulltime_worker,is_fulltime_worker,"((age_16_p) & (wkhp >=35) & (wkw>=1) & (wkw<=4) & (~esr.isin([3,6])))"
is_parttime_worker,is_parttime_worker,"((age_16_p) & (~esr.isin([3,6])) & (is_fulltime_worker == False))"
recoding existing as legacy,naicsp_recode,"persons['naicsp'].replace('-9', '0000')"
coding industry according to pums,industry_naics,naicsp_recode.str[0].astype(int)*10
Expand Up @@ -3,7 +3,7 @@ Description,Target,Expression
#,, adults get full hh_value_of_time and children get 60%
,_hh_vot,"reindex(households.hh_value_of_time, persons.household_id)"
,value_of_time,"_hh_vot.where(persons.age>=18, _hh_vot * 0.667)"
,_hh_income,"reindex(households.HINCP, persons.household_id)"
,_hh_income,"reindex(households.hincp, persons.household_id)"
,_num_adults,"reindex(households.num_adults, persons.household_id)"
,_num_predrive_child,"reindex(households.num_predrive_child, persons.household_id)"
,_num_nonworker_adults,"reindex(households.num_nonworker_adults, persons.household_id)"
Expand Down
Expand Up @@ -4,4 +4,4 @@ travel_active,travel_active,persons.cdap_activity != CDAP_ACTIVITY_HOME
under16_not_at_school,under16_not_at_school,"persons.ptype.isin([PTYPE_SCHOOL, PTYPE_PRESCHOOL]) & persons.cdap_activity.isin(['N', 'H'])"
has_preschool_kid_at_home,has_preschool_kid_at_home,"other_than(persons.household_id, (persons.ptype == PTYPE_PRESCHOOL) & (persons.cdap_activity == 'H'))"
has_school_kid_at_home,has_school_kid_at_home,"other_than(persons.household_id, (persons.ptype == PTYPE_SCHOOL) & (persons.cdap_activity == 'H'))"
,cdap_activity,"np.where((persons.work_from_home) & (persons.cdap_activity=='M'), np.random.choice(['N','H']), persons.cdap_activity)"
#,cdap_activity,"np.where((persons.work_from_home) & (persons.cdap_activity=='M'), np.random.choice(['N','H']), persons.cdap_activity)"
Expand Up @@ -30,3 +30,6 @@ work_zone_area_type,work_zone_area_type,"reindex(land_use.AreaType, persons.work
,work_auto_savings,"np.where(persons.is_worker, _min_work_walk_transit - roundtrip_auto_time_to_work, 0)"
#,,auto savings over walk or transit capped at 120 and normalized to unity
,work_auto_savings_ratio,"(work_auto_savings / 120.0).clip(-1.0, 1.0)"
,umich_student,df.school_zone_id.isin(land_use[land_use.University_Name=='University of Michigan'].index.values)
,umich_worker,df.workplace_zone_id.isin(land_use[land_use.University_Name=='University of Michigan'].index.values)
#,umich_affiliate,"df.get(umich_worker, default=False) | df.get(umich_student, default=False)"
Expand Up @@ -4,8 +4,6 @@ util_dist,util_dist,@_DIST,coef_dist_atwork
util_dist_squared,util_dist_squared,"@(_DIST).clip(0,20)**2",coef_dist_squared_atwork
util_dist_cubed,util_dist_cubed,"@(_DIST).clip(0,20)**3",coef_dist_cubed_atwork
util_dist_logged,util_dist_logged,@(_DIST).apply(np.log1p),coef_dist_logged_atwork
# util_size_variable_atwork,Size variable atwork,@df['atwork'].apply(np.log1p),coef_size_variable_atwork
# util_no_attractions_atwork_size_variable_is_0,"No attractions, atwork size variable is 0",atwork==0,coef_no_attractions_atwork_size_variable_is_0
util_size_variable_atwork,Size variable atwork,@df['size_term'].apply(np.log1p),coef_size_variable_atwork
util_no_attractions_atwork_size_variable_is_0,"No attractions, atwork size variable is 0",size_term==0,coef_no_attractions_atwork_size_variable_is_0
util_mode_choice_logsum,Mode choice logsum,mode_choice_logsum,coef_mode_choice_logsum_atwork
Expand Down
Expand Up @@ -4,7 +4,5 @@ util_dist,util_dist,@_DIST,coef_dist_atwork
util_dist_squared,util_dist_squared,"@(_DIST).clip(0,20)**2",coef_dist_squared_atwork
util_dist_cubed,util_dist_cubed,"@(_DIST).clip(0,20)**3",coef_dist_cubed_atwork
util_dist_logged,util_dist_logged,@(_DIST).apply(np.log1p),coef_dist_logged_atwork
# util_size_variable_atwork,Size variable atwork,@df['atwork'].apply(np.log1p),coef_size_variable_atwork
# util_no_attractions_atwork_size_variable_is_0,"No attractions, atwork size variable is 0",atwork==0,coef_no_attractions_atwork_size_variable_is_0
util_size_variable_atwork,Size variable atwork,@df['size_term'].apply(np.log1p),coef_size_variable_atwork
util_no_attractions_atwork_size_variable_is_0,"No attractions, atwork size variable is 0",size_term==0,coef_no_attractions_atwork_size_variable_is_0
34 changes: 15 additions & 19 deletions activitysim/examples/example_semcog/configs/auto_ownership.csv
@@ -1,25 +1,21 @@
Label,Description,Expression,cars0,cars1,cars2,cars3,cars4
util_drivers_2,2 Adults (age 16+),num_drivers==2,,coef_cars1_drivers_2,coef_cars2_drivers_2,coef_cars3_drivers_2,coef_cars4_drivers_2
util_drivers_3,3 Adults (age 16+),num_drivers==3,,coef_cars1_drivers_3,coef_cars2_drivers_3,coef_cars3_drivers_3,coef_cars4_drivers_3
util_drivers_4_up,4+ Adults (age 16+),num_drivers>3,,coef_cars1_drivers_4_up,coef_cars2_drivers_4_up,coef_cars3_drivers_4_up,coef_cars4_drivers_4_up
util_drivers_1,1 Adult (age 16+),num_drivers==1,,coef_cars1_drivers_1,coef_cars2_drivers_1,coef_cars3_drivers_1,coef_cars4_drivers_1
util_drivers_2,2 Adult (age 16+),num_drivers==2,,coef_cars1_drivers_2,coef_cars2_drivers_2,coef_cars3_drivers_2,coef_cars4_drivers_2
util_drivers_3_up,3+ Adults (age 16+),num_drivers>=3,,coef_cars1_drivers_3_up,coef_cars2_drivers_3_up,coef_cars3_drivers_3_up,coef_cars4_drivers_3_up
util_persons_16_17,Persons age 16-17,num_children_16_to_17,,coef_cars1_persons_16_17,coef_cars2_persons_16_17,coef_cars34_persons_16_17,coef_cars34_persons_16_17
util_persons_18_24,Persons age 18-24,num_college_age,,coef_cars1_persons_18_24,coef_cars2_persons_18_24,coef_cars34_persons_18_24,coef_cars34_persons_18_24
util_persons_25_34,Persons age 35-34,num_young_adults,,coef_cars1_persons_25_34,coef_cars2_persons_25_34,coef_cars34_persons_25_34,coef_cars34_persons_25_34
util_presence_children_0_4,Presence of children age 0-4,num_young_children>0,,coef_cars1_presence_children_0_4,coef_cars234_presence_children_0_4,coef_cars234_presence_children_0_4,coef_cars234_presence_children_0_4
util_presence_children_0_4,Presence of children age 0-4,num_young_children>0,,coef_cars1_presence_children_0_4,coef_cars2_presence_children_0_4,coef_cars34_presence_children_0_4,coef_cars34_presence_children_0_4
util_presence_children_5_17,Presence of children age 5-17,(num_children_5_to_15+num_children_16_to_17)>0,,coef_cars1_presence_children_5_17,coef_cars2_presence_children_5_17,coef_cars34_presence_children_5_17,coef_cars34_presence_children_5_17
util_num_workers_clip_3,"Number of workers, capped at 3",@df.num_workers.clip(upper=3),,coef_cars1_num_workers_clip_3,coef_cars2_num_workers_clip_3,coef_cars3_num_workers_clip_3,coef_cars4_num_workers_clip_3
util_hh_income_0_30k,"Piecewise Linear household income, $0-30k","@df.income_in_thousands.clip(0, 30)",,coef_cars1_hh_income_0_30k,coef_cars2_hh_income_0_30k,coef_cars3_hh_income_0_30k,coef_cars4_hh_income_0_30k
util_hh_income_30_75k,"Piecewise Linear household income, $30-75k","@(df.income_in_thousands-30).clip(0, 45)",,coef_cars1_hh_income_30_up,coef_cars2_hh_income_30_up,coef_cars3_hh_income_30_up,coef_cars4_hh_income_30_up
util_hh_income_75k_up,"Piecewise Linear household income, $75k+, capped at $125k","@(df.income_in_thousands-75).clip(0, 50)",,coef_cars1_hh_income_30_up,coef_cars2_hh_income_30_up,coef_cars3_hh_income_30_up,coef_cars4_hh_income_30_up
util_density_0_10_no_workers,"Density index up to 10, if 0 workers","@(df.num_workers==0)*df.density_index.clip(0, 10)",,coef_cars1_density_0_10_no_workers,coef_cars2_density_0_10_no_workers,coef_cars34_density_0_10_no_workers,coef_cars34_density_0_10_no_workers
util_density_10_up_no_workers,"Density index in excess of 10, if 0 workers",@(df.num_workers==0)*(df.density_index-10).clip(0),,coef_cars1_density_10_up_no_workers,coef_cars2_density_10_up_no_workers,coef_cars34_density_10_up_no_workers,coef_cars34_density_10_up_no_workers
util_density_0_10_workers,"Density index up to 10, if 1+ workers","@(df.num_workers>0)*df.density_index.clip(0, 10)",,coef_cars1_density_0_10_no_workers,coef_cars2_density_0_10_no_workers,coef_cars34_density_0_10_no_workers,coef_cars34_density_0_10_no_workers
util_density_10_up_workers,"Density index in excess of 10, if 1+ workers",@(df.num_workers>0)*(df.density_index-10).clip(0),,coef_cars1_density_10_up_workers,coef_cars2_density_10_up_no_workers,coef_cars34_density_10_up_no_workers,coef_cars34_density_10_up_no_workers
util_asc,Constants,1,,coef_cars1_asc,coef_cars2_asc,coef_cars3_asc,coef_cars4_asc
util_retail_auto_no_workers,"Retail accessibility (0.66*PK + 0.34*OP) by auto, if 0 workers",(num_workers==0)*(0.66*auPkRetail+0.34*auOpRetail),,coef_retail_auto_no_workers,coef_retail_auto_no_workers,coef_retail_auto_no_workers,coef_retail_auto_no_workers
util_retail_auto_workers,"Retail accessibility (0.66*PK + 0.34*OP) by auto, if 1+ workers",(num_workers>0)*(0.66*auPkRetail+0.34*auOpRetail),,coef_retail_auto_workers,coef_retail_auto_workers,coef_retail_auto_workers,coef_retail_auto_workers
util_retail_transit_no_workers,"Retail accessibility (0.66*PK + 0.34*OP) by transit, if 0 workers",(num_workers==0)*(0.66*trPkRetail+0.34*trOpRetail),,coef_retail_transit_no_workers,coef_retail_transit_no_workers,coef_retail_transit_no_workers,coef_retail_transit_no_workers
util_retail_transit_workers,"Retail accessibility (0.66*PK + 0.34*OP) by transit, if 1+ workers",(num_workers>0)*(0.66*trPkRetail+0.34*trOpRetail),,coef_retail_transit_workers,coef_retail_transit_workers,coef_retail_transit_workers,coef_retail_transit_workers
util_retail_non_motor_no_workers,"Retail accessibility by non-motorized, if 0 workers",(num_workers==0)*nmRetail,,coef_retail_non_motor,coef_retail_non_motor,coef_retail_non_motor,coef_retail_non_motor
util_retail_non_motor_workers,"Retail accessibility by non-motorized, if 1+ workers",(num_workers>0)*nmRetail,,coef_retail_non_motor,coef_retail_non_motor,coef_retail_non_motor,coef_retail_non_motor
util_num_workers_clip_3,Number of workers capped at 3,@df.num_workers.clip(upper=3),,coef_cars1_num_workers_clip_3,coef_cars2_num_workers_clip_3,coef_cars3_num_workers_clip_3,coef_cars4_num_workers_clip_3
util_hh_income_0_15k,Piecewise Linear household income $0-15k,income_in_thousands < 15,,coef_cars1_hh_income_0_15k,coef_cars2_hh_income_0_15k,coef_cars3_hh_income_0_15k,coef_cars4_hh_income_0_15k
util_hh_income_15_35k,Piecewise Linear household income $15-35k,(income_in_thousands >= 15) & (income_in_thousands<35),,coef_cars1_hh_income_15_35k,coef_cars2_hh_income_15_35k,coef_cars3_hh_income_15_35k,coef_cars4_hh_income_15_35k
util_hh_income_35_50k,Piecewise Linear household income $35-50k,(income_in_thousands >= 35) & (income_in_thousands<50),,coef_cars1_hh_income_35_50k,coef_cars2_hh_income_35_50k,coef_cars3_hh_income_35_50k,coef_cars4_hh_income_35_50k
util_hh_income_50_75k,Piecewise Linear household income $50-75k,(income_in_thousands >= 50) & (income_in_thousands<75),,coef_cars1_hh_income_50_75k,coef_cars2_hh_income_50_75k,coef_cars3_hh_income_50_75k,coef_cars4_hh_income_50_75k
util_density,Density index,@df.density_index,,coef_cars1_density,coef_cars2_density,coef_cars3_density,coef_cars4_density
util_retail_transit,Retail accessibility (0.66*PK + 0.34*OP) by transit,(0.66*trPkRetail+0.34*trOpRetail),,coef_cars1_retail_transit,coef_cars2_retail_transit,coef_cars3_retail_transit,coef_cars4_retail_transit
util_retail_non_motor,Retail accessibility by non-motorized,nmRetail,,coef_cars1_retail_non_motor,coef_cars2_retail_non_motor,coef_cars3_retail_non_motor,coef_cars4_retail_non_motor
util_auto_time_saving_per_worker,Auto time savings per worker to work,"@np.where(df.num_workers > 0, df.hh_work_auto_savings_ratio / df.num_workers, 0)",,coef_cars1_auto_time_saving_per_worker,coef_cars2_auto_time_saving_per_worker,coef_cars3_auto_time_saving_per_worker,coef_cars4_auto_time_saving_per_worker
util_univ_students_GQ,University Students living in GQ households,(num_college_age > 0) & (type == 3),,coef_cars1_univ_GQ,coef_unavailable,coef_unavailable,coef_unavailable
util_constants,Alternative-specific constants,1,,coef_cars1,coef_cars2,coef_cars3,coef_cars4
util_detroit,district specific constant,home_in_detroit,coef_detroit,0,0,,0

0 comments on commit ae7cf47

Please sign in to comment.