小区出入车统计方案
1, 先按日期将数据分组,每天一个组,理解成每天的数据是一个文件, daily_data
2, 对每天的数据建立入车字典和出车字典,以车牌为key,value为长度24的列表,对应每个小时的
最晚入车时间或出车时间。同一车辆不会连续入车两次,也不会连续出车两次,此前必包含完整的进出,
可抵消不计,只记录单位小时的最晚入车或出车。列表内的元素为出/入车时间(字符串)或0(这个小时没有出入记录)。
3,对当天数据统计每个车的最早出车和最晚入车时间, 有则记录时间,无则记录0。
4 ,对当天数据统计每个车的入车次数和出车次数,两者相等或差值为1。入车次数大,则最终状态为进入;
出车次数大,则最终状态为离开;两者相等比较时间,最晚时间为入车,则最终状态为入车,反之为出车。
5,经过以上处理,就一天的数据而言,每个车可得一个分析结果,以字典为数据结构,示例:
{
’car_a‘: {'move_in': ’16:30:20‘ or 0, 'move_out': '08:10:30' or 0, 'status': 'in' or 'out'},
'car_b': {'move_in': ’16:10:20‘ or 0, 'move_out': '09:10:30' or 0, 'status': 'in' or 'out'}
}
6, 相邻两天的数据按车牌比较,若前一天最终状态为出车,跳过比较
def census(former_data, latter_data):
use_cars = []
for key in former_data:
part_a = former_data[key]
if part['status'] == 'in' and key in latter_data:
part_b = latter_data[key]
if part_b['move_out']:
remain = part_b['move_out'] - part_a['move_in']
if remain >= 24h:
use_cars.append(key)
ruturn use_cars