Example #1
0
    def preprocess_line(L):

        for n in L:
            loc = []
            location = []

            _data = data_io.data_input(_dir, n).values.tolist()

            fixed_data = list(reversed(data_process.check(_data)))

            for m in range(len(fixed_data) - 1):
                location.append([fixed_data[m][4], fixed_data[m][3], fixed_data[m][11], fixed_data[m][2]])
                dis = data_analysis.distance([fixed_data[m][4], fixed_data[m][3]], [fixed_data[m + 1][4], fixed_data[m + 1][3]])
                if dis >= 0.3:  # 两点间距离大于定为差异大点,即错误点的开始或结束点
                    loc.append(m)

            block = data_process.block_g(loc)
            print(block)
            for i in block:
                data_process.block_fix(location, i[0], i[1])
            data_process.block_fix(location, 0, len(fixed_data))
            distance = []

            for k in location:
                distance.append([k[0], k[1]])
            data_io.map_g(_dir, distance, n, 'test', 'black')
Example #2
0
    def analysis_line(L):

        choice = input('是否需要将数据处理结果输出至控制台?[Y/N]')
        if choice == 'Y' or choice == 'y':
            index = 1
        elif choice == 'N' or choice == 'n':
            index = 0

        try:
            with open(_dir + '\\' + 'dataset.csv', 'w', encoding='utf-8-sig') as dict_file:
                # csv 头名
                dict_file.write(u'文件名,车牌号,设备号,疲劳驾驶时间,疲劳驾驶次数,急加速累计时长,急加速累计次数,急减速累计时长,急减速累计次数,怠速预热累计时长,怠速预热累计次数,超长怠速累计时长,超长怠速累计次数,熄火滑行累计时长,熄火滑行累计次数,超速累计时长,超速累计次数,标准差,急变道次数\n')
                num = len(L)
                cur_num = 0
                for n in L:
                    cur_num += 1

                    _data = data_io.data_input(_dir, n).values.tolist()
                    if index == 1:
                        print('\n' + n + ':')
                        print('\t车牌号:%s\n\t设备号:%s\n' % (_data[0][0], _data[0][1]))
                    fixed_data = list(reversed(data_process.check(_data)))

                    # 分模块来进行处理,这可以使各个部分的数据处理独立,后期便于调整和方法复用
                    # 这一块因为时间紧,所以没有做多进程
                    swift_times = data_analysis.road_swift(fixed_data)
                    fatigue_driving, fatigue_times = data_analysis.fatigue_driving(fixed_data)
                    time_last_acc, time_last_dec, times_acc, times_dec = data_analysis.speed_change_analysis(fixed_data)
                    idle_heating, idle_count, long_tickover, long_count, flameout, flameout_count, speed, speed_count = data_analysis.static_analysis(fixed_data)
                    variance = data_analysis.stable_analysis(fixed_data)

                    if index == 1:
                        print('\t疲劳驾驶时间:%d秒\n\t疲劳驾驶次数:%d次' % (fatigue_driving, fatigue_times))
                        print('\n\t急加速累计时长:%d秒\n\t急加速累计次数:%d次\n\t急减速累计时长:%d秒\n\t急减速累计次数:%d次' % (time_last_acc, times_acc, time_last_dec, times_dec))
                        print('\n\t怠速预热累计时长:%d秒\n\t怠速预热累计次数:%d次\n\t超长怠速累计时长:%d秒\n\t超长怠速累计次数:%d次'% (idle_heating, idle_count, long_tickover, long_count))
                        print('\n\t熄火滑行累计时长:%d秒\n\t熄火滑行累计次数:%d次\n\t超速累计时长:%d秒\n\t超速累计次数:%d次' % (flameout, flameout_count, speed, speed_count))
                        print('\n\t标准差:%d\n\t急变道次数:%d' % (variance, swift_times))

                    # 数据写入 csv
                    dict_file.write('%s,%s,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n' % (n.split('.')[0], fixed_data[0][0], fixed_data[0][1], fatigue_driving, fatigue_times, time_last_acc, times_acc, time_last_dec, times_dec, idle_heating, idle_count, long_tickover, long_count, flameout, flameout_count, speed, speed_count, variance, swift_times))
                    print('The data of %s has been written.(%d/%d)' % (n, cur_num, num))
        except IOError as ioerr:
            print("文件 %s 无法创建,请检查数据文件位置。" % (_dir))

        print("\nDone.")
Example #3
0
    def means(L):

        speed = []
        means = []
        all_num = len(L)
        cur = 0

        for n in L:

            cur += 1
            _data = data_io.data_input(_dir, n).values.tolist()
            fixed_data = list(reversed(data_process.check(_data)))

            for m in fixed_data:
                if m[5] == 1:  # or n[11] != 0:
                    speed.append(m[11])
            means.append([n.split('.')[0], sum(speed) / len(speed)])
            speed = []
            print('%s is OK. (%d/%d)' % (n, cur, all_num))

        for n in means:
            print(n)

        print("\nDone.")
Example #4
0
    def info_extract_line(self):

        climate = []
        wind_direction = []
        level = []

        _data = data_io.data_input(_dir, 'climate.csv').values.tolist()
        for n in _data:
            if n[7] not in climate:
                climate.append(n[7])
            if n[3] not in wind_direction:
                wind_direction.append(n[3])
            if n[4] not in level:
                level.append(n[4])

        for m in climate:
            data_io.save_csv(_data, m, _dir + '\\weather', m)
        for i in wind_direction:
            data_io.save_csv(_data, i, _dir + '\\wind_direction', i)
        for j in level:
            k = j.replace('<', '小于').replace('~', '到')
            print(k)

            data_io.save_csv(_data, j, _dir, k)
Example #5
0
    def analysis_with_weather_line(L):

        all_num = len(L)
        cur_num = 0
        weather_data = []
        didian = []
        weather = []
        spd_lim = {'大雨': 90, '暴雨': 70, '浮尘': 0, '扬沙': 0, '大暴雨': 40, '雾': 100}
        spd_set = []
        default_spd = 100

        final = []

        for n in L:
            cur_num += 1
            print('%s started.' % n)

            _data = data_io.data_input(_dir, n).values.tolist()
            _data = list(reversed(data_process.check(_data)))  # 修正漂移经纬度
            for m in range(len(_data) - 1):
                _data[m + 1][4], _data[m + 1][3] = data_process.location_fix([_data[m][4], _data[m][3], _data[m][11], _data[m][2]])

            temp_data = data_io.data_input(_dir, 'climate.csv').values.tolist()

            for m in temp_data:  # 预处理天气数据
                weather_data.append([m[1], m[2], m[7], m[10]])

            # 以10分钟为间隔获取地点
            for m in range(len(_data)//600):
                loc = data_convert.wgs84_to_gcj02(_data[m * 600][3], _data[m * 600][4])
                city, district = data_analysis.get_location(loc)
                if [city, district] not in didian:

                    didian.append([str(city).replace('市', ''), str(district).replace('区', '').replace('县', '')])

            # 找出符合地理条件的天气和时间
            for m in weather_data:  # ['绍兴', '诸暨', '多云', '24/9/2018']
                for i in didian:
                    if i[0] == m[0] and i[1] == m[1]:
                            if [m[2], m[3], m[0], m[1]] not in weather:
                                weather.append([m[2], m[3], m[0], m[1]])  # ['晴', '30/7/2018', '抚州', '崇仁']

            # 检查找出每个日期对应的最小的速度值
            for m in range(len(weather) - 1):
                for i in spd_lim:
                    if i in weather[m][0]:
                        default_spd = min(default_spd, spd_lim.get(i))
                if weather[m][1] == weather[m + 1][1] and weather[m][2] == weather[m + 1][2] and weather[m][3] == weather[m + 1][3]:
                    continue
                else:
                    spd_set.append([weather[m][1], default_spd, weather[m][2], weather[m][3]])  # ['30/7/2018', 100, '南昌', '新建']
            export = [n.split('.')[0], _data[0][0], _data[0][1], data_analysis.speed_analysis(_data, spd_set, weather_data)]
            final.append(export)
            print(export)
            print('The data of %s was generated. (%d/%d)' % (n, cur_num, all_num))

        try:
            with open(_dir + '\\weather_dataset.csv', 'w') as dict_file:
                dict_file.write('文件名,车牌号,设备号,晴,小雨,中雨,大雨,暴雨,大暴雨,雾,超速次数')
                for m in final:
                    dict_file.write('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n' % (
                    m[0], m[1], m[2], m[1][0], m[1][1], m[1][2], m[1][3], m[1][4], m[1][5], m[1][6], m[2],
                    m[11], m[12]))
        except IOError as ioerr:
            print("文件 %s 无法创建,请检查数据文件位置。" % _dir)