def updLastTravelRecs(self): if self.currentDatasets['fromAdmin'] == '': return 0 # fromGid = formatGridID(getCityLocs(self.CITY), self.currentDatasets['fromLatLng']) toGid = formatGridID(getCityLocs(self.CITY), self.currentDatasets['toLatLng']) fromAdmin = getAdminNumber(self.currentDatasets['fromAdmin']) toAdmin = getAdminNumber(self.currentDatasets['toAdmin']) supStr = "%d,%d,%d,%d" % (fromGid, toGid, fromAdmin, toAdmin) # 遍历记录 for each in self.currentDatasets['data']: ydayCurrent = each[1] newline = "%s,%s" % (each[0], supStr) self.COUNT[ydayCurrent] += 1 self.MATRIX[ydayCurrent].append(newline) self.checkWriteOpt(ydayCurrent) # 重置 self.currentDatasets['fromLatLng'] = [0, 0] self.currentDatasets['fromAdmin'] = '' self.currentDatasets['data'] = []
def iterateFile(self, ifile): # stay travel 都处理的情况 with open(ifile, 'rb') as stream: for line in stream: line = line.strip('\n') linelist = line.split(',') state = linelist[4] if state == 'U' or line == '': continue # 分析日期 tmp = formatTime(linelist[1]) ydayCurrent = tmp['yday'] - 187 wday = tmp['wday'] hour = tmp['hour'] seg = ydayCurrent * 24 + hour if ydayCurrent < 0 or ydayCurrent >= self.MAXDAY: continue id = linelist[0] admin = getAdminNumber(linelist[6]) gid = formatGridID(getCityLocs(self.CITY), [linelist[3], linelist[2]]) newLinePreStr = "%s,%d,%d,%d,%d" % (id, seg, hour, wday, gid) # 分状态处理原始数据 # S 时 currentDatasets 数据重置(重置前查看是否需要转存上一段 T 的数据) # T 时对比当前 from 是否为初始状态,若为初始状态当前数据存在 from,否则存在 to if state == 'T': if self.currentDatasets['fromLatLng'][0] == 0: self.currentDatasets['fromLatLng'] = [ linelist[3], linelist[2] ] self.currentDatasets['fromAdmin'] = linelist[6] self.currentDatasets['stateId'] = linelist[5] else: # 判断 stateId 是否一致 if linelist[5] != self.currentDatasets['stateId']: self.updLastTravelRecs() else: self.currentDatasets['toLatLng'] = [ linelist[3], linelist[2] ] self.currentDatasets['toAdmin'] = linelist[6] tmp = "%s,T,%d" % (newLinePreStr, admin) self.currentDatasets['data'].append([tmp, ydayCurrent]) else: self.updLastTravelRecs() newline = "%s,S,%d,0,0,0,0" % (newLinePreStr, admin) self.COUNT[ydayCurrent] += 1 self.MATRIX[ydayCurrent].append(newline) self.checkWriteOpt(ydayCurrent) stream.close()
def iterateFileOnlyTravel(self, ifile): # travel 情况 with open(ifile, 'rb') as stream: for line in stream: line = line.strip('\n') linelist = line.split(',') state = linelist[4] if state == 'U' or line == '' or state == 'S': continue # 分析日期 tmp = formatTime(linelist[1]) ydayCurrent = tmp['yday'] - 187 wday = tmp['wday'] hour = tmp['hour'] seg = ydayCurrent * 24 + hour if ydayCurrent < 0 or ydayCurrent >= self.MAXDAY: continue id = linelist[0] admin = getAdminNumber(linelist[6]) gid = formatGridID(getCityLocs(self.CITY), [linelist[3], linelist[2]]) newLinePreStr = "%d,%s,%s,%s,%s" % (hour, id, linelist[1], linelist[2], linelist[3]) # T 时对比当前 from 是否为初始状态,若为初始状态当前数据存在 from,否则存在 to if self.currentDatasets['fromLatLng'][0] == 0: self.currentDatasets['fromLatLng'] = [ linelist[3], linelist[2] ] self.currentDatasets['fromAdmin'] = linelist[6] self.currentDatasets['fromTime'] = linelist[1] self.currentDatasets['stateId'] = linelist[5] else: # 判断 stateId 是否一致 if linelist[5] != self.currentDatasets['stateId']: self.updLastTravelRecsOnlyTravel() else: self.currentDatasets['toLatLng'] = [ linelist[3], linelist[2] ] self.currentDatasets['toAdmin'] = linelist[6] self.currentDatasets['toTime'] = linelist[1] # tmp = "%s,T,%d" % (newLinePreStr, admin) self.currentDatasets['data'].append( [newLinePreStr, ydayCurrent]) stream.close()
def updateDis(self, ifile): # resnum = 0 with open(ifile, 'rb') as stream: for line in stream: line = line.strip('\n') resnum += 1 linelist = line.split(',') grid = formatGridID(getCityLocs(self.CITY), [linelist[3], linelist[2]]) fromGid = formatGridID(getCityLocs(self.CITY), [linelist[6], linelist[5]]) toGrid = formatGridID(getCityLocs(self.CITY), [linelist[8], linelist[7]]) state = linelist[4] # 无效 Travel 状态信息 if state == 'T' and (line[6] == '0' or line[5] == '0' or line[8] == '0' or line[7] == '0'): continue tmp = formatTime(linelist[1]) ydayCurrent = tmp['day'] hourCurrent = tmp['hour'] if ydayCurrent == self.DAY and hourCurrent == self.HOUR: self.dealPointState({ 'id': linelist[0], 'state': state, 'day': ydayCurrent, 'grid': grid, 'fromGrid': fromGid, 'toGrid': toGrid }) stream.close()