美文网首页
数据处理部分1

数据处理部分1

作者: 安检被捏丸子头 | 来源:发表于2020-08-26 16:18 被阅读0次

    数据中司机ID在实验中未使用

    def file_2016_10_16():
        """
        处理原始滴滴数据
        删除司机id
        :return:
        """
        temp_p = '/Volumes/机械硬盘/2016年10月成都市二环局部区域轨迹数据/gps_20161016'
    
        # 显示所有列
        pd.set_option('display.max_columns', None)
        # 显示所有行
        pd.set_option('display.max_rows', None)
    
        data = pd.read_csv(temp_p, header=None, sep=',', names=['pid', 'oid', 'time', 'lng', 'lat'])
        data.drop(['pid'], axis=1, inplace=True)
        data.sort_values(['oid', 'time'], ascending=[True, True], inplace=True)
    
        data.to_csv('gps_20161016.csv', sep=',', index=False, chunksize=500)
    

    需要将数据中速度过高的数据删除

    通过吉斯算每两个轨迹点之间的瞬时速度来判断车速是否过快,将瞬时速度大于33.33m/s的订单数据过滤掉

    def data_clean():
        """
        数据清洗
        删除速度过高的数据
        :return:
        """
        tracks_array = pd.read_csv('../gps_data/gps_20161016_data.csv')
        tv = tracks_array.values
    
        no_high_speed = True
        bad_track = []
    
        current_id = tv[0][0]  # 第一条轨迹id
    
        for i in range(1, len(tv)):
    
            if tv[i][0] == current_id and no_high_speed:
                if (tv[i][1] - tv[i - 1][1]) > 10:
                    # 如果轨迹点间隔时间超过5s,则标记为脏数据
                    bad_track.append(tv[i][0])
                    no_high_speed = False
                else:
                    # 计算瞬时速度
                    distence = round(haversine(tv[i][2], tv[i][3], tv[i - 1][2], tv[i - 1][3]))
                    speed = distence / (tv[i][1] - tv[i - 1][1])
                    if speed > 33.33:
                        bad_track.append(tv[i][0])
                        no_high_speed = False
    
            if tv[i][0] != current_id:
                current_id = tv[i][0]
                no_high_speed = True
    
        return bad_track, tv
    

    相关文章

      网友评论

          本文标题:数据处理部分1

          本文链接:https://www.haomeiwen.com/subject/ixqfsktx.html