#!/usr/bin/python # Summarize.py # 2005 FEB 13 . ccr # Summarizes NHTSA FARS databases on standard input and outputs # selected variables in "comma separated value" (csv) format on # standard output. Takes one parameter: Year. # 2005 MAR 14 . ccr . Select by state. # 2005 MAR 16 . ccr . Discriminate by state and helmet enforcement. from __future__ import division from math import * import sys import Describe ZERO=0 SPACE=' ' NULL='' NUL='\x00' NA=-1 FLD_REQ=[ 'CASE STATE', 'BODY TYPE', 'MODEL YEAR', 'VINA DECODES BODY TYPE', 'VINA DECODES MOTORCYCLE DISPLACEMENT', 'PERSON TYPE', 'AGE', 'SEX', 'INJURY SEVERITY', 'LICENSE STATE', 'ROADWAY FUNCTION CLASS', 'MANUAL RESTRAINT', 'RESTRAINT SYSTEM-USE', ] MOTORCYCLE_BODY_TYPES= ['EN','MK','MM','MR','MS','MX','RS','RT','T ','T',] AUTO_BODY_TYPES= ['2D','2F','2H','2L','2P','2T','3D','3P','4D','4H', '4L','4P','4T','CP','CV','HB','HT','LB','NB','RD', 'SD','SW',] SUV_BODY_TYPES= ['2W','4W','S2','UT','LL',] LIGHT_TRUCK_BODY_TYPES=['CB','CC','CG','CH','CL','CW','CY','EC','ES','EV', 'EW','FB','FC','IC','IE','PC','PK','PN','PS','SN', 'SV','TB','VN','VW','YY',] UNKNOWN_BODY_TYPE= ['99',' ',NULL,] class cCrash(object): def __init__(self,aRec,aVehicleList): self.fRec=aRec self.fVehicleList=aVehicleList return def GetState(self): return self.fRec['CASE STATE'] def GetRFC(self): return self.fRec['ROADWAY FUNCTION CLASS'] def IsMultiVehicle(self): return len(self.fVehicleList)>1 def IsMotorcycleRelated(self): for __VehicleRec in self.fVehicleList.itervalues(): __Vehicle=cVehicle(__VehicleRec) if __Vehicle.IsMotorcycle(): return True return False def IsRural(self): return ('01'<=self.GetRFC()<='09') def IsUrban(self): return ('11'<=self.GetRFC()<='19') class cVehicle(object): def __init__(self,aRec): self.fRec=aRec return def GetVINBodyTypeCode(self): return self.fRec['VINA DECODES BODY TYPE'] def GetBodyType(self): return self.fRec['BODY TYPE'] def GetDisplacement(self): try: __Result=int(self.fRec['VINA DECODES MOTORCYCLE DISPLACEMENT'].strip()) except ValueError: __Result=ZERO return __Result def GetModelYear(self): try: __Result=int(self.fRec['MODEL YEAR']) except ValueError: __Result=ZERO if YEAR<'1998': if __Result in [99]: __Result=9999 else: __Result=__Result+1900 return __Result def GetLicenseState(self): return self.fRec['LICENSE STATE'] def IsMotorcycle(self): if YEAR<'1991': __Result=('20'<=self.GetBodyType()<='29') else: __Result=('80'<=self.GetBodyType()<='89') # __Result=(self.GetVINBodyTypeCode() in MOTORCYCLE_BODY_TYPES) return __Result def IsLE250Displacement(self): return (ZERO= 1000 cc Displacement')) __MCsUnknownModelYear=__List.append(cCounter('MCs Unknown Model Year')) __MCMeanAge=__List.append(cMean('MC Mean Age')) __FatalitiesMCMeanAge=__List.append(cMean('Fatalities MC Mean Age')) __FatalitiesHelmetProperMCMeanAge=__List.append(cMean('Fatalities with Helmet MC Mean Age')) __FatalitiesHelmetNoneMCMeanAge=__List.append(cMean('Fatalities without Helmet MC Mean Age')) __FARS.Tally() __List.WriteCSV(YEAR,__States) # Fin